PHP 5.2.6 в Debian Lenny: неожиданный сюрприз
Расширение mysql приводит к случайным ошибкам сегментации в CLI
Есть сервер с Debian Lenny на борту. На сервер стоит Apache, MySQL, PHP5 — одним словом, стандартный web-сервер. Плюс XCache и ionCube Loader.
С некоторого времени стали замечать, что PHP начал падать с ошибками сегментации, причем падал исключительно CLI, модуль 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.
Тестировалось всё это дело следующим образом:
С завидным постоянством процесс вываливался по ошибке сегментации:
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 был практически бессмысленным (или я его неправильно понимаю).
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 ?? ()
и
#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 работало нормально). Причем все остальные расширения могли быть запрещены.
Копание в коде ни к чему не привело — ошибка возникала абсолютно случайно, закономерности не обнаруживались. Плюнув на всё, решил проблему в лоб:
echo "deb-src http://packages.dotdeb.org stable all" >> /etc/apt/sources.list
aptitude update
aptitude full-upgrade
Со сборкой от dotdeb полёт вторые сутки нормальный, ни одного сегфолта (тьфу-тьфу). Хотя до сих пор интересно, в чём же на самом деле была проблема.
Автор: Vladimir; опубликовано в: Linux, PHP, Администрирование; метки: crash, Debian, MySQL, PHP, segfault, ошибкаМар
2009
Комментарии к статье «PHP 5.2.6 в Debian Lenny: неожиданный сюрприз» (5) »
Пожалуйста, не используйте эту форму для комментирования! Данная форма предназначена исключительно для ботов.
Оставить комментарий к записи «PHP 5.2.6 в Debian Lenny: неожиданный сюрприз»
गते गते पारगते पारसंगते बोधि स्वाहा
Меня зовут Владимир, я программист-фрилансер, специализирующийся на Web-программировании и програмировании под Linux.
По совместительству занимаюсь администрированием LAMP/LNMP-серверов и техническим переводом.


«мледующим образом»
Поправил, спасибо
Подскажите, как отключить в php запись корок. У меня файлы типа core.* просто плодяться.
Как-то так:
Ну или в
/etc/security/limits.confдобавитьСпасибо большое за эту статью!!!
У меня была схожая проблема, но из-за пакета php-gd. Видимо тоже звезды виноваты..
При установке пакета с рекомендованного Вами репозитория все решилось..