Jump to content
Froxlor Forum
  • 0
kutte128

php-fpm crasht regelmäßig

Question

kutte128    0

Mahlzeit!

Ich habe seit ein paar Tagen das Problem, dass sich mein php bei einigen Sites regelmäßig verabschiedet.
Aktuell laufen 71 Webpages, davon werden ein paar gut besucht.

Ich habe sowohl php 5.6 als auch 7 am laufen.

Die Systemauslastung ist sehr niedrig. Es werden keine Fehler geloggt und auch per Stress-Test mit apache bench kann ich keine Probleme finden.
In der slowlog taucht auch nichts besonderes auf, auch scheint es keine Probleme mit libraries zu geben. Und es gibt mehr als genug Platz auf der HDD und auch unter /tmp

Ursprünglich hatte ich keine max-requests Limitierung, das klappte monatelang ohne Probleme. Jetzt sind noch ein paar kleinere Sites dazu gekommen, ab da stürzte mir php alle paar Stunden ab und blieb auch tot.
Ich habe die requests dann auf 500 gesetzt, damit lief er dann 3 Tage bis er wieder komplett hing. Mit 200 läuft er jetzt seit gestern, hing dann heute Nacht um ca 1:00 und ca 3:00. Allerdings nur für ein paar Sekunden und lief danach wieder bis kurz nach 10Uhr - auch nur ein paar Sekunden. Die betroffenen Sites werden Random gewählt. Mal ist es ein OpenCart oder Joomla unter php 5.6, mal ein Shopware unter php7, es können aber auch mehrere betroffen sein.

Durchschnittlich werden 25MB pro php Prozess verbraucht.

Meine aktuelle conf für php 5.6/php 7:

listen = /var/lib/apache2/fastcgi/USER-domain.de-php-fpm.socket
listen.owner = USER
listen.group = USER
listen.mode = 0660
user = USER
group = USER
pm = ondemand
pm.max_children = 30
pm.process_idle_timeout = 10
pm.max_requests = 200
emergency_restart_threshold = 3
emergency_restart_interval = 1m
process_control_timeout = 5s

System:

8 Kern Intel i7-3770, 16Gb Ram,
Gentoo,
apache 2.4.27, php 5.6.31,  php 7.0.22, mysql 5.6.36

Hat jemand eine Idee wo das Problem liegen oder wie ich es eingrenzen könnte?

Gruß,
kutte128

Share this post


Link to post
Share on other sites

7 answers to this question

Recommended Posts

  • 0
d00p    131

Kannst du die Crashes denn reproduzieren bzw. Triggern? Oder auf eine bestimmte Seite/einen User einzuschränken? Sonst wird's schwierig da ausm stand was zu sagen

Share this post


Link to post
Share on other sites
  • 0
kutte128    0

Leider nicht, es sind leider verschiedene User und verschiedene Seiten. Meine Idee zum triggern war, dass ich den Server mit 'ab' stresse damit er sich irgendwie verabschiedet, aber davon war er unbeeindruckt.
 

Share this post


Link to post
Share on other sites
  • 0
d00p    131

dann probiers doch z.B. mal mit PM = static - schau mit "top" welcher prozess da wie beansprucht wird (ist bei ondemand schwer) und ggfls mit strace mal mitverfolgen was da so passiert

Share this post


Link to post
Share on other sites
  • 0
kutte128    0

Guten Morgen,

hab mir das mal in der entsprechenden Zeit mal angeschaut, "leider" kein Crash.

Ich hatte auf static mit genau einen Child pro vhost.
Auf einem vhost bekam ich nach einer Weile einen bleibenden timeout:

DEBUG: pid 31535, fpm_pctl_perform_idle_server_maintenance(), line 362: [pool www] currently 0 active children, 0 spare children

Aber der Rest war weiterhin erreichbar.
Das selbe Problem hatte ich vorher bei einem gleichen Versuch bei einem anderen vhost, also auch hier random.
strace gab auch nichts auffälliges von sich, logs auch nicht. Load, Swap etc auch alles gut

Aufgefallen ist mir, dass ich häufiger beim ersten php-fpm restart eine "refused to stop" Meldung erhalte und dann natürlich der Dienst nicht startet. Das passiert wenn er einige Stunden lief.
Der Grund ist mir noch ein Rätsel genau wie warum er gerade immer in der Zeit von 2:40 - 3:15 crasht. Außer logrotate um 3:10h, in dem aber kein php mehr ist, passiert da nicht viel

Share this post


Link to post
Share on other sites
  • 0
kutte128    0

Ich glaube ich kann jetzt nachvollziehen was der Grund für die Crashes ist.
Ein Kunde nutzt eine Wordpress-Seite und wenn der reload/restart Befehl für den PHP-Prozess kommt und wp-cron läuft, wird das Child nicht gekillt und PHP startet nicht mehr.

Ich habe ein strace laufen lassen und manuell restarted. Der Prozess läuft unbeirrt weiter, php wirft sein

start-stop-daemon: 1 process refused to stop

aus und die Seiten sind nicht mehr aufrufbar.
Das kann ich jederzeit wiederholen (php5.6 und php7) wenn der wp-cron was längeres zu tun hat oder er diese strace Meldung ausgibt.

accept(0, 0x7fffd8a23f30, [112])        = ? ERESTARTSYS (To be restarted if SA_RESTART is set)
--- SIGQUIT {si_signo=SIGQUIT, si_code=SI_USER, si_pid=10658, si_uid=0} ---
rt_sigreturn({mask=[]})                 = -1 EINTR (Interrupted system call)

Der Prozess lässt sich nur mit SIGKILL beenden.

Jemand eine Idee wo das Problem liegen kann?

Share this post


Link to post
Share on other sites
  • 0
d00p    131

Gut, dann weisst du ja immerhin woran es liegt, müsste man wohl mal rausfinden was dann dieser wp-cron so alles macht, ggfls liegt da das problem sogar in einem Plugin (wie sehr häufig bei WP)

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now




×