2015-06-02 2 views
4

после того как мы мигрировали в PHP 5.5.6 и Apache 2.4 из PHP 5.3.3 каждый сайт, который работает на Kohana 3.3 встречи время от времени Out of memory исключение.PHP 5.5.6 Оперативная память утечка

Полное сообщение об ошибке

PHP Fatal error: Allowed memory size of 268435456 bytes exhausted (tried to allocate 140316914598360 bytes) in Unknown on line 0 

PHP говорит он пытается выделить 127TB памяти (байт при изменении конца, но его до сих пор вокруг ТБ). Это происходит совершенно случайно. Иногда вы получаете полосу в течение нескольких часов без проблем и внезапно 1 или даже 10 из памяти сообщений в строке. Это происходит во всех проектах, будь то веб-службы, подключающиеся к MySQL, MSSQL или MongoDB или простому веб-сайту.

Худшая вещь - Unknown on line 0, которая сообщает мне абсолютно ничего. Даже после отключения зарегистрированного shutdown_function сообщение не изменилось.

Сначала я подозревал PDO dblib + freetds как виновника, но получил нигде не используя while($row = $query->fetch()), как описано в https://bugs.php.net/bug.php?id=64511 или this question.

До сих пор я пытался:

  • Xdebug
  • memory_usage() каротаж
  • Трассирование на HTTPD

Все они показывают, что распределение памяти находится в отличном состоянии.

Только strace показывает некоторое обещание, так как перед каждым out of memory исключения брошено, это куча munmap вызовов, которая показывает память продолжает снижаться и затем внезапно бросает исключение. Хотя я не уверен, что он надежный, так как журналы иногда смешивались (от разных вызовов).

Кто-нибудь сталкивался с чем-то похожим?

Каковы наилучшие шаги для решения этой проблемы?

На данный момент, я из идей, что я могу сделать, чтобы решить эту проблему ...

+0

Вам нужна помощь в отслеживании происхождения утечки? Запускайте разные скрипты, чтобы увидеть, есть ли на каждой странице или конкретных. Если это происходит на каждом скрипте, проверьте, включите ли вы его, удалите некоторые/все из них. Если мы сможем найти ответственный сценарий, будет легче отследить. – psycotik

+0

Это легче сказать, чем сделать. Это происходит на множестве веб-сайтов и происходит приложением. один раз за 30 минут в аватарке? Иногда его тихий в течение 2 часов – realshadow

+0

Я предлагаю вам использовать журнал и записывать, когда это случается, чтобы попытаться найти любые шаблоны. – psycotik

ответ

2

Я собираюсь ответить на этот вопрос для себя и для будущей ссылки.

Фактическая ошибка была в pdo_dblib в конце концов. Согласно этой ошибке - https://bugs.php.net/bug.php?id=67130, которую я нашел вчера PDOStatement::nextRowset(), вызвало повреждение памяти и, следовательно, все наши проблемы. Я проверил это, удалив эту часть нашего кода и давая ей работать без нее в течение 12 часов в «спешке» трафика.

Эта ошибка была исправлена ​​вместе с https://bugs.php.net/bug.php?id=64511, и я не заметил сначала, что эти два связаны.

Наша система работает на CentOS, а PHP устанавливается из Коллекций программ, поэтому мы загрузили исходный код указанного модуля и применили исправление вручную, так как две версии одного и того же пакета из репозитория RPM Реми не работали или не были совместимы ,

Это действительно смешно, потому что мы мигрировали из 5.3.3 в 5.5.6 из-за https://bugs.php.net/bug.php?id=57593 (есть несколько сообщений об ошибках и пожелания), где PDOStatement::nextRowset() не была реализована (она была установлена ​​в 5.3.7).

Смежные вопросы