Apache hängt sich auf

TIIUNDER

New Member
Hiho,

ich habe seit einiger Zeit folgendes Problem: Zu verschiedensten Zeiten, manchmal nach einigen Wochen, manchmal aber auch nach wenigen Tagen, hängt sich mein Server einfach auf. Er bricht unter einer viel zu hohen Last zusammen. Es liegt dabei eindeutig am Apache2, denn wenn es mir gelingt, diesen neuzustarten, dann läuft wieder alles flüssig.

In den Error-Logs bekomme ich dann so etwas:
[warn] child process XXXXX still did not exit, sending a SIGTERM

Ich habe schon einiges probiert, unter anderem habe ich auch Apache neu konfiguriert, MaxClients & Co heruntergesetzt... Das hat bisher alles nichts gebracht.

Hat vielleicht jemand eine Idee? Kann es ein bestimmtes (PHP-)Skript sein? Wenn ja, wie finde ich es heraus, an welchem Skript es hängt? :confused:
 
Na irgendeine MPM muss es ja wohl sein...:rolleyes:

Was sagt denn:
Code:
apache2 -l
bzw.
Code:
httpd -l
?
 
Bei apache2 -l und httpd -l kommt leider jeweils ein "command not found"

bei apache2ctl -l kommt nur folgendes:

apache2ctl -l
Compiled in modules:
core.c
prefork.c
http_core.c
mod_so.c

PS: Es handelt sich übrigens um einen Server mit OpenSUSE 11.1 und Plesk 9
 
Jetzt nur noch den dazugehörigen Abschnitt aus der Apache config posten, am Besten zusammen mit ein paar Infos wie verfügbarer Arbeitsspeicher, evtl. Ausgabe von top...dann sieht man weiter. ;)
 
Jetzt nur noch den dazugehörigen Abschnitt aus der Apache config posten, am Besten zusammen mit ein paar Infos wie verfügbarer Arbeitsspeicher, evtl. Ausgabe von top...dann sieht man weiter. ;)

Welcher Config-Abschnitt würde denn am ehesten helfen? Übrigens tritt das Problem auf, obwohl ich nichts an der Config geändert habe, auch keine Updates oder ähnliches...

Arbeitsspeicher sind übrigens 4GB, davon ist auch im Normalfall immer reichlich frei.

Hier eine kleine Ausgabe von top:
Code:
Tasks: 155 total,   3 running, 152 sleeping,   0 stopped,   0 zombie
Cpu(s):  1.9%us,  0.8%sy, 97.3%ni,  0.0%id,  0.0%wa,  0.0%hi,  0.0%si,  0.0%st
Mem:   3792036k total,  1916468k used,  1875568k free,    33964k buffers
Swap:  3919840k total,    96776k used,  3823064k free,  1457764k cached

  PID USER      PR  NI  VIRT  RES  SHR S %CPU %MEM    TIME+  COMMAND            
22186 boinc     39  19  7300 6744  604 R   99  0.2 500:59.97 milkyway_nbody_    
 7095 boinc     39  19 98924  31m 4664 R   95  0.9 994:54.42 famous_um_6.11_    
25539 wwwrun    20   0  438m  83m 7340 S    3  2.3   0:04.40 httpd2-prefork     
 1443 root      15  -5     0    0    0 S    1  0.0   2:00.30 md6_raid1          
 1680 mysql     20   0  637m  38m 3688 S    1  1.1  54:41.10 mysqld             
    1 root      20   0  1064   88   52 S    0  0.0   1:40.92 init

Übrigens, Boinc lastet die CPU zwar aus, ist aber von der Priorität immer so niedrig, dass es sich nur die Ressourcen nimmt, die gerade zur Verfügung stehen.
 
Last edited by a moderator:
Interessant wäre natürlich der Teil für die Prefork Konfiguration (MaxClients, etc.).

Was mir aber ins Auge springt ist die hohe Anzahl an Prozessen, zumindest für ein System auf dem Apache als Prefork läuft (bei Worker MPM wäre es normal).
Poste doch mal die Ausgabe von ps -A damit man sehen kann was da eigentlich so alles läuft (zusätzlich zum Teil der Apache config).
 
