LINUX.ORG.RU

Apache падает в segfault


0

0

Стоит комплект: Ubuntu Server 7.10 + Apache2.2 + PHP 5.2.3-1ubuntu6.3 как модуль + MySQL 5.0.45-Debian_1ubuntu3.1-log - все это из пакетов + Nginx для проксирования версии 0.6.23 самосборный.
Все отлично работает, самописный движок на PHP, без единого сбоя проработал под более древним софтом, недавно был перенесен на все это. Периодически, в разное время, чайлды apache начинают сыпаться с segfault. Протрейсить очень сложно, ибо после старта нового - почти сразу умирает. В браузере при это ошибка 500 (Nginx ошибку 499 так показывает) - т.е. соединение было разорвано до того, как прокси что-то прочел. Падает только на одном URL, другие скрипты спокойно отрабатывают.

В итоге поймал один процесс, потрейсил, падает вот так:

poll([{fd=24, events=POLLIN|POLLPRI}], 1, 0) = 0
write(24, "?\0\0\0\3UPDATE LOW_PRIORITY objects"..., 67) = 67
read(24, "0\0\0\1\0\1\0\2\0\0\0(Rows matched: 1  Cha"..., 16384) = 52
poll([{fd=24, events=POLLIN|POLLPRI}], 1, 0) = 0
write(24, "&\0\0\0\3SELECT * FROM categories WH"..., 42) = 42
read(24, "\1\0\0\1\0038\0\0\2\3def\nrapidlinks\ncategor"..., 16384) = 231
stat64("./includes/ad.html", {st_mode=S_IFREG|0770, st_size=1483, ...}) = 0
fcntl64(19, F_SETLKW64, {type=F_WRLCK, whence=SEEK_SET, start=0, len=1}, 0xbfab0844) = 0
fcntl64(19, F_SETLKW64, {type=F_UNLCK, whence=SEEK_SET, start=0, len=1}, 0xbfab0844) = 0
poll([{fd=24, events=POLLIN|POLLPRI}], 1, 0) = 0
write(24, "6\0\0\0\3SELECT * FROM links WHERE o"..., 58) = 58
read(24, "\1\0\0\1\5.\0\0\2\3def\nrapidlinks\5links\5l"..., 16384) = 379
--- SIGSEGV (Segmentation fault) @ 0 (0) ---
chdir("/etc/apache2")                   = 0
rt_sigaction(SIGSEGV, {SIG_DFL}, {SIG_DFL}, 8) = 0
kill(21754, SIGSEGV)                    = 0
sigreturn()                             = ? (mask now [])
--- SIGSEGV (Segmentation fault) @ 0 (0) ---
Process 21754 detached

Собственно вопрос к гуру, может кто сталкивался, что тут не так может быть?
Все может работать без сбоев довольно долго, а потом упасть.

Вот это место в коде:

$q1=mysql_query("SELECT * FROM links WHERE obj='".$id."' ORDER BY id ASC");

Есть аналогичная проблема на других сайтах, запрос mysql очень похож.

P.S. у php сперва стоял eaccelerator, сейчас заменил на xcache - разницы никакой...

anonymous

Ответ на: комментарий от anonymous

По умолчанию скидываются в ServerRoot, но там нет прав на запись скорее всего. Можно указать путь через CoreDumpDirectory или sysctl

Chumka ★★★
()
Ответ на: комментарий от Chumka

Апач продолжает сыпаться с завидным постоянством...
Корок не оставляет, уже все ему указал, по указанному пути пусто...

Делал так: sysctl -w kernel.core_pattern=/tmp/%e.%p.core

Давал и права на ServerRoot, в трейсе видно, что он туда последним делом заходит, но после этого сразу вываливается из strace

anonymous
()
Ответ на: комментарий от OldFornit

Проблема найдена.
Скрипт на пхп зацикливался вот в этой функции:

function human_readable($number, $base=1024, $suffixes=array( " Байтов", " Кб", " Мб", " Гб", " Тб", " Пб", " Еб") ){
    $usesuf = 0;
    $n = (float) $number;
    while( $n >= $base ) {
        $n /= (float) $base;
        $usesuf++;
    }
    $places = 2 - floor( log10( $n ) );
    $places = max( $places, 0 );
    $retval = number_format( $n, $places, ".", "" ) . $suffixes[$usesuf];
    return $retval;
};

Функция переписана. Пока что все работает стабильно. Будем ждать, может еще где упадет :)

anonymous
()
Ответ на: комментарий от phasma

у меня нет такой задачи, mod_php меня вполне устраивает по скорости :)

anonymous
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.