Hoy recibí un mensaje de un amigo en WeChat, recordándome que no se puede abrir el blog. Efectivamente, después de abrirlo, mostró directamente "Su sitio ha encontrado un error fatal". Si lo piensa detenidamente, además de haber sido atacado recientemente, el blog instaló el complemento W3 Total Cache. Básicamente se puede concluir que el complemento es el culpable.
Después de la investigación, se encontró que el error de PHP era: "RedisException no detectada: el comando OOM no se permite cuando se usa memoria", lo que indica que Redis no puede escribir datos en la memoria, incluso si se reinicia el servidor. La solución final es ajustar la configuración de Redis y aumentar el tamaño de memoria predeterminado.
Este artículo compartirá el proceso de cómo solucionar el problema de que su sitio de WordPress haya encontrado un error fatal. Hay más artículos sobre la creación de sitios web de WordPress aquí:
- Complemento de resaltado de código súper compatible y completo de WordPress Complemento esencial de Enlighter-WP
- Poedit, una herramienta esencial para la chinoización de temas y complementos de WordPress: genera automáticamente archivos .Po y .Mo
- Utilice Elasticsearch como ventana acoplable de búsqueda en el sitio de WordPress, instale elasticSearch, kibana y ik word segmenter
1. Active el modo de depuración de WP
Cuando su WordPress encuentre un error, no entre en pánico. Elija abrir el modo de depuración de WordPress y llamar a los errores de PHP. Referencia del método: modo de diagnóstico de errores de WordPress: se especializa en tratar páginas de WP en blanco, errores del servidor 500 y conflictos de complementos.
2. Encuentra errores fatales de WP
Después de activar el modo de depuración de WordPress, la página web mostrará errores de PHP, de la siguiente manera:
Error fatal: RedisException no detectada: el comando OOM no se permite cuando se usa memoria > 'maxmemory' en /xxx/wzfou.com/wp-content/plugins/w3-total-cache/Cache_Redis.php:68 Stack. seguimiento: #0 /xxxxx/wzfou.com/wp-content/plugins/w3-total-cache/Cache_Redis.php(68): Redis->setex('w3tc_1987146988…', 180, 'a:2:{s: 7:"conte…') #1 /xxxx/wzfou.com/wp-content/plugins/w3-total-cache/ObjectCache_WpObjectCache_Regular.php(293): W3TCCache_Redis->set('0optionsallopti…', Array, 180) # 2 /xxx/wzfou.com/wp-content/plugins/w3-total-cache/ObjectCache_WpObjectCache_Regular.php(388): W3TCObjectCache_WpObjectCache_Regular->set('alloptions', Array, 'options', 0) #3 /xxx/wzfou .com/wp-content/plugins/w3-total-cache/ObjectCache_WpObjectCache.php(77): W3TCObjectCache_WpObjectCache_Regular->add('alloptions', Array, 'options', 0) #4 /xxxx/wzfou.com/wp- content/object-cache.php(95): W3TCObjectCache_WpObjectCache->add('alloptions', Array, 'options', 0) #5 /xxxx/wzfou.com/wp-includes/option.php(258): en /xxxx/wzfou.com/wp-content/plugins/w3-total-cache/Cache_Redis.php en línea 68
Mensaje de error: "RedisException no detectada: el comando OOM no se permite cuando se usa memoria > 'maxmemory'. En /xxx/wzfou.com/wp-content/plugins/w3-total-cache/Cache_Redis.php", obviamente porque Redis está activado El almacenamiento en caché de objetos provocó el error. Visto la configuración de Redis:
root@localhost:~# redis-cli
127.0.0.1:6379> memoria de información
# Memoria
used_memory:250161160
used_memory_human:238.57M
used_memory_rss:274608128
used_memory_rss_human:261.89 M
used_memory_peak:254227888
used_memory_peak_human:242.45M
used_memory_peak_perc:98.40%
used_memory_overhead:7712830
used_memory_startup:803088
used_memory_dataset:2424 48330
used_memory_dataset_perc:97,23%
allocator_allocated:250366144
allocator_active:260894720
allocator_resident:268197888
total_system_memory:2111430656
total_system_memory_human:1.97G
used_memory_lua:37888<ph1 9>used_memory_lua_human:37.00K
used_memory_scripts:0
used_memory_scripts_human:0B
número_de_scripts_cached:0
maxmemory:251000000
maxmemory_human:239.37M
maxmemory_policy:noeviction
allocator_frag_ratio:1.04
allocator_frag_bytes:10528576<ph 28>alloc ator_rss_ratio:1.03
allocator_rss_bytes: 7303168
rss_overhead_ratio:1.02
rss_overhead_bytes:6410240
mem_fragmentation_ratio:1.10
mem_fragmentation_bytes:24487992
mem_not_counted_for_evict:0
registro mem_replication_back:0
mem_clients_slaves:0
mem_clients_normal:390678
mem_aof_buffer:0
mem_allocator:jemalloc-5.1.0
active_defrag_running:0
lazyfree_pending_objects:0
127.0.0.1:6379>
Se puede ver en la configuración: la memoria ocupada used_memory_human:238.57M, el sistema permite que Redis use la memoria máxima: maxmemory_human:239.37M, de hecho está ocupada y el espacio ya no existe.
3. Resuelva el problema de la memoria insuficiente de Redis.
Si está utilizando Oneinstack, puede consultar el siguiente método para modificar la configuración de Redis Por cierto, también puede modificar la configuración de Memcached para aumentar la memoria predeterminada:
#Redis默认端口:6379 #Memcached默认端口:11211 #默认监听地址:127.0.0.1 #调整Redis最大内存大小? vi /usr/local/redis/etc/redis.conf maxmemory 1024000000#单位字节,默认1G,可调整 service redis-server restart#重启生效 #增加Memcached最大内存大小? vi/etc/init.d/memcached CACHESIZE=256 #单位M,默认256M,可调整 service memcached restart#重启生效
Establezca la política de eliminación: maxmemory-policy volatile-lru
Varias otras estrategias de eliminación se describen a continuación:
no desalojo
Política predeterminada
no desalojado
Cuando no hay suficiente memoria para que la use Redis, se informará una excepción al ejecutar el comando de escritura: redis.exceptions.ResponseError, el comando OOM no se permite cuando se usa memoria > 'maxmemory'
volátil-lru
Para claves caducadas, implemente la estrategia de eliminación lru (desaloje los datos utilizados menos recientemente)
Si no hay una clave caducada, se informará una excepción al ejecutar el comando de escritura cuando la memoria sea insuficiente: redis.exceptions.ResponseError, el comando OOM no se permite cuando se usa memoria > ‘maxmemory’, lo mismo que la política de no desalojo
todas las teclas-lru
Ejecute lru para todas las claves
No hay forma de restringir algunos algoritmos para eliminar determinadas claves.
Si su aplicación necesita conservar algunos datos, no utilice la estrategia allkeys-lru
volátil-aleatorio
Para claves caducadas, seleccione aleatoriamente una clave para expulsarla
todas las teclas aleatorias
Para todas las claves, seleccione aleatoriamente una clave para expulsar
volátil-ttl
Entre las claves caducadas, la que tenga el valor ttl más pequeño será desalojada primero.
4. Resumen
La aceleración de la optimización de WordPress es un tema común. Para lograr los mejores resultados, a menudo necesitamos ajustar razonablemente la estrategia de optimización en función de la configuración real de nuestro servidor.
Con respecto a la optimización y aceleración del blog, escribí un tema resumido: Principales tecnologías de aplicación y características de soporte de blogs: resumen de los métodos de optimización del sitio web y del servidor del blog.