Aujourd'hui, j'ai reçu un message d'un ami sur WeChat, me rappelant que le blog ne peut pas être ouvert. Effectivement, après l'avoir ouvert, il affichait directement « Votre site a rencontré une erreur fatale ». Si vous y réfléchissez bien, en plus d'avoir été attaqué récemment, le blog a installé le plug-in W3 Total Cache. on peut en conclure que le plug-in est à blâmer.
Après enquête, il a été constaté que l'erreur PHP était : "Uncaught RedisException : commande OOM non autorisée lors de l'utilisation de la mémoire", indiquant que Redis ne peut pas écrire de données dans la mémoire, même si le serveur est redémarré. La solution finale consiste à ajuster la configuration Redis et à augmenter la taille de la mémoire par défaut.
Cet article partagera le processus de dépannage lorsque votre site WordPress a rencontré une erreur fatale. Il y a plus d'articles sur la création de sites Web WordPress ici :
- Plug-in de mise en évidence de code WordPress complet et super compatible Plug-in essentiel Enlighter-WP
- Poedit, un outil indispensable pour chinoisiser les thèmes et plug-ins WordPress – génère automatiquement les fichiers .Po et .Mo
- Utilisez Elasticsearch comme dock de recherche sur site WordPress pour installer elasticSearch, kibana et ik word segmenter
1. Activez le mode débogage WP
Lorsque votre WordPress rencontre une erreur, ne paniquez pas. Choisissez d'ouvrir le mode Débogage de WordPress et d'appeler les erreurs PHP : Mode de diagnostic d'erreur WordPress - spécialisé dans le traitement des pages WP vierges, des erreurs du serveur 500 et des conflits de plug-ins.
2. Recherchez les erreurs fatales WP
Après avoir activé le mode débogage de WordPress, la page Web affichera les erreurs PHP, comme suit :
Erreur fatale : RedisException non interceptée : commande MOO non autorisée lors de l'utilisation de la mémoire > 'maxmemory' dans la pile /xxx/wzfou.com/wp-content/plugins/w3-total-cache/Cache_Redis.php:68. trace : #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) : dans /xxxx/wzfou.com/wp-content/plugins/w3-total-cache/Cache_Redis.php en ligne 68
Message d'erreur : "Uncaught RedisException : commande MOO non autorisée lors de l'utilisation de la mémoire > 'maxmemory'. dans /xxx/wzfou.com/wp-content/plugins/w3-total-cache/Cache_Redis.php", évidemment parce que Redis est activé La mise en cache des objets a provoqué l'erreur. Affichage de la configuration Redis :
root@localhost :~# redis-cli
127.0.0.1:6379> mémoire d'informations
# Mémoire
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,97 G
used_memory_lua :37888<ph1 9>utilisé _memory_lua_human :37,00 K
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:105285 76
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
journal 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_ending_objects:0
127.0.0.1:6379>
Cela se voit sur la configuration : la mémoire occupée used_memory_human:238.57M, le système permet à Redis d'utiliser le maximum de mémoire : maxmemory_human:239.37M, elle est bien occupée et l'espace a disparu.
3. Résoudre le problème de la mémoire insuffisante de Redis
Si vous utilisez Oneinstack, vous pouvez vous référer à la méthode suivante pour modifier la configuration de Redis . D'ailleurs, vous pouvez également modifier la configuration de Memcached pour augmenter la mémoire par défaut :
#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#重启生效
Définissez la stratégie d'élimination : maxmemory-policy volatile-lru
Plusieurs autres stratégies d’élimination sont décrites ci-dessous :
nonexpulsion
Politique par défaut
Non expulsé
Lorsqu'il n'y a pas assez de mémoire à utiliser par Redis, une exception sera signalée lors de l'exécution de la commande d'écriture : redis.exceptions.ResponseError, commande OOM non autorisée lors de l'utilisation de la mémoire > « maxmemory »
volatile-lru
Pour les clés expirées, mettez en œuvre la stratégie d'élimination lru (expulsez les données les moins récemment utilisées)
S'il n'y a pas de clé expirée, une exception sera signalée lors de l'exécution de la commande d'écriture lorsque la mémoire est insuffisante : redis.exceptions.ResponseError, commande MOO non autorisée lors de l'utilisation de la mémoire > « maxmemory », identique à la politique de non-expulsion
allkeys-lru
Exécuter lru pour toutes les clés
Il n'existe aucun moyen de restreindre certains algorithmes pour supprimer certaines clés.
Si votre application doit conserver certaines données, veuillez ne pas utiliser la stratégie allkeys-lru
volatile-aléatoire
Pour les clés expirées, sélectionnez au hasard une clé à expulser
toutes les touches aléatoires
Pour toutes les clés, sélectionnez au hasard une clé à expulser
volatile-ttl
Parmi les clés expirées, celle avec la plus petite valeur ttl sera expulsée en premier.
4. Résumé
L'accélération de l'optimisation WordPress est un sujet courant. Afin d'obtenir les meilleurs résultats, nous devons souvent ajuster raisonnablement la stratégie d'optimisation en fonction de la configuration réelle de notre serveur.
Concernant l'optimisation et l'accélération du blog, j'ai rédigé un sujet de synthèse : Principales technologies d'application et fonctionnalités supports des blogs - Résumé des méthodes d'optimisation du site et du serveur du blog.