Aufspüren von Speicherproblemen, die eine Website betreffen

7

Ich habe eine Website (Wordpress-basiert), die nicht mehr reagiert. Ich habe SSH in den Server und sah, dass wir nicht mehr genügend Speicher hatten. Fehler in meinen Apache-Protokolldateien zeigten dasselbe an ... Dinge, die aufgrund von Speichermangel nicht zugeordnet werden konnten). Durch einen Neustart des Servers wird das Problem behoben.

Ich schaue also zum Zeitpunkt des Vorfalls in access.log und error.log nach, sehe aber nichts Seltsames. Kein zusätzlicher Verkehr, keine ungewöhnlichen Anfragen. Tatsächlich war die einzige Anfrage zum Zeitpunkt des Problems eine von Googlebot für einen RSS-Feed. Zu diesem Zeitpunkt werden 500 Antwortcodes in den Protokollen angezeigt, bis der Computer neu gestartet wurde. Ich schaue in message.log in der Hoffnung, etwas zu sehen, aber es gibt überhaupt nichts für den ganzen Tag (was seltsam ist, da es Einträge für jeden zweiten Tag gibt).

Der Site ist eine große Menge an Speicher zugewiesen, und normalerweise werden etwa 30% des verfügbaren Speichers verwendet. Meine Frage ... wie würden Sie versuchen, dies an dieser Stelle aufzuspüren? Welche anderen Protokolldateien könnte ich überprüfen oder Strategien anwenden?


quelle
Verwenden Sie munin , um Änderungen im Speicher in Diagrammform aufzuzeichnen. Es wird Ihnen nicht sagen, was das Problem verursacht, aber es kann helfen, das Timing von Trends und Spitzen zu bestimmen.
Joshuahedlund

Antworten:

1

Die allgemeinen Empfehlungen:

  • Verwenden Sie das Cache-Plugin für Ihre WP-Installation
  • Reduzieren Sie PHP memory_limit auf ( 32..96M ), um zu sehen, dass der PHP-Speicher Fehler überschreitet
  • Deaktiviere nutzlose und neue Plugins
  • Stellen Sie sicher, dass alle Berichtseinstellungen aktiviert sind
  • Reduzierung der maximalen Arbeitsprozesse von Hand (3..10)
  • Setzen Sie MaxRequestsPerChild ungleich Null, wenn Sie der Meinung sind, dass PHP / Apache möglicherweise undicht ist (Fehler im kompilierten Code des PHP-Interpreters oder des Apache-Servers).
  • Reduzieren Sie ServerLimit
  • MaxClients reduzieren
  • Verwenden Sie PHP im FPM-Modus

Spezifische Hinweise:

  • Schreiben Sie ein Bash-Skript, um die Speichernutzung zu messen, oder sammeln Sie den Peak und setzen Sie ihn in cron. Sie haben Statistiken zur Speichernutzung eines Prozesses im Laufe der Zeit.
  • oder verwenden Sie Munin als fortschrittlichere Lösung.
berezovskyi
quelle
0

Überprüfen Sie, ob die wa-Zeile oben angezeigt wird, wenn Sie warten müssen

Wenn ja, überprüfen Sie Ihr MySQL-Fehlerprotokoll und versuchen Sie, Ihre Tabellen zu analysieren / reparieren.

Dies kann ein Netzwerk- oder Speicherproblem sein. Der Warte-Durchschnitt wird Ihnen das sagen.

Hoffe das hilft

jflaflamme
quelle
0

Sie sollten zuerst alle Plugins deaktivieren und dann Ihren Apache-Server neu starten. Führen Sie top oder mtop im Terminal aus und stellen Sie fest, ob Speicherlecks behoben wurden. Wenn ja, aktivieren Sie Plugins, warten Sie 10 bis 15 Minuten und überprüfen Sie die Speichernutzung auf dem Server, um festzustellen, ob es sich um ein Plugin handelt.

Anagio
quelle
0

Top und PS sind sehr gute Werkzeuge. Ich würde auch in / proc / meminfo schauen. Sie können Valgrind zusammen mit Apache starten, um nach Speicherlecks zu suchen. Aber ich würde Apache sowieso nicht empfehlen. Ich kann lighttpd oder nginx empfehlen.

Gigamegs
quelle
Was würden Sie dann anstelle von Apache vorschlagen?
Lèse Majesté
Nun, wenn Apache Ihnen Probleme bereitet, ist Nginx (ausgesprochen "engine-x") eine gute Alternative.
Matt
@ Matt - Ich dachte immer, es wäre en-jincks, aber wenn Sie sagen, es ist engine-x ... :)
Anonym
1
@Anonymous Von wiki.nginx.org/Faq : Wie spricht man "Nginx" aus? Die richtige Aussprache klingt wie: "engine-ex". (Nächste Frage: "Was bedeutet das?" - Wir wissen es nicht genau.)
Lekensteyn
0

Sie können so etwas wie New Relic verwenden , Beispiel http://blog.newrelic.com/2010/12/16/measuring-wordpress-performance-with-new-relic-rpm/


Dieses Skript ist auch praktisch: http://www.pixelbeat.org/scripts/ps_mem.py

Anwendungsbeispiel (von hier übernommen ):

-bash-3.2$ wget http://www.pixelbeat.org/scripts/ps_mem.py
-bash-3.2$ sudo python ps_mem.py
 Private  +   Shared  =  RAM used   Program 

 92.0 KiB +  12.0 KiB = 104.0 KiB   qmail-clean
 96.0 KiB +  14.0 KiB = 110.0 KiB   splogger
116.0 KiB +  23.0 KiB = 139.0 KiB   init
128.0 KiB +  12.0 KiB = 140.0 KiB   qmail-rspawn
124.0 KiB +  16.0 KiB = 140.0 KiB   syslogd
132.0 KiB +  12.0 KiB = 144.0 KiB   qmail-lspawn
148.0 KiB +  13.0 KiB = 161.0 KiB   qmail-send
208.0 KiB +  28.5 KiB = 236.5 KiB   dbus-daemon
232.0 KiB +  36.5 KiB = 268.5 KiB   xinetd
240.0 KiB +  32.5 KiB = 272.5 KiB   mysqld_safe
328.0 KiB +  20.5 KiB = 348.5 KiB   udevd
348.0 KiB +  66.0 KiB = 414.0 KiB   courierlogger (4)
444.0 KiB +  85.5 KiB = 529.5 KiB   bash
480.0 KiB +  50.0 KiB = 530.0 KiB   xfs
592.0 KiB +  36.0 KiB = 628.0 KiB   crond
544.0 KiB + 114.0 KiB = 658.0 KiB   couriertcpd (4)
  1.3 MiB +  82.5 KiB =   1.4 MiB   sw-cp-serverd
  1.2 MiB +   1.1 MiB =   2.3 MiB   sshd (3)
  3.1 MiB + 205.5 KiB =   3.3 MiB   named
  3.9 MiB +  48.2 MiB =  52.1 MiB   spamd (2)
 63.7 MiB + 387.0 KiB =  64.1 MiB   mysqld
108.3 MiB +   9.2 MiB = 117.5 MiB   httpd (7)
---------------------------------
                        245.4 MiB
Anthony Hatzopoulos
quelle