Prefork MPM Config:
Code:
# prefork MPM
<IfModule prefork.c>
        # number of server processes to start
        # [url]http://httpd.apache.org/docs/2.2/mod/mpm_common.html#startservers[/url]
        #StartServers         5
        StartServers          1
        # minimum number of server processes which are kept spare
        # [url]http://httpd.apache.org/docs/2.2/mod/prefork.html#minspareservers[/url]
        #MinSpareServers      5
        MinSpareServers       1
        # maximum number of server processes which are kept spare
        # [url]http://httpd.apache.org/docs/2.2/mod/prefork.html#maxspareservers[/url]
        #MaxSpareServers     10
        MaxSpareServers      3
        #highest possible MaxClients setting for the lifetime of the
        #Apache process.
        # [url]http://httpd.apache.org/docs/2.2/mod/mpm_common.html#serverlimit[/url]
        #ServerLimit        150
        ServerLimit         100
        # maximum number of server processes allowed to start
        # [url]http://httpd.apache.org/docs/2.2/mod/mpm_common.html#maxclients[/url]
        #MaxClients         150
        MaxClients          100
        # maximum number of requests a server process serves
        # [url]http://httpd.apache.org/docs/2.2/mod/mpm_common.html#maxrequestsperchild[/url]
        MaxRequestsPerChild 4000
        #MaxRequestsPerChild  10000
</IfModule>

Hier habe ich schon einiges heruntergeregelt, seit dem hängt sich der Server zwar immer noch auf, aber ich habe noch eher Chancen per SSH & Co auf den Server zu kommen und ihn von außen neustarten zu müssen. Aber das prinzipielle Problem tritt nach wie vor auf, die Webseiten sind dann für einigen Stunden nicht erreichbar, da der Server unter zu hoher Last steht.

Und hier die ps -A
Code:
ps -A
  PID TTY          TIME CMD
    1 ?        00:01:41 init
    2 ?        00:00:01 kthreadd
    3 ?        00:00:00 migration/0
    4 ?        00:00:00 ksoftirqd/0
    5 ?        00:00:00 migration/1
    6 ?        00:00:00 ksoftirqd/1
    7 ?        00:00:34 events/0
    8 ?        00:00:47 events/1
    9 ?        00:00:00 khelper
   10 ?        00:00:00 kintegrityd/0
   11 ?        00:00:00 kintegrityd/1
   12 ?        00:00:08 kblockd/0
   13 ?        00:00:08 kblockd/1
   14 ?        00:00:00 kacpid
   15 ?        00:00:00 kacpi_notify
   16 ?        00:00:00 cqueue
   17 ?        00:00:00 kseriod
   18 ?        00:01:44 kondemand/0
   19 ?        00:00:00 kondemand/1
   22 ?        00:10:17 kswapd0
   23 ?        00:00:00 aio/0
   24 ?        00:00:00 aio/1
   25 ?        00:00:00 kpsmoused
   74 ?        00:00:00 ata/0
   75 ?        00:00:00 ata/1
   76 ?        00:00:00 ata_aux
  249 ?        00:00:00 ksuspend_usbd
  278 ?        00:00:00 khubd
  285 ?        00:00:00 scsi_eh_0
  288 ?        00:00:00 scsi_eh_1
  290 ?        00:00:00 scsi_eh_2
  293 ?        00:00:00 scsi_eh_3
  298 ?        00:00:00 scsi_eh_4
  305 ?        00:00:00 scsi_eh_5
  653 ?        00:00:19 md1_raid1
  677 ?        00:00:25 kjournald
  740 ?        00:00:00 udevd
 1361 ?        00:00:00 hd-audio0
 1390 ?        00:00:00 su
 1392 ?        00:00:00 bash
 1402 ?        00:00:00 kauditd
 1420 ?        00:18:30 boinc_client
 1428 ?        00:00:00 kstriped
 1433 ?        00:00:10 md5_raid1
 1443 ?        00:02:01 md6_raid1
 1455 ?        00:01:43 md7_raid1
 1510 ?        00:00:00 xfs_mru_cache
 1511 ?        00:00:00 xfslogd/0
 1512 ?        00:01:22 xfslogd/1
 1513 ?        00:00:00 xfsdatad/0
 1514 ?        00:01:08 xfsdatad/1
 1515 ?        00:00:00 xfsconvertd/0
 1516 ?        00:00:00 xfsconvertd/1
 1517 ?        00:00:06 xfsbufd
 1518 ?        00:00:03 xfsaild
 1519 ?        00:00:00 xfssyncd
 1520 ?        00:00:15 xfsbufd
 1521 ?        00:00:04 xfsaild
 1522 ?        00:01:06 xfssyncd
 1523 ?        00:00:14 xfsbufd
 1524 ?        00:00:03 xfsaild
 1525 ?        00:00:08 xfssyncd
 1680 ?        00:56:02 mysqld
 1934 ?        00:00:01 dbus-daemon
 1974 ?        00:05:32 irqbalance
 1975 ?        00:01:44 hald
 1978 ?        00:00:00 console-kit-dae
 1979 ?        00:00:00 hald-runner
 2052 ?        00:00:00 hald-addon-inpu
 2086 ?        00:00:00 hald-addon-cpuf
 2087 ?        00:01:37 hald-addon-acpi
 2583 ?        00:01:29 xinetd
 2780 ?        00:01:24 named
 2825 ?        00:00:00 mysqld_safe
 3281 ?        00:03:26 spamd
 3378 ?        00:00:00 dhcpcd
 3640 ?        00:00:10 klogd
 3643 ?        00:02:15 syslog-ng
 3694 ?        00:03:47 auditd
 3696 ?        00:04:11 audispd
 3710 ?        00:01:48 sshd
 3721 ?        00:00:00 couriertcpd
 3723 ?        00:00:00 courierlogger
 3736 ?        00:01:07 couriertcpd
 3740 ?        00:00:00 courierlogger
 3747 ?        00:00:00 couriertcpd
 3748 ?        00:00:00 pickup
 3749 ?        00:00:00 courierlogger
 3757 ?        00:00:00 couriertcpd
 3759 ?        00:00:00 courierlogger
 3762 ?        00:00:01 sw-cp-serverd
 3812 ?        00:01:44 master
 3837 ?        00:01:44 qmgr
 3845 ?        00:01:36 cron
 3852 ?        00:01:02 tlsmgr
 3985 tty1     00:00:00 mingetty
 3986 tty2     00:00:00 mingetty
 3987 tty3     00:00:00 mingetty
 3988 tty4     00:00:00 mingetty
 3989 tty5     00:00:00 mingetty
 3990 tty6     00:00:00 mingetty
 3991 ttyS0    00:00:00 agetty
 7093 ?        00:00:48 famous_6.11_i68
 7095 ?        19:29:32 famous_um_6.11_
 7348 ?        00:00:00 couriertls
 7349 ?        00:00:00 imapd
 7357 ?        00:00:11 httpd2-prefork
 7374 ?        00:00:16 httpd2-prefork
 7607 ?        00:00:00 couriertls
 7608 ?        00:00:00 imapd
 7615 ?        00:00:00 couriertls
 7616 ?        00:00:00 imapd
 7622 ?        00:00:00 couriertls
 7623 ?        00:00:00 imapd
 7717 ?        00:00:00 sshd
 7728 pts/0    00:00:00 bash
 7752 ?        00:00:06 httpd2-prefork
 7886 ?        00:00:01 httpd2-prefork
 8029 ?        00:00:00 sshd
 8030 ?        00:00:00 sshd
 8031 pts/0    00:00:00 ps
10349 ?        00:00:22 pdflush
15206 ?        00:00:00 httpd2-prefork
21516 ?        00:00:12 pdflush
22186 ?        11:15:43 milkyway_nbody_
23880 ?        00:00:11 spamd
24953 ?        00:00:00 couriertls
24954 ?        00:00:00 couriertls
24955 ?        00:00:00 couriertls
24956 ?        00:00:00 imapd
24957 ?        00:00:00 imapd
24958 ?        00:00:00 imapd
26211 ?        00:00:00 spamd
28324 ?        00:00:00 couriertls
28325 ?        00:00:00 imapd
 
Last edited by a moderator:
Hm, da gäbe es zwar schon noch Einiges zu optimieren, aber das alles sollte nicht der Grund für die Abstürze sein.
Hast du denn mal die Verbindungen per netstat überprüft während sich das System so verhält? Auch die Apache Logs könnten hier Anhaltspunkte liefern, also schau mal nach was da zu diesen Zeitpunkten los war. Wäre gut möglich dass es sich um Angriffe handelt.
Wäre eventuell gut MaxClients mal auf 50 runterzuschrauben, zumindest probeweise bis zum nächsten Vorfall, falls es sich wirklich um Angriffe handelt stünden dann die Chancen besser noch auf das System zugreifen zu können um live die Verbindungen zu prüfen (falls es sich z.B. um SYN-Floods handelt wären nämlich keine Einträge in den Apache Logs zu finden).
 
Also in den Apache-Access-Logs gibt es nichts wirklich auffälliges... Nur in den Error-Logs, dort taucht, wie bereits erwänht, folgendes auf.

...
[Thu Dec 09 03:00:08 2010] [warn] child process 27285 still did not exit, sending a SIGTERM
[Thu Dec 09 03:00:08 2010] [warn] child process 27286 still did not exit, sending a SIGTERM
[Thu Dec 09 03:00:08 2010] [warn] child process 27287 still did not exit, sending a SIGTERM
[Thu Dec 09 03:00:08 2010] [warn] child process 27291 still did not exit, sending a SIGTERM
[Thu Dec 09 03:00:08 2010] [warn] child process 27292 still did not exit, sending a SIGTERM
[Thu Dec 09 03:00:08 2010] [warn] child process 27293 still did not exit, sending a SIGTERM
[Thu Dec 09 03:00:08 2010] [warn] child process 27294 still did not exit, sending a SIGTERM
[Thu Dec 09 03:00:10 2010] [error] child process 26360 still did not exit, sending a SIGKILL
[Thu Dec 09 03:00:10 2010] [error] child process 27222 still did not exit, sending a SIGKILL
[Thu Dec 09 03:00:10 2010] [error] child process 27015 still did not exit, sending a SIGKILL
[Thu Dec 09 03:00:10 2010] [error] child process 27023 still did not exit, sending a SIGKILL
[Thu Dec 09 03:00:10 2010] [error] child process 27024 still did not exit, sending a SIGKILL
[Thu Dec 09 03:00:10 2010] [error] child process 27025 still did not exit, sending a SIGKILL
[Thu Dec 09 03:00:10 2010] [error] child process 27033 still did not exit, sending a SIGKILL
[Thu Dec 09 03:00:10 2010] [error] child process 27036 still did not exit, sending a SIGKILL
[Thu Dec 09 03:00:10 2010] [error] child process 27038 still did not exit, sending a SIGKILL
[Thu Dec 09 03:00:10 2010] [error] child process 27039 still did not exit, sending a SIGKILL
...

Aber sonst kann ich ja das mit den MaxClients auf 50 und netstat ausprobieren...
 
Bitte den Prefork-Abschnitt wieder auf die Defaults setzen und nur MaxRequestsPerChild auf 500 begrenzen. Apache restart nicht vergessen.
 
Bitte den Prefork-Abschnitt wieder auf die Defaults setzen und nur MaxRequestsPerChild auf 500 begrenzen. Apache restart nicht vergessen.

Das habe ich gemacht, heute ist der Server leider wieder abgeschmiert.
In der Error Log nur diese Meldung
[Mon Dec 20 11:56:05 2010] [error] server reached MaxClients setting, consider raising the MaxClients setting

Diese Meldung hatte ich auch schon öfter, diesmal ohne die Meldung, dass Child-Prozesse nicht beendet werden konnten. Aber der Server hing wieder, diesmal so dramatisch, dass ich ihn neustarten musste und er sich auch nicht selbst wieder gefangen hatte.

Ich glaube einfach nicht, dass es an der Konfiguration liegt, ich glaube, dass das irgendein Skript oder ähnliches verursacht: Ich würde nur gerne wissen welches! Wie kann ich das herausfinden?

Übrigens ist mir aufgefallen:
Als ich die Apache-Konfiguration weit heruntergestellt, hing er sich wesentlich häufiger auf (alle paar Tage), dafür war der Server aber noch knapp per SSH erreichbar. Ich werde daher diese Einstellungen wieder so übernehmen und weitersehen und außerdem den Tipp mit netstat probieren. Trotzdem bin ich für weitere Ratschläge dankbar
 
So, nach längerer Zeit hier mal wieder eine aktuellen Meldung. Ich habe erst vor wenigen Tagen den Server komplett neu aufgesetzt (andere Linux-Distribution) und heute kam es wieder zu den identischen Symptomen. An der Config vom Apache habe ich allerdings nix elementares übernommen (nur ein paar Module ebenfalls installiert). :confused:
 
Back
Top