Defunct fcgid/fastcgi processes in Debian Jessie apache2

Wenn ihr unter dem aktuellen stabilen Release von Debian GNU/Linux – Codename Jessie – den Webserver Apache2 zusammen mit fcgid oder fastcgi einsetzt und von (z.B.) PHP-Prozessen geplagt werdet, die nicht richtig beendet werden und stattdessen als Zombie mit dem Zusatz <defunct> weiter in der Prozessliste rumgammeln bis FcgidMaxProcesses oder FcgidMaxProcessesPerClass erreicht ist und Eure Seite dann nicht mehr erreichbar ist, habe ich hier die Lösung für Euch.

So sieht das Problem aus:

% ps f -o user,pid,nice,%cpu,%mem,cputime,etime,tty8,command ax
USER       PID  NI %CPU %MEM     TIME     ELAPSED TTY      COMMAND
root     11886   0  0.0  0.0 00:00:12    08:45:37 ?        /usr/sbin/apache2 -k start
www-data 26825   0  0.0  0.0 00:00:04    06:27:00 ?         \_ /usr/sbin/apache2 -k start
user4    26854   0  3.3  0.0 00:13:07    06:27:00 ?         |   \_ [php5] <defunct>
user4    26856   0  5.6  0.0 00:21:45    06:27:00 ?         |   \_ [php5] <defunct>
user3    26976   0  0.3  0.0 00:01:31    06:26:51 ?         |   \_ [php5] <defunct>
user4    27389   0  5.1  0.0 00:19:37    06:23:13 ?         |   \_ [php5] <defunct>
user2     7283   0  1.5  0.0 00:04:08    04:32:24 ?         |   \_ [php5] <defunct>
user1    12657   0  1.2  0.0 00:02:56    03:46:37 ?         |   \_ [php5] <defunct>
user1    12680   0  1.9  0.2 00:04:23    03:46:35 ?         |   \_ /usr/lib/cgi-bin/php5
user2    19589   0  0.9  0.0 00:01:36    02:47:44 ?         |   \_ [php5] <defunct>
user3    21574   0  0.6  0.0 00:00:56    02:31:46 ?         |   \_ [php5] <defunct>
user4    24239   0  1.4  0.0 00:01:56    02:11:06 ?         |   \_ [php5] <defunct>
user4    24241   0  2.3  0.0 00:03:07    02:11:06 ?         |   \_ [php5] <defunct>
user4    24252   0  2.1  0.0 00:02:47    02:11:06 ?         |   \_ [php5] <defunct>
user4    24253   0  1.7  0.0 00:02:15    02:11:06 ?         |   \_ [php5] <defunct>
user4    24254   0  5.6  0.2 00:07:24    02:11:06 ?         |   \_ /usr/lib/cgi-bin/php5
user2    28074   0  1.0  0.0 00:00:57    01:30:14 ?         |   \_ [php5] <defunct>
user2    28088   0  1.8  0.2 00:01:42    01:30:14 ?         |   \_ /usr/lib/cgi-bin/php5
user2    30171   0  1.9  0.2 00:01:31    01:16:54 ?         |   \_ /usr/lib/cgi-bin/php5
user4    30676   0  5.4  0.2 00:04:05    01:15:05 ?         |   \_ /usr/lib/cgi-bin/php5
user4    30678   0  4.7  0.2 00:03:34    01:15:05 ?         |   \_ /usr/lib/cgi-bin/php5
user4    31164   0  5.7  0.2 00:04:11    01:13:10 ?         |   \_ /usr/lib/cgi-bin/php5
user3    32378   0  1.8  0.2 00:01:07    01:02:07 ?         |   \_ /usr/lib/cgi-bin/php5
user3    32385   0  1.4  0.2 00:00:53    01:02:06 ?         |   \_ /usr/lib/cgi-bin/php5
user3    32395   0  1.3  0.2 00:00:48    01:02:06 ?         |   \_ /usr/lib/cgi-bin/php5
user3    32402   0  1.6  0.2 00:01:01    01:02:06 ?         |   \_ /usr/lib/cgi-bin/php5
user3    32410   0  1.1  0.2 00:00:44    01:02:05 ?         |   \_ /usr/lib/cgi-bin/php5
user1      418   0  1.4  0.2 00:00:52       59:03 ?         |   \_ /usr/lib/cgi-bin/php5
user1      433   0  2.1  0.2 00:01:15       59:02 ?         |   \_ /usr/lib/cgi-bin/php5
user1      436   0  2.5  0.2 00:01:30       59:02 ?         |   \_ /usr/lib/cgi-bin/php5
user4     1266   0  4.9  0.2 00:02:31       51:23 ?         |   \_ /usr/lib/cgi-bin/php5
user2     3231   0  3.3  0.2 00:01:14       36:57 ?         |   \_ /usr/lib/cgi-bin/php5
www-data  6830   0  1.1  0.1 00:00:07       10:42 ?         \_ /usr/sbin/apache2 -k start
www-data  7145   0  1.2  0.1 00:00:06       08:23 ?         \_ /usr/sbin/apache2 -k start
www-data  7183   0  1.0  0.1 00:00:04       08:11 ?         \_ /usr/sbin/apache2 -k start

