Расширение mysql приводит к случайным ошибкам сегментации в CLI

Есть сервер с Debian Lenny на борту. На сервер стоит Apache, MySQL, PHP5 — одним словом, стандартный web-сервер. Плюс XCache и ionCube Loader.

С некоторого времени стали замечать, что PHP начал падать с ошибками сегментации, причем падал исключительно CLI, модуль Apache работал исправно.
Конфигурация такая:

[-]
View Code Bash
# dpkg -l | egrep "php5|mysql|apache"
ii  apache2                             2.2.9-10+lenny2       Apache HTTP Server metapackage
ii  apache2-doc                         2.2.9-10+lenny2       Apache HTTP Server documentation
ii  apache2-mpm-prefork                 2.2.9-10+lenny2       Apache HTTP Server - traditional non-threaded model
ii  apache2-utils                       2.2.9-10+lenny2       utility programs for webservers
ii  apache2.2-common                    2.2.9-10+lenny2       Apache HTTP Server common files
ii  libapache2-mod-perl2                2.0.4-5               Integration of perl with the Apache2 web server
ii  libapache2-mod-php5                 5.2.6.dfsg.1-1+lenny2 server-side, HTML-embedded scripting language (Apache 2 module
ii  libapache2-mod-python               3.3.1-7               Python-embedding module for Apache 2
ii  libmysqlclient15off                 5.0.51a-24            MySQL database client library
ii  mysql-common                        5.0.51a-24            MySQL database common files
ii  php5-cli                            5.2.6.dfsg.1-1+lenny2 command-line interpreter for the php5 scripting language
ii  php5-common                         5.2.6.dfsg.1-1+lenny2 Common files for packages built from the php5 source
ii  php5-curl                           5.2.6.dfsg.1-1+lenny2 CURL module for php5
ii  php5-gd                             5.2.6.dfsg.1-1+lenny2 GD module for php5
ii  php5-mcrypt                         5.2.6.dfsg.1-1+lenny2 MCrypt module for php5
ii  php5-mysql                          5.2.6.dfsg.1-1+lenny2 MySQL module for php5
ii  php5-suhosin                        0.9.27-1              advanced protection module for php5
ii  php5-xcache                         1.2.2-3               Fast, stable PHP opcode cacher

Плюс последняя версия ionCube Loader.

Тестировалось всё это дело следующим образом:

[-]
View Code Bash
watch -n 0.3 -d "php5 -v 2>&1"

С завидным постоянством процесс вываливался по ошибке сегментации:

[-]
View Code Text
PHP 5.2.6-1+lenny2 with Suhosin-Patch 0.9.6.2 (cli) (built: Jan 26 2009 21:54:14)
Copyright (c) 1997-2008 The PHP Group
Zend Engine v2.2.0, Copyright (c) 1998-2008 Zend Technologies
    with XCache v1.2.2, Copyright (c) 2005-2007, by mOo
    with the ionCube PHP Loader v3.1.33, Copyright (c) 2002-2007, by ionCube Ltd.
    with Suhosin v0.9.27, Copyright (c) 2007, by SektionEins GmbH
Segmentation fault (core dumped)

Ошибка обнаруживалась в двух местах, а backtrace был практически бессмысленным (или я его неправильно понимаю).

[-]
View Code Text
Core was generated by `/usr/bin/php5 -v'.
Program terminated with signal 11, Segmentation fault.
[New process 4052]
[New process 4041]
#0  0x00002ae6ee496ed0 in ?? ()
(gdb) bt
#0  0x00002ae6ee496ed0 in ?? ()
#1  0x00002ae6e90c6fc7 in start_thread () from /lib/libpthread.so.0
#2  0x00002ae6e8aa05ad in clone () from /lib/libc.so.6
#3  0x0000000000000000 in ?? ()

и

[-]
View Code Text
(gdb) bt
#0  0x00002aaaaaac91af in ?? () from /lib/libgcc_s.so.1
#1  0x00002aaaaaac9afb in ?? () from /lib/libgcc_s.so.1
#2  0x00002aaaaaac9c03 in _Unwind_ForcedUnwind () from /lib/libgcc_s.so.1
#3  0x00002b076fab6050 in __pthread_unwind () from /lib/libpthread.so.0
#4  0x00002b076fab0585 in pthread_exit () from /lib/libpthread.so.0
#5  0x00002b0774c60edb in ?? ()
#6  0x0000000040800950 in ?? ()
#7  0x00002b076faaffc7 in start_thread () from /lib/libpthread.so.0
#8  0x00002b076f4895ad in clone () from /lib/libc.so.6
#9  0x0000000000000000 in ?? ()

Сначала во всех смертных грехах обвинялся XCache, затем — ionCube, тем более, что Google заботливо подсказал, что проблемы случаются и с одним, и с другим.

Через некоторое время паника уляглась (шутка ли — живой нагруженный сервер) и вернулся здравый смысл Поставил виртуальную машину, пошел тестировать. Ошибка не проявилась! Проверил три раза версии пакетов (в том числ и системные библиотеки) — всё идентично. Но ошибка не возникает и хоть тресни.

Снёс на сервере PHP и компанию, переустановил заново из официального репозитория — PHP падает. Видимо, какой-то редкий баг, который проявляется при определённом положении звёзд на небе.

Поняв, что виртуальная машина не поможет, я отключил абсолютно все расширения PHP и стал запускать его watch'ем минут на 10. Если запуск проходил успешно и ошибки сегментации не случались, добавлялось очередное расширение и процесс повторялся. Перебор показал, что сегфолты случаются только тогда, когда активно либо расширение mysql, либо расширение mysqli (что характерно, pdo_mysql работало нормально). Причем все остальные расширения могли быть запрещены.

Копание в коде ни к чему не привело — ошибка возникала абсолютно случайно, закономерности не обнаруживались. Плюнув на всё, решил проблему в лоб:

[-]
View Code Bash
echo "deb http://packages.dotdeb.org stable all" >> /etc/apt/sources.list
echo "deb-src http://packages.dotdeb.org stable all" >> /etc/apt/sources.list
aptitude update
aptitude full-upgrade

Со сборкой от dotdeb полёт вторые сутки нормальный, ни одного сегфолта (тьфу-тьфу). Хотя до сих пор интересно, в чём же на самом деле была проблема.

Добавить в закладки

Связанные записи

13
Март
2009

Комментарии к статье «PHP 5.2.6 в Debian Lenny: неожиданный сюрприз» (2)  »

  1. alexpts says:

    мледующим образом”

Подписаться на RSS-ленту комментариев к статье «PHP 5.2.6 в Debian Lenny: неожиданный сюрприз» Trackback URL: http://blog.sjinks.org.ua/php/512-php-526-in-debian-lenny-unexpected-surprise/trackback/

Оставить комментарий к записи «PHP 5.2.6 в Debian Lenny: неожиданный сюрприз»

Вы можете использовать данные тэги: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>

Оставляя комментарий, Вы выражаете своё согласие с Правилами комментирования.

Подписаться, не комментируя