Heute habe ich eine Nachricht von einem Freund auf WeChat erhalten, die mich daran erinnert, dass der Blog nicht geöffnet werden kann. Tatsächlich wurde nach dem Öffnen direkt angezeigt: „Auf Ihrer Website ist ein schwerwiegender Fehler aufgetreten.“ Spekulationen zufolge hat der Blog nicht nur kürzlich angegriffen, sondern auch das W3 Total Cache-Plugin installiert. Grundsätzlich kann man davon ausgehen, dass das Plug-in schuld ist.

Nach der Untersuchung wurde festgestellt, dass der PHP-Fehler „Uncaught RedisException: OOM-Befehl bei Verwendung des Speichers nicht zulässig“ war, was darauf hinweist, dass Redis keine Daten in den Speicher schreiben kann, selbst wenn der Server neu gestartet wird. Die endgültige Lösung besteht darin, die Redis-Konfiguration anzupassen und die Standardspeichergröße zu erhöhen.

In diesem Artikel erfahren Sie, wie Sie Fehler beheben können, wenn auf Ihrer WordPress-Site ein schwerwiegender Fehler aufgetreten ist. Weitere Artikel zum Erstellen von WordPress-Websites finden Sie hier:

  1. WordPress-Allround- und superkompatibles Code-Hervorhebungs-Plug-in. Enlighter-WP Essential-Plug-in
  2. Poedit, ein unverzichtbares Tool zur Chinesisierung von WordPress-Themes und -Plug-Ins – generiert automatisch .Po- und .MO-Dateien
  3. Verwenden Sie Elasticsearch als WordPress-On-Site-Such-Docker und installieren Sie ElasticSearch, Kibana und IK Word Segmenter

1. Aktivieren Sie den WP-Debug-Modus

Wenn Ihr WordPress auf einen Fehler stößt, geraten Sie nicht in Panik. Öffnen Sie den Debug-Modus von WordPress und rufen Sie die PHP-Methodenreferenz auf: Der WordPress-Fehlerdiagnosemodus ist auf die Behandlung leerer WP-Seiten, Server-500-Fehler und Plug-in-Konflikte spezialisiert.

2. Finden Sie schwerwiegende WP-Fehler

Nach dem Einschalten des Debug-Modus von WordPress werden auf der Webseite PHP-Fehler wie folgt angezeigt:

Schwerwiegender Fehler: Nicht erfasste RedisException: OOM-Befehl nicht zulässig, wenn Speicher > „maxmemory“ in /xxx/wzfou.com/wp-content/plugins/w3-total-cache/Cache_Redis.php:68 verwendet wird 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): in /xxxx/wzfou.com/wp-content/plugins/w3-total-cache/Cache_Redis.php in Zeile 68

Fehlermeldung: „Uncaught RedisException: OOM-Befehl nicht zulässig, wenn Speicher > ‚maxmemory‘ verwendet wird. in /xxx/wzfou.com/wp-content/plugins/w3-total-cache/Cache_Redis.php“, offensichtlich weil Redis aktiviert ist Das Zwischenspeichern von Objekten hat den Fehler verursacht. Habe mir die Redis-Konfiguration angesehen:

root@localhost:~# redis-cli
127.0.0.1:6379> info memory
# Speicher
used_memory:250161160
used_memory_human:238.57M
used_memory_rss:274608128
used_memory_rss_human:261.8 9 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_data set: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:105 28576
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<ph3 5>mem_replication_back log: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>

Aus der Konfiguration ist ersichtlich: Der belegte Speicher used_memory_human:238,57M, der vom System für Redis maximal zugelassene Speicher beträgt: maxmemory_human:239,37M, er ist tatsächlich belegt und der Speicherplatz ist weg.

3. Lösen Sie das Problem des unzureichenden Redis-Speichers

Wenn Sie Oneinstack verwenden, können Sie auf die folgende Methode zurückgreifen, um die Konfiguration von Redis zu ändern. Übrigens können Sie auch die Konfiguration von Memcached ändern, um den Standardspeicher zu erhöhen:

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

Legen Sie die Eliminierungsrichtlinie fest: maxmemory-policy volatile-lru

Im Folgenden werden mehrere andere Eliminierungsstrategien beschrieben:

keine Räumung

Standardrichtlinie

Nicht vertrieben

Wenn nicht genügend Speicher für Redis zur Nutzung vorhanden ist, wird beim Ausführen des Schreibbefehls eine Ausnahme gemeldet: redis.Exceptions.ResponseError, OOM-Befehl nicht zulässig, wenn Speicher verwendet wird > „maxmemory“

volatile-lru

Führen Sie für abgelaufene Schlüssel die LRU-Eliminierungsstrategie aus (entfernen Sie die zuletzt verwendeten Daten).

Wenn kein abgelaufener Schlüssel vorhanden ist, wird beim Ausführen des Schreibbefehls eine Ausnahme gemeldet, wenn der Speicher nicht ausreicht: redis.Exceptions.ResponseError, OOM-Befehl nicht zulässig, wenn Speicher verwendet wird > „maxmemory“, dasselbe wie die Noeviction-Richtlinie

allkeys-lru

Führen Sie lru für alle Schlüssel aus

Es gibt keine Möglichkeit, einige Algorithmen auf das Löschen bestimmter Schlüssel zu beschränken.

Wenn Ihre Anwendung einige Daten beibehalten muss, verwenden Sie bitte nicht die Strategie „allkeys-lru“.

volatil-zufällig

Wählen Sie bei abgelaufenen Schlüsseln zufällig einen Schlüssel zum Ausschließen aus

alleschlüssel-zufällig

Wählen Sie für alle Schlüssel zufällig einen Schlüssel zum Auswerfen aus

volatile-ttl

Unter den abgelaufenen Schlüsseln wird derjenige mit dem kleinsten TTL-Wert zuerst entfernt.

4. Zusammenfassung

Die Beschleunigung der WordPress-Optimierung ist ein alltägliches Thema. Um die besten Ergebnisse zu erzielen, müssen wir die Optimierungsstrategie häufig angemessen an die tatsächliche Konfiguration unseres Servers anpassen.

Bezüglich der Optimierung und Beschleunigung des Blogs habe ich ein zusammenfassendes Thema geschrieben: Hauptanwendungstechnologien und unterstützende Funktionen von Blogs – Zusammenfassung der Website- und Serveroptimierungsmethoden des Blogs.

Hinterlasse eine Antwort