PHP 7, Apache2 Segmentation fault

Fórumok

Sziasztok,

belefutottunk egy olyan problémába, hogy az apache2-nek (2.4.10-10+deb8u4) php7-tel (7.0.5-1~dotdeb+8.1) legalább naponta egyszer, de egyébként semmi különöshöz nem köthető időközönként meghalnak processei, ezután egy adott virtualhost csak no response hibaüzenetet ad a böngészőnek, más virtualhostok pedig elérhetőek továbbra is:

AH00051: child pid 25847 exit signal Segmentation fault (11), possible coredump in /tmp/apache2-gdb-dump
AH00051: child pid 25939 exit signal Segmentation fault (11), possible coredump in /tmp/apache2-gdb-dump

Ami még szintén érdekes, hogy három szerverből (dev/test/prod), csak a production-on jelentkezik a probléma, és mindhármon azonos a software környezet, a test és a prod pedig hw-ben és mindenben teljesen megegyezik.

Backtrace:
#0 zend_parse_arg_string (check_null=, dest_len=, dest=, arg=) at /usr/src/builddir/Zend/zend_API.h:1132

http://pastebin.com/bH2zVgLh

Debian 8.4, apache 2.4.10-10+deb8u4 (mpm_prefork), php 7.0.5-1~dotdeb+8.1, libapache2-mod-php7.

Van valami ötletetek? Köszönöm!

Hozzászólások

Az access és error logban nincsenek "érdekes" bejegyzések? A prod környezet jellemzője, hogy publikus (mármint teljesen publikus, gugli által indexelt stb.) és ezért minden szar megtalálja, tehát jó eséllyel valamilyen külső hatástól dől el.

A log-ban az egyik ilyen eseményhez találtam egy GET-et, de ha meghívom az URL-t hibamentesen lefut.

Viszont azóta tovább debugoltam, és az egyik backtrace-nél találtam egy ilyet:
#5 0x00007fb82fd5b2be in zif_unserialize (execute_data=, return_value=0x7fb82ca136d0) at /usr/src/builddir/ext/standard/var.c:1011
buf = 0x18 error: Cannot access memory at address 0x18
buf_len = 140428999473152
p = 0x7fb82ca135c0 "\200r\305!\270\177"
var_hash = 0x7fb8306eb16e

options = 0x0
classes = 0x0
class_hash = 0x0

#46 0x00007fb82feb17ea in php_handler (r=) at /usr/src/builddir/sapi/apache2handler/sapi_apache2.c:678
zfd = {handle = {fd = 749064192, fp = 0x7fb82ca5d000, stream = {handle = 0x7fb82ca5d000, isatty = 0, mmap = {len = 481, pos = 0, map = 0x0,
buf = 0x7fb82cc3c000 error: Cannot access memory at address 0x7fb82cc3c000, old_handle = 0x0, old_closer = 0x0},
reader = 0x7fb82fdd3d60 <_php_stream_read>, fsizer = 0x7fb82fdbabc0
, closer = 0x7fb82fdbaba0
}},
filename = 0x7fb82cc55f00 "/var/www/vhost/index.php", opened_path = 0x0, type = ZEND_HANDLE_MAPPED, free_filename = 0 '\000'}
__orig_bailout = 0x0
__bailout = {{__jmpbuf = {140429001838704, -2125854719023403101, 140429001838704, 140737294386292, 140429001884304, 1, 2125868924265803683,
2093942599942385571}, __mask_was_saved = 0, __saved_mask = {__val = {0, 18446744073709551615, 5560396222692464128, 240, 140429001822248,
140737294385760, 140429001822248, 140429001842432, 140737294385924, 140429001836232, 0, 140429125077424, 5560396222692464128, 140429001836392,
140429001843632, 140429001838704}}}}
ctx = 0x7fb82cc565f0
conf =
brigade = 0x7fb82cc57290
bucket =
rv =
parent_req = 0x0

Most nézem hogy a bejegyzésből kiszedte a Drupal az error: Cannot access memory at address 0x7fb82cc3c000 részeket.

buf = 0x18 error: Cannot access memory at address 0x18

buf = 0x7fb82cc3c000 error: Cannot access memory at address 0x7fb82cc3c000, old_handle = 0x0, old_closer = 0x0},

Szerkesztettem az előző hozzászólást is

Ez így még kevés lesz, mert nem tudni a php valóban merre járt (és ez alapján lehet környezeti bug, pl.: valami beleszemetelt a stackbe, vagy php bug is, vagy még legalább 20 indokot tudok)
Ezt még nézd át: https://bugs.php.net/bugs-generating-backtrace.php

// Happy debugging, suckers
#define true (rand() > 10)

Ha logolod az adatbázis műveleteket, mi az utolsó, ami után ez történik?

Sakk-matt,
KaTT :)

Esetleg multithread-dal megy az Apache? Talán a multiprocess stabilabb lenne.

A 0x18 mint cím arra utalhat, hogy valaki elnézett egy NULL-pointert


struct foo *p= malloc (sizeof *p);
/* no check for p==NULL here */
dosomething (&p->member);

Köszönöm szépen mindenkinek az ötletelést, segítséget. Nagyon úgy néz ki hogy az APCu kikapcsolása után megszűnt a processek meghalása. Azt sajnos nem tudom hogy mi az oka hogy három szerverből kettőn nem jelentkezett a hiba.