Der Webserver läuft seit fast 9 Stunden und es gibt viele fcgid-Prozesse (in diesem Fall PHP), die nicht korrekt beendet wurden und stattdessen als Zombie weiterleben. Zombie-Prozesse sind in der Regel kein Problem, da sie keine Ressourcen verbrauchen. In diesem Fall führt es aber dazu, dass die Zombie-Prozesse weiterhin mitgezählt werden und irgendwann keine neuen php5-Prozesse mehr gestartet werden, weil ja bereits genügend laufen. Je nach Traffic des Webservers ist so bereits nach ein paar Stunden das Limit erreicht und die Webseite(n) werden unerreichbar. Wird viel Traffic über verschlüsseltes SSL/TLS abgewickelt, erhöht das die Chancen, von diesem Problem betroffen zu sein.

Gleichzeitig findet mal im error.log des Webservers folgende Einträge:

[mpm_worker:emerg] [pid 18908:tid 139812686178048] (35)Resource deadlock avoided: AH00273: apr_proc_mutex_lock failed. Attempting to shutdown process gracefully.
[ssl:warn] [pid 31524:tid 140433418090240] (35)Resource deadlock avoided: AH02026: Failed to acquire SSL session cache lock

Die Lösung: in /etc/apache2/apache2.conf die folgende Zeile auskommentieren:

Mutex file:${APACHE_LOCK_DIR} default

Quellen:

Siehe auch Changelog zu apache2-2.4.20-1:

apache2 (2.4.20-1) unstable; urgency=medium

  • New upstream release – mostly bugfixes and HTTP/2 improvements
  • Build against lua 5.2 instead of 5.1. Closes: #820243
  • Correct systemd-sysv-generator behavior by customizing some parameters. This fixes ‘systemctl status’ returning incorrect results. Thanks to Pierre-André MOREY for the patch. LP: #1488962
  • On Linux, use pthread mutexes. On kfreebsd/hurd, continue using fctnl because they lack robust pthred mutexes. LP: #1565744, #1527044

— Stefan Fritsch <sf@debian.org>  Sun, 10 Apr 2016 14:03:41 +0200

Server-Admin gesucht

Hallo allerseits und noch ein frohes neues Jahr!

Die IntelliAd Media GmbH sucht kurzfristig einen Server-Admin für ein Projekt im Raum München. Da dies für mich aktuell nicht in Frage kommt, dumpe ich hier nach Rücksprache deren Anfrage:

Für das Setup einer redundanten hochverfügbaren Serveraufstellung für ein Tracking System
suchen wir aktuell kurzfristig einen Experten, ggf. wäre das ja etwas für Sie?

Einsatzort München und remote
Einsatzzeit kurzfristig 3-5 Tage Vorort
langfristig 5-6 Tage Wartung / Monat remote

Erfahrungen in mehreren der folgenden Bereiche sollte vorhanden sein:
Storage (Dell equallogic),
Linux (debian/ubuntu),
Hochverfügbarkeit,
MySQL Replikation,
Load Balancing.

Interessenten wenden sich bitte per Email direkt an Herrn Rürup (mruerup[at]intelliad[dot]de) von IntelliAd.