今日、友人から WeChat でブログを開けないというメッセージを受け取りました。案の定、開いてみると「あなたのサイトでは致命的なエラーが発生しました。」と直接表示されました。よく考えてみると、このブログは最近攻撃を受けていることに加えて、W3 Total Cache プラグインをインストールしていると推測されます。基本的にはプラグインが原因であると結論付けることができます。
調査の結果、PHP エラーは「Uncaught RedisException: OOM command not allowed when used Memory」であることが判明しました。これは、サーバーが再起動されても、Redis がメモリにデータを書き込むことができないことを示しています。最後の解決策は、Redis 構成を調整し、デフォルトのメモリ サイズを増やすことです。
この記事では、WordPress サイトで致命的なエラーが発生した場合のトラブルシューティング方法について説明します。WordPress ウェブサイトの構築に関するその他の記事は次のとおりです。
- WordPress 万能かつ超互換性のあるコードハイライトプラグイン Enlighter-WP 必須プラグイン
- Poedit、WordPress テーマとプラグインを中国語化するための必須ツール - .Po および .Mo ファイルを自動的に生成
- Elasticsearch を WordPress として使用する オンサイト検索 - ドッカーで elasticSearch、kibana、ik ワード セグメンターをインストールする
1. WP デバッグモードをオンにする
WordPress でエラーが発生した場合でも、パニックにならないでください。WordPress のデバッグ モードを開いて PHP エラーを呼び出すことを選択してください。WordPress エラー診断モード - 空白の WP ページ、サーバー 500 エラー、およびプラグインの競合の処理に特化しています。
2. WP の致命的なエラーを見つける
WordPress のデバッグ モードをオンにすると、Web ページに次のような PHP エラーが表示されます。
致命的なエラー: キャッチされない RedisException: /xxx/wzfou.com/wp-content/plugins/w3-total-cache/Cache_Redis.php:68 スタックの使用済みメモリ > 'maxmemory' の場合、OOM コマンドは許可されません。トレース: #0 /xxxxx/wzfou.com/wp-content/plugins/w3-total-cache/Cache_Redis.php(68): Redis->setex('w3tc_1987146988…', 180, 'a:2:{s: 7:"コンテ…') #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): in /xxxx/wzfou.com/wp-content/plugins/w3-total-cache/Cache_Redis.php、行 68
エラー メッセージ: 「Uncaught RedisException: OOM コマンドは、使用メモリ > 'maxmemory' の場合は許可されません。/xxx/wzfou.com/wp-content/plugins/w3-total-cache/Cache_Redis.php」。明らかに Redis がオンになっているためです。オブジェクトのキャッシュがエラーの原因でした。 Redis 構成を表示しました。
root@localhost:~# redis-cli
127.0.0.1:6379> 情報メモリ
# メモリ
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
used_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:1052 8576
allocator_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<ph 35>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>
これは構成からわかります: 占有メモリ used_memory_human:238.57M、Redis のシステムで許可される最大メモリは maxmemory_human:239.37M で、実際に占有されており、スペースがなくなっています。
3. Redis メモリ不足の問題を解決する
Oneinstack を使用している場合は、次の方法を参照して Redis の構成を変更できます。ちなみに、Memcached の構成を変更してデフォルトのメモリを増やすこともできます。
#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#重启生效
削除ポリシーを設定します: maxmemory-policy volatile-lru
他のいくつかの排除戦略を以下に説明します。
ノエビクション
デフォルトポリシー
立ち退きされない
Redis が使用するのに十分なメモリがない場合、書き込みコマンドの実行時に例外が報告されます: redis.Exceptions.ResponseError,OOM コマンドは使用メモリ > 'maxmemory' の場合は許可されません
揮発性-lru
期限切れのキーについては、lru 除去戦略を実行します (最も最近使用されていないデータを削除します)。
期限切れのキーがない場合、メモリが不十分なときに書き込みコマンドを実行すると例外が報告されます: redis.Exceptions.ResponseError、使用メモリ > 'maxmemory' の場合は OOM コマンドは許可されません、noeviction ポリシーと同じ
allkeys-lru
すべてのキーに対して lru を実行する
特定のキーを削除するように一部のアルゴリズムを制限する方法はありません。
アプリケーションで一部のデータを保持する必要がある場合は、allkeys-lru 戦略を使用しないでください。
揮発性ランダム
期限切れのキーの場合、削除するキーをランダムに選択します
オールキーランダム
すべてのキーについて、除外するキーをランダムに選択します
揮発性-ttl
期限切れのキーのうち、ttl 値が最も小さいものが最初に削除されます。
4. まとめ
WordPress の最適化の高速化は一般的なトピックであり、最良の結果を達成するには、サーバーの実際の構成に基づいて最適化戦略を合理的に調整する必要があります。
ブログの最適化と高速化については、 ブログの主な応用技術とそれを支える機能 - ブログのWebサイトとサーバーの最適化手法のまとめ というまとめトピックを書きました。