Apache Abstürze seit 12.x upgrade

-Nuke-

Well-Known Member
Hallöchen,

ich habe mich vor einigen Tagen dann doch mal ran gesetzt und mal alle meine 11.4er Jails auf 12.3 aktualisiert (der Host war schon auf 12.3). Das Upgrade lief auch soweit durch und mir ist nichts besonderes aufgefallen.

Jetzt stelle ich aber fest, dass nun schon zum zweiten Mal zwei Apache Webserver in zwei verschiedenen Jails im Abstand von wohl mehreren Tagen um Punkt 4 Uhr morgen, auf die Sekunde genau, abstürzen. Ein weiterer Apache in einer dritten Jail ist da nicht betroffen, aber auch nicht so stark frequentiert. In einer Jail läuft Apache mit mod_php74 und in der anderen mit mod_php80.

Jetzt hab ich natürlich den Cron in Verdacht. Also mal ein bisschen die Logs posten:

/var/log/messages vom Host:
Code:
Apr  4 04:00:00 srv kernel: pid 92506 (httpd), jid 39, uid 0: exited on signal 11 (core dumped)
Apr  4 04:00:00 srv kernel: pid 50486 (httpd), jid 38, uid 0: exited on signal 11 (core dumped)

http-error log einer der Jails zum Zeitpunkt:
Code:
Apr  4 04:00:00 userweb newsyslog[26419]: logfile turned over
[Mon Apr 04 04:00:00.019260 2022] [mpm_prefork:notice] [pid 50486] AH00171: Graceful restart requested, doing restart

http-access log zum Zeitpunkt:
Code:
Apr  4 04:00:00 userweb newsyslog[26419]: logfile turned over

In den jeweils neu erstellten Logfiles steht dann nur noch:

Code:
Apr  4 04:00:00 userweb newsyslog[26419]: logfile turned over

Danach dann nichts mehr, sondern nur noch mein manueller Start des gestorbenen Apachen. Der newsyslog cron läuft auch stündlich, passt also damit zusammen. In der anderen Jails sind die Logs analog dazu.

Der Coredump gibt jetzt auch nicht viel her, hab aber mit coredump-Debugging auch nicht so die Erfahrung:
Code:
lldb --core httpd.core
(lldb) target create --core "httpd.core"
Core file '/httpd.core' (x86_64) was loaded.
(lldb) bt all
* thread #1, name = 'httpd', stop reason = signal SIGSEGV
  * frame #0: 0x00000008015946c0
    frame #1: 0x0000000801b4740b

Hat jemand eine Idee was die Ursache sein könnte? In der 11.4er Version der Jail lief alles über Jahre gut. Sind auch die Pakete aus den offiziellen FreeBSD pkg-Repos.
 
Schau mal ob ein händisches graceful restart funktioniert oder ob da schon ein Fehler kommt?

Könnte zu diesem Zeitpunkt größere Last darauf sein?
 
Ein "service apache24 graceful" killt den Apache auch mit dem beschriebenen Effekt. Große Last liegt da nicht drauf, schon gar nicht um 4 Uhr morgens.
 
Ich hab das LogLevel auf debug gestellt, aber das fügt hinterher nichts ins Log ein. Die letzte Meldung bleibt identisch. "Graceful restart requested, doing restart" und dann Tschüss...
 
Du könntest versuchen den httpd direkt zu starten - ohne das er in den Hintergrund forkt (die genaue Commanline weiß ich grad nicht) und dann an den Apache das Signal zum Gracefull Restart schicken (USR1 sollte das sein). Vielleicht schreibt er dann was brauchbares ins Terminal.
 
Mit runit kannst Du das Problem zumindest umschiffen. Der Apache wird dann neu gestartet.
 
Ein "service apache24 graceful" killt den Apache auch mit dem beschriebenen Effekt.
Dann hast du ja die Möglichkeit zur Reproduktion des Fehlers.

Ich würde einmal den Apache stoppen, das PHP-Modul rausnehmen und den Apache dann wieder starten. Dann den Neustart provozieren und nochmals prüfen. Vielleicht liegt es schon daran.

Zusätzlich kannst du prüfen, ob deine Pakete auch auf die 12 aktualisiert wurden:

# pkg query '%n %q'

Zeigt dir Name und Architektur aller Pakete.

Rob
 
Habe mich jetzt nochmal etwas mit dem lldb Debugger befasst. Es liegt wohl an PHPs Zend OpCache.

Code:
root@cloud:/ # lldb --core httpd.core /usr/local/sbin/httpd
(lldb) target create "/usr/local/sbin/httpd" --core "httpd.core"
Core file '/httpd.core' (x86_64) was loaded.
(lldb) bt all
* thread #1, name = 'httpd', stop reason = signal SIGSEGV
  * frame #0: 0x000000080168ea30 libasn1.so.11
    frame #1: 0x0000000801e47a12 opcache.so`___lldb_unnamed_symbol7$$opcache.so + 66
    frame #2: 0x0000000802c94466 libphp.so`___lldb_unnamed_symbol2988$$libphp.so + 22
    frame #3: 0x0000000802c79002 libphp.so`zend_llist_apply_with_del + 82
    frame #4: 0x0000000802c0ade9 libphp.so`php_module_startup + 2281
    frame #5: 0x0000000802d27fe5 libphp.so`___lldb_unnamed_symbol4432$$libphp.so + 21
    frame #6: 0x0000000802d27846 libphp.so`___lldb_unnamed_symbol4427$$libphp.so + 118
    frame #7: 0x000000000025e1ef httpd`ap_run_post_config + 79
    frame #8: 0x000000000025cfb6 httpd`main + 1494
    frame #9: 0x000000000025c7e0 httpd`_start + 256

Und tatsächlich, wenn ich in der php.ini den OpCache deaktiviere, dann funktioniert es wieder. Es beschwert sich dann nur NextCloud, dass er aus ist. Ich vermute jetzt mal, dass man hier eher mal allgemein einen Blick auf die php.ini werfen sollte. Der Crash scheint ja auch in libasn1 zu sein.

Jedenfalls ergibt die Ausgabe von pkg query '%n %q' überall ein FreeBSD:12. Auch das händische Starten von Apache direkt über den httpd-Befehl ergibt nicht mehr außer eine Ausgabe in der Art "Signal 1 empfangen" und dann ebenfalls der Absturz.

Danke allgemein für die Führung in die richtige Richtung :)
 
Zuletzt bearbeitet:
Ist vielleicht eine sinnvolle Info für andere:

Fast 2 Jahre ist der Thread hier jetzt her, jetzt habe ich auf FreeBSD 14 aktualisiert und in einer anderen Jail mit PHP das Problem wieder. Das hat mich jetzt mal wieder veranlasst zu schauen, ob diesbezüglich eigentlich was passiert ist. Ist es sogar... teilweise. FreeBSD empfiehlt seit kurzem die Nutzung von php_fpm und sagt man solle mod_php nicht mehr benutzen, eben wegen des Problems in diesem Thread.

 
Weil mich der Fehler jede Nacht genervt hat, bin ich auf nginx umgestiegen. Seit dem habe ich Ruhe. Apache ist für mich raus...
 
Um ehrlich zu sein: Keine Ahnung. Ich hatte beide Varianten verwendet. Apache hat immer wieder das Kriegsbeil ausgegraben.
 
Zurück
Oben