Hoje recebi uma mensagem de um amigo no WeChat, lembrando que o blog não pode ser aberto. Com certeza, depois de abri-lo, ele exibiu diretamente “Seu site encontrou um erro fatal”. Se você pensar bem, além de ter sido atacado recentemente, o blog instalou o plug-in W3 Total Cache. basicamente pode-se concluir que a culpa é do plug-in.

Após investigação, descobriu-se que o erro do PHP era: "Uncaught RedisException: comando OOM não permitido quando usada memória", indicando que o Redis não pode gravar dados na memória, mesmo que o servidor seja reiniciado. A solução final é ajustar a configuração do Redis e aumentar o tamanho da memória padrão.

Este artigo compartilhará o processo de como solucionar problemas de erro fatal do seu site WordPress. Há mais artigos sobre a construção de sites WordPress aqui:

  1. Plug-in de destaque de código completo e supercompatível do WordPress Plug-in essencial do Enlighter-WP
  2. Poedit, uma ferramenta essencial para chinêsizar temas e plug-ins do WordPress – gera automaticamente arquivos .Po e .Mo
  3. Use Elasticsearch como WordPress no site search-docker install elasticSearch, kibana e ik word segmenter

1. Ative o modo WP Debug

Quando o seu WordPress encontrar um erro, não entre em pânico. Escolha abrir o modo de depuração do WordPress e chamar erros de PHP. Modo de diagnóstico de erros do WordPress - especializado no tratamento de páginas WP em branco, erros de servidor 500 e conflitos de plug-in.

2. Encontre erros fatais do WP

Após ativar o modo Debug do WordPress, a página web exibirá erros de PHP, como segue:

Erro fatal: RedisException não capturada: comando OOM não permitido quando memória usada> 'maxmemory' em /xxx/wzfou.com/wp-content/plugins/w3-total-cache/Cache_Redis.php:68 Stack. rastreamento: #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): em /xxxx/wzfou.com/wp-content/plugins/w3-total-cache/Cache_Redis.php na linha 68

Mensagem de erro: "Uncaught RedisException: comando OOM não permitido quando usado memória> 'maxmemory'. em /xxx/wzfou.com/wp-content/plugins/w3-total-cache/Cache_Redis.php", obviamente porque o Redis está ativado O cache de objetos causou o erro. Visualizou a configuração do Redis:

root@localhost:~# redis-cli
127.0.0.1:6379> memória de informações
# Memory
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%
alocador_allocado:250366144
allocator_ativo:260894720
allocator_resident:268197888
total_system_memory:2111430656
total_system_memory_human:1,97G
used_memory_lua:37888
usou _memory_lua_human:37,00K
used_memory_scripts:0
used_memory_scripts_human:0B
number_of_cached_scripts:0
maxmemory:251000000
maxmemory_human:239,37M
maxmemory_policy:noeviction
allocator_frag_ratio:1.04
allocator_frag_bytes:10 528576
allocador_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
log de 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>

Pode-se verificar pela configuração: a memória ocupada used_memory_human:238,57M, a memória máxima permitida pelo sistema para Redis é: maxmemory_human:239,37M, está realmente ocupada e o espaço acabou.

3. Resolva o problema de memória Redis insuficiente

Se estiver usando Oneinstack, você pode consultar o seguinte método para modificar a configuração do Redis A propósito, você também pode modificar a configuração do Memcached para aumentar a memória padrão:

#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#重启生效

Defina a política de eliminação: maxmemory-policy volátil-lru

Várias outras estratégias de eliminação são descritas abaixo:

sem despejo

Política padrão

Não despejado

Quando não houver memória suficiente para uso do Redis, uma exceção será relatada ao executar o comando de gravação: redis.exceptions.ResponseError, comando OOM não permitido quando memória usada> ‘maxmemory’

volátil-lru

Para chaves expiradas, execute a estratégia de eliminação lru (despeje os dados usados ​​menos recentemente)

Se não houver chave expirada, uma exceção será relatada ao executar o comando de gravação quando a memória for insuficiente: redis.exceptions.ResponseError, comando OOM não permitido quando memória usada > ‘maxmemory’, o mesmo que política noeviction

allkeys-lru

Execute lru para todas as chaves

Não há como restringir alguns algoritmos para excluir determinadas chaves.

Se o seu aplicativo precisar persistir alguns dados, não use a estratégia allkeys-lru

volátil-aleatório

Para chaves expiradas, selecione aleatoriamente uma chave para expulsar

todas as teclas aleatórias

Para todas as chaves, selecione aleatoriamente uma chave para expulsar

volátil-ttl

Entre as chaves expiradas, aquela com o menor valor de ttl será removida primeiro.

4. Resumo

A aceleração da otimização do WordPress é um tópico comum. Para obter os melhores resultados, muitas vezes precisamos ajustar razoavelmente a estratégia de otimização com base na configuração real do nosso servidor.

Em relação à otimização e aceleração do blog, escrevi um tópico resumido: Principais tecnologias de aplicação e recursos de suporte de blogs - Resumo dos métodos de otimização de sites e servidores do blog.

Deixe uma resposta