Wir haben einen ziemlich stark ausgelasteten Server mit Nginx und PHP-FPM. Wir haben 6 Websites auf diesem Server mit PHP-FPM und nginx. Software ist alles vBulletin 3.8 und WordPress. Datenbanken befinden sich auf einem separaten Server.
Da es sich um sehr beliebte Websites handelt, sind normalerweise 7-8.000 Besucher gleichzeitig online, wobei jede Seite zum größten Teil auf die Datenbank zugreift. Ich glaube, das ist die Ursache unserer Probleme.
Da wir so viele große Datenbanken auf dem MySQL-Server haben und die Abfragen in der Software ehrlich gesagt viel besser sein könnten, denke ich, dass MySQL gelegentlich nicht rechtzeitig Ergebnisse an PHP zurückgibt, was schließlich zu einem Kaskadeneffekt führt Lässt alles einfach anhalten, bis wir PHP-FPM neu laden. Danach geht es wieder gut.
Der Grund, warum ich Probleme bei der Fehlerbehebung habe, ist, dass ich in den Protokollen nichts wirklich erkennen kann. Im langsamen MySQL-Abfrageprotokoll sehe ich nichts Interessantes, wenn Ausfallzeiten auftreten. In den Nginx-Protokollen sehe ich Tausende von Einträgen, die besagen, dass die Leseanforderung abgelaufen ist oder die Verbindung abgelaufen ist (zu PHP-FPM). Und in den PHP-FPM-Protokollen sehe ich viele Zeilen, in denen steht, dass die Ausführung abgelaufen ist (31 Sek.) Und beendet wird
An diesem Punkt weiß ich einfach nicht, wo ich nach dem Problem suchen soll. Was auch immer passiert, passiert natürlich, weil diese Skripte manchmal nicht schnell genug ausgeführt werden (normalerweise werden sie in weniger als einer Sekunde geladen, aber es passiert etwas, das die Ladezeit in die Höhe schnellen lässt). Dies passiert mehrmals am Tag und ist für uns ein ziemliches Problem geworden.
Im Moment habe ich einfach eine Crontab, um alle 10 Minuten das php5-fpm-Reload zu warten, wodurch das Absturzproblem behoben wird. Wenn PHP neu geladen wird, gibt nginx natürlich einen 502-Gateway-Fehler aus, daher ist dies keine gute Lösung.
PHP führt den APC-Cache aus, falls dies von Bedeutung ist. Ich habe an einigen Stellen gelesen, dass APC unter bestimmten Umständen zum Hängen führen kann.
Hinweise wären hilfreich. Ich möchte mir wirklich nicht die ganze Zeit Sorgen um diese Maschine machen müssen.
Weitere Informationen können natürlich zur Verfügung gestellt werden. Sagen Sie mir einfach, was Sie brauchen.
Update: Ich habe gerade apc.php in ein Web-Root-Verzeichnis kopiert und darauf zugegriffen, um unsere Statistiken anzusehen. Die Dinge sahen gut aus. Dann klickte ich auf den Link, um zu den Benutzerstatistiken zu gelangen, und BOOMTE den Server sofort. Ich habe php-fpm neu geladen und dann die Seite mit den Benutzerstatistiken neu geladen. Wartete eine Minute, lud erneut, Server hing wieder.
Das scheint also definitiv mit APC zu tun zu haben. Die Frage ist - Wie beheben wir das?
APC Config:
[apc]
apc.enabled="1"
apc.stat = "1"
apc.max_file_size = "2M"
apc.localcache = "1"
apc.localcache.size = "256"
apc.shm_segments = "1"
apc.ttl = "3600"
apc.user_ttl = "7200"
apc.gc_ttl = "3600"
apc.cache_by_default = "1"
apc.filters = ""
apc.write_lock = "1"
apc.num_files_hint= "10000"
apc.user_entries_hint="10000"
apc.shm_size = "1G"
apc.mmap_file_mask=/tmp/apc.XXXXXX
apc.include_once_override = "0"
apc.file_update_protection="2"
apc.canonicalize = "1"
apc.report_autofilter="0"
apc.stat_ctime="0"
Update 2: Wir haben hier einige Fortschritte erzielt. Es stellt sich heraus, dass das WordPress-Caching-Plugin (W3 Total Cache) die Abstürze verursacht hat. Wir wissen immer noch nicht warum, aber da es deaktiviert ist, führen wir PHP seit fast 4 Stunden aus, ohne Nachladen, ohne Verlangsamung, ohne Abstürze. Wir verwenden APC immer noch in den vBulletin-Foren und es gibt überhaupt keine Probleme. Können wir auf irgendeine Weise feststellen, WARUM APC abstürzt? Ich würde es gerne in unseren WordPress-Installationen verwenden, aber nicht auf Kosten eines fragilen Systems.