Problem: Apache, Segmentation fault (11)

  • Ich hab da einen virtuellen Webserver basierend auf Ubuntu 22.04, mit Apache2, PHP 8.1, MySQL 8. Auf dem laufen mehrere Wordpress-Seiten und ein Nextcloud-Server.

    EINE der Wordpress-Seiten stürzt in regelmässigen Abständen ab. Das Apache-Error-Log zeigt dann folgendes (die child pids sind natürlich variabel):

    Code
    [Fri Jun 07 00:00:06.091169 2024] [mpm_prefork:notice] [pid 1626] AH00163: Apache/2.4.52 (Ubuntu) OpenSSL/3.0.2 configured -- resuming normal operations
    [Fri Jun 07 00:00:06.091179 2024] [core:notice] [pid 1626] AH00094: Command line: '/usr/sbin/apache2'
    [Fri Jun 07 00:00:08.104570 2024] [core:notice] [pid 1626] AH00051: child pid 2542 exit signal Segmentation fault (11), possible coredump in /etc/apache2
    [Fri Jun 07 00:00:08.104646 2024] [core:notice] [pid 1626] AH00051: child pid 2543 exit signal Segmentation fault (11), possible coredump in /etc/apache2
    [Fri Jun 07 00:00:08.104684 2024] [core:notice] [pid 1626] AH00051: child pid 2544 exit signal Segmentation fault (11), possible coredump in /etc/apache2
    [Fri Jun 07 00:00:08.104720 2024] [core:notice] [pid 1626] AH00051: child pid 2547 exit signal Segmentation fault (11), possible coredump in /etc/apache2
    [Fri Jun 07 00:00:08.104756 2024] [core:notice] [pid 1626] AH00051: child pid 2560 exit signal Segmentation fault (11), possible coredump in /etc/apache2
    [Fri Jun 07 00:00:09.123609 2024] [core:notice] [pid 1626] AH00051: child pid 2546 exit signal Segmentation fault (11), possible coredump in /etc/apache2
    [Fri Jun 07 00:00:09.123693 2024] [core:notice] [pid 1626] AH00051: child pid 2567 exit signal Segmentation fault (11), possible coredump in /etc/apache2
    [Fri Jun 07 00:00:11.131622 2024] [core:notice] [pid 1626] AH00051: child pid 2571 exit signal Segmentation fault (11), possible coredump in /etc/apache2

    Diese Segfaults treten regelmässig alle paar Tage auf, und zwar immer um 00:00, beim Logrotate.

    Laut access.log haben zu dieser Zeit nur ein paar Nextcloud-clients automatisch zugegriffen. Aber nichts nachvollziehbares, das jedesmal auftreten würde.


    Das witzige: Nur eine (und zwar immer die gleiche!) Wordpress-Seite funktioniert danach nicht mehr. Selten trifft es auch den Webaccess zum Nextcloud-Server. Aber die restlichen 4 Wordpress-Seiten sind davon NIE betroffen!

    Ein Apache-restart behebt das Problem temporär. Nach ein paar Tagen kommts aber wieder.


    Ich hab Google schon gefragt. Da gibts einige Leute, die ein ähnliches Problem haben, aber keiner weiß den Auslöser oder hat eine nachhaltige Lösung. Da ihr hier mein extended Brain seid, dachte ich mir: was Google nicht weiß findet man sicher im GW Forum! :)


    Danke euch schonmal ;)

  • Ich hab noch immer keinen Plan, wo das Problem her kommt. Also "löse" ich es brute-force: mit einem crontab-oneliner, der jede Stunde das error.log überprüft und im Fall einer "Segmentation fault"-Zeile den apache2 restartet.

    Das ganze sieht so aus:

    Code
    35 */1  *  *  *     tac /var/log/apache2/error.log | grep 'apcu' -m 1 -B 9999 | tac | grep -q Segmentation && systemctl restart apache2 && printf "Segmentation Fault! Apache has been restarted. \nCheck webserver!" | s-nail -s "Webserver Warning" -S {diverse mailserver-angaben zum Versenden einer Info-Mail}

    Erklärung:

    tac /var/log/apache2/error.log | grep 'apcu' -m 1 -B 9999 | tac dreht das error.log um, und sucht nach der erstn "apcu"-Zeile. Das ist eine Warning über ein bereits geladenes Modul, die ich ignoriere. Hier kommt sie mir aber zuhilfe, da sie als erste Zeile nach einem apache-restart ins error.log geschrieben wird. Danach drehe ich den output mit tac wieder um.

    grep -q Segmentation && systemctl restart apache2 && printf "Segmentation Fault! Apache has been restarted. \nCheck webserver!" Jetzt suche ich im weiteren Output (also nach dem letzten Auftreten von "apcu") nach "Segmentation". Und falls es gefunden wird, mache ich danach einen apache-restart und schreibe mir eine Fehlermeldung in den Output.

    s-nail -s "Webserver Warning" -S ..... Zuguterletzt schicke ich mir die Fehlermeldung per Email.


    Das ist soweit schön und gut, nur manchmal reicht ein apache-restart nicht aus (keine Ahnung warum). Da tauchen nach dem apache-restart sofort wieder Fehler auf, und ich muss ihn nochmal restarten. Danach gehts.

    Ich würde also meinen oneliner gern um eine if-then abfrage erweitern, wo er sofort nach dem apache-restart nochmal nach den Fehlern sucht, und wenn sie immer noch da sind, nochmal den apache neustartet. Das alles natürlich bevor er mir die Mail schickt (sonst bekomme ich 2-3 Mails in Folge, was ja sinnlos wäre).


    Ist jemand von Euch da besser im bash-scripten als ich? Ich hab nämlich keinen Plan, wie ichs angehen soll...