Apache: Exit signal Segmentation fault (11)

uepselon

New Member
Hallo zusammen,

ich hab seit geraumer Zeit das Problem, dass meine Apache Prefork-Prozesse mit der folgenden Meldung abrauchen: exit signal Segmentation fault (11).

Das komische ist, dass dies in einem regelmässigen Abstand passiert (ca. alle 8-10 Minuten) und alle Apache-Prozesse betrifft. Was schonmal vermuten lässt dass es nicht an einem einzelnen fehlerhaften Request liegt.

Ansonsten tauchen im Apache Error-Log keinerlei Fehlermeldungen auf.

Was sich aber sagen lässt: Wenn ich einen PHP/MySQL Code-teil auskommentiere, der recht viele Selects/Updates/Inserts ausführt (10-20 pro Sekunde), kommt das Problem nicht vor.

Hier mal meine Apache Config:

Code:
<IfModule prefork.c>
        StartServers        20
        MinSpareServers     30
        MaxSpareServers     60
        ServerLimit        600
        MaxClients         600
        MaxRequestsPerChild  10000
</IfModule>

KeepAlive on
MaxKeepAliveRequests 600
KeepAliveTimeout 2

Und MySQL:

Code:
[mysqld]
port            = 3306
socket          = /var/lib/mysql/mysql.sock
skip-locking
key_buffer = 1000M
max_allowed_packet = 1M
table_cache = 5000
sort_buffer_size = 4M
net_buffer_length = 8K
read_buffer_size = 6M
read_rnd_buffer_size = 512K
myisam_sort_buffer_size = 4M
query_cache_type = 1
query_cache_limit = 12M
query_cache_size = 512M
query_cache_min_res_unit = 2K
thread_cache_size = 150
open_files_limit = 10000
max_heap_table_size = 2048M
tmp_table_size = 2048M
low_priority_updates = 1
concurrent_insert = 2
max_connections = 600
log_slow_queries=/var/log/mysqld.slow.log
long_query_time=1

Die Maschine hat 8GB RAM und ist ein 64-bit Dual Core System mit OpenSuse. Die DB hat teilweise Tabellen mit 1GB Daten. Indizies sind korrekt gesetzt, bei 5.000.000 DB-Abfragen sind nur 800 dabei, die länger als 1 Sekunde gingen.

Ich hoffe es hat jemand einen Tipp für mich.

Grüsse,
ueps
 
Seg faults klingen nach Speicherdefekten (Hardware). Evtl. bietet Dein Provider memtest auf irgendeiner Rettungskonsole an - das mal laufen lassen. Habt Ihr kürzlich an der Hardware was gemacht? Also kurz bevor diese Fehler auftraten? RAM Upgrade?

Ansonstens wären noch ein paar Angaben zu Deinem System hilfreich (Softwareversionen, PHP, Apache + aktivierte Module).
 
Last edited by a moderator:
Der suhosin-Patch für PHP 5.3 soll auf 64-Bit-Systemen ja auch zu Abstürzen führen. Wird diese Kombination vielleicht eingesetzt?
 
Die PHP Version ist 5.2.12. An der Hardware hat sich eigentlich nichts geändert. Eine Platte im RAID war kürzlich defekt, aber das "segemtation fault"-Problem gab es davor auch schon.

Geladene Module:

Code:
core prefork http_core mod_so mod_actions mod_alias mod_auth_basic mod_authn_file mod_authz_host mod_authz_groupfile mod_authz_default mod_authz_user mod_authn_dbm mod_autoindex mod_cgi mod_dir mod_env mod_expires mod_include mod_log_config mod_mime mod_negotiation mod_rewrite mod_setenvif mod_ssl mod_suexec mod_userdir mod_php5

Verwende auch noch den eAccelerator 0.9.6

Memory Size: 16,777,144 Bytes
Memory Available: 408 Bytes
Memory Allocated: 16,776,736 Bytes

Vielleicht liegt auch da die Ursache?

Edit: Ich habe die Memory Size für den eAccelerator mal auf 64MB erhöht. Jetzt ist noch genügend frei. Aber das Problem tritt nach wie vor auf.
 
Last edited by a moderator:
ich vermute den eAccelerator 0.9.6.
und zwar in der kombination mit fcgid.
nimm den eAccelerator 0.9.6 mal testweise raus.
 
Ich habe den eAccelerator mal deaktiviert, das Problem tritt aber nach wie vor auf.

Am Wochenende hab ich zudem einen Memory-Check mit Memtest86+ gemacht, es wurden aber keine Fehler gefunden.
 
Also, langsam ist es zum Verzweifeln. Hardware kann wohl ausgeschlossen werden, der eAccelerator auch. Ganz toll ist natürlich, dass das Problem sehr sporadisch auftritt, mal einen halben Tag lang gar nicht, dann im 2 Stunden Takt.

Auch komisch ist, dass sobal der erste Prozess mit dem "Exit signal Segmentation fault (11)" abschmiert, alle anderen folgen. Eine Zeit lang rauchen dann auch alle neuen Prozesse ab, die neu "geforkt" werden. Nach 4-5 Minuten läuft dann alles wieder. Startet man in der zwischen Zeit den Apache-Dienst neu, läuft es auch wieder?!? :confused:

Ohne jetzt oraklen zu müssen was die Ursache ist, wäre es natürlich gut zu wissen, wie man der Ursache auf die Schliche kommt? PHP/Apache mit DEBUG-Optionen zu kompilieren, fällt leider flach, da es sich im ein Live-System handelt, wo ich nicht einfach mal so rumspielen kann und will. Und auf dem Testsystem hab ich die Probleme leider nicht.
 
Last edited by a moderator:
evtl. kommt der segfault nur wenn du horde benutzt(falls es ein Plesk System ist). vielleicht kannst du es so etwas eingrenzen.
 
 
Naja, um dem Problem wirklich auf die Spur zu kommen wirst du wohl um das Erstellen/Analysieren eines Coredumps* nicht herumkommen...alles Andere sind nur Schüsse ins Blaue.
Ich hatte auch so ein Problem vor einer Weile, Verursacher war ein Twitter-Plugin für eine Wordpress-Site. Ich gehe mal davon aus dass du mehrere Sites auf dem Server laufen hast, schau doch mal ob eine davon eine blank page ausgibt wenn die Segfaults auftreten, so könntest du wenigstens das Problem auf eine Site eingrenzen.

Eine andere (wenn auch nicht gerade elegante) Möglichkeit wäre den Apache automatisch neu starten zu lassen wenn ein Segfault auftritt, ich lasse z.B. bei mir das error.log durch ein Shellscript parsen. Aber ok, bei mir traten die Segfaults nur alle 1-2 Tage auf, bei der kurzen Frequenz in der die Segfaults auf deinem System auftreten wäre das wohl nicht wirklich praktikabel.

* http://www.cyberciti.biz/tips/configure-apache-web-server-for-core-dump.html
 
Back
Top