Приветсвую.Проблемма:
Есть некое самописное php4 приложение отдающееся через apache. Оно
использует как бекэнд mysql и memcached для кэширования запросов. Оно
активно используется вот уже несколько лет и сейчас для него поднимается
новый сервер(собственно говоря вот этот). Мы начали проводить стрес тест
приложения и наткнулись на проблемму.
Стресс тест проводился следющим образом:
Через это приложение с многих компьютеров запрашивались несколько
больших отчётов(обьём от 5 до 20 мб). Первые отчёты приходили, но через
некоторое время(около 30 минут) всё ломалось и приложение переставало
работать. В логах апача было следующе:
FATAL: emalloc(): Unable to allocate xxx bytes
xxx = постоянно менялось от 1 байта до 100.
И после этого праграмма больше не работала. Рестарт апача возвращал всё
на исходную позицию.
Сразу скажу что это НЕ зависит от php.ini memory_limit, от нехватки ОЗУ
или swap.
Ошибка возникает при делолтных конфигах mysql(my.cnf) и php(php.ini) так
и без них.
Мы пробовали ставить разные версии Apache(2.0; 2.2), тюнить
php.ini(memory_limit, etc), переустанавливать систему с нуля. Ничего
ситуацию не изменило.
Мы пробовали пускать эти запросы, которые убивают приложени в sql виде
и никаких проблем не было. Проблема где-то именно в взаимодействии php и
mysql, imho.
Я долго гуглил эту ошибку и прочитал пол интернета в том числе и все
баги на багтрекере php. Но нигде не нашёл решение для нашей ситуации.
Буду рад любой помощи.
---------
Железо:
CPU: Intel(R) Xeon(R) CPU E5335 @ 2.00GHz (2000.08-MHz 686-class CPU)
3 Gb RAM
Увы не могу сказать точнее про ОЗУ и ничего не знаю про материнскую
плату. Когда узнаю - обновлю информацию.
Система:
FreeBSD 6.3-RELEASE /usr/obj/usr/src/sys/SMP i386
Express install.
Утановленные пакеты:
Apache-2.0.63
Mysql-server-5.0.51a
Memcached-1.2.4
Php4-4.4.8
(WITH_CLI=true, WITHOUT_CGI=true, WITH_APACHE=true, WITHOUT_DEBUG=true,
WITH_SUHOSIN=true, WITH_MULTIBYTE=true, WITHOUT_IPV6=true
WITHOUT_MAILHEAD=true, WITHOUT_REDIRECT=true, WITHOUT_DISCARD=true
WITHOUT_FASTCGI=true, WITHOUT_PATHINFO=true, WITH_OPENSSL=true
WITH_ZLIB=true)
+ extensions
(WITHOUT_BCMATH=true, WITHOUT_BZ2=true, WITH_CALENDAR=true,
WITHOUT_CRACK=true, WITH_CTYPE=true, WITH_CURL=true, WITHOUT_DBA=true
WITHOUT_DBASE=true, WITHOUT_DBX=true, WITHOUT_DIO=true,
WITH_DOMXML=true, WITH_EXIF=true, WITHOUT_FILEINFO=true,
WITHOUT_FILEPRO=true, WITHOUT_FRIBIDI=true, WITHOUT_FTP=true,
WITH_GD=true, WITHOUT_GETTEXT=true, WITHOUT_GMP=true, WITH_ICONV=true,
WITHOUT_IMAP=true, WITHOUT_INTERBASE=true, WITHOUT_LDAP=true,
WITH_MBSTRING=true, WITHOUT_MCAL=true, WITHOUT_MCRYPT=true,
WITHOUT_MCVE=true, WITH_MHASH=true, WITHOUT_MNOGOSEARCH=true
WITHOUT_MSSQL=true, WITH_MYSQL=true, WITHOUT_NCURSES=true,
WITHOUT_ODBC=true, WITHOUT_OPENSSL=true, WITHOUT_ORACLE=true,
WITH_OVERLOAD=true, WITHOUT_PCNTL=true, WITH_PCRE=true, WITHOUT_PDF=true
WITHOUT_PFPRO=true, WITHOUT_PGSQL=true, WITH_POSIX=true,
WITHOUT_PSPELL=true, WITHOUT_READLINE=true, WITHOUT_RECODE=true,
WITH_SESSION=true, WITHOUT_SHMOP=true, WITHOUT_SNMP=true,
WITHOUT_SOCKETS=true, WITHOUT_SYBASE_CT=true, WITHOUT_SYSVMSG=true,
WITHOUT_SYSVSEM=true, WITHOUT_SYSVSHM=true, WITH_TOKENIZER=true,
WITHOUT_WDDX=true, WITH_XML=true, WITH_XMLRPC=true, WITH_XSLT=true,
WITHOUT_YAZ=true, WITHOUT_YP=true, WITHOUT_ZIP=true, WITH_ZLIB=true,)
и их зависимости. Всё из портов.
(извиняюсь за большое кол-во сборочной информации, но мне кажется она
весьма важна в данной проблемме)