Утечка памяти в php - Форум успешных вебмастеров - GoFuckBiz.com
 
 
Форум успешных вебмастеров - GoFuckBiz.com

  Форум успешных вебмастеров - GoFuckBiz.com > Бизнес-решения > Скрипты, программы и технические решения
Дата
USD/RUB93.4409
BTC/USD66772.7701
Скрипты, программы и технические решения Обсуждаем скрипты, программы и новые технологии.

Закрытая тема
Опции темы Опции просмотра
Старый 02.01.2011, 14:16   #1
Foma
Кролик
 
Аватар для Foma
 
Регистрация: 15.08.2007
Сообщений: 297
Бабло: $37345
По умолчанию Утечка памяти в php

Чет вообще не везет.
Решил нагенерить >1лям страниц для доров, ды вот беда, где-то в коде идет утечка памяти, и после 20к страниц пхп сжирает всю память и вылетает.

Мож есть какие-нибудь тулзы для автоматического выявления утечек в коде?
А то ручками уже второй день копаюсь, так и не нашел от куда ноги растут.
Foma вне форума  
Старый 02.01.2011, 14:29   #2
JackSoft
Бабло победит зло
 
Аватар для JackSoft
 
Регистрация: 20.06.2008
Сообщений: 2,579
Бабло: $346045
По умолчанию

Цитата:
Сообщение от Foma Посмотреть сообщение
Чет вообще не везет.
Решил нагенерить >1лям страниц для доров, ды вот беда, где-то в коде идет утечка памяти, и после 20к страниц пхп сжирает всю память и вылетает.

Мож есть какие-нибудь тулзы для автоматического выявления утечек в коде?
А то ручками уже второй день копаюсь, так и не нашел от куда ноги растут.
Сходу нагуглил:
Это не утечка памяти, а особенности работы с памятью mod_php. Если процесс использовал какой-то объем памяти, а потом освободил ее, то эта память физически не освобождается, а остается за процессом и будет использована в случае повторых запросов памяти. И так для каждого httpd процесса, если у тебя их 100, то рано или поздно все 100 будут занимать столько сколько по максимому запросит php скрипт в рамках каждого дочернего httpd.
Методы лечения:
1. Требовательные к памяти запросы выполнять не через mod_php, а через cgi-версию php.
2. Поставить memory_limit и похоронить жрущие память скрипты (для массового хостинга подходит).
3. Поставить MaxRequestsPerChild 1
4. Использовать два апаче, первый, бэкенд, с mod_php и ограничением на число клиентов в 5-10, второй, легкий фронтенд, с mod_accel или на nginx вместо apache, который будет пронимать запросы от клиентов и переправлять в бэкенд.
__________________
"Одно Касание/Touch File" - безопасный обмен файлами "TFUtils" - набор утилит TouchFile "TF Screenshots" - заменим Gyazo безопасным аналогом
JackSoft вне форума  
Старый 02.01.2011, 14:30   #3
JackSoft
Бабло победит зло
 
Аватар для JackSoft
 
Регистрация: 20.06.2008
Сообщений: 2,579
Бабло: $346045
По умолчанию

http://www.linux.org.ru/forum/web-development/1885555
__________________
"Одно Касание/Touch File" - безопасный обмен файлами "TFUtils" - набор утилит TouchFile "TF Screenshots" - заменим Gyazo безопасным аналогом
JackSoft вне форума  
Старый 02.01.2011, 14:36   #4
Foma
Кролик
 
Аватар для Foma
 
Регистрация: 15.08.2007
Сообщений: 297
Бабло: $37345
ТС -->
автор темы ТС По умолчанию

Цитата:
Сообщение от JackSoft Посмотреть сообщение
Сходу нагуглил:
Это не утечка памяти, а особенности работы с памятью mod_php. Если процесс использовал какой-то объем памяти, а потом освободил ее, то эта память физически не освобождается, а остается за процессом и будет использована в случае повторых запросов памяти. И так для каждого httpd процесса, если у тебя их 100, то рано или поздно все 100 будут занимать столько сколько по максимому запросит php скрипт в рамках каждого дочернего httpd.
Методы лечения:
1. Требовательные к памяти запросы выполнять не через mod_php, а через cgi-версию php.
2. Поставить memory_limit и похоронить жрущие память скрипты (для массового хостинга подходит).
3. Поставить MaxRequestsPerChild 1
4. Использовать два апаче, первый, бэкенд, с mod_php и ограничением на число клиентов в 5-10, второй, легкий фронтенд, с mod_accel или на nginx вместо apache, который будет пронимать запросы от клиентов и переправлять в бэкенд.
Спасибо, покопаю в этом направлении...
Foma вне форума  
Старый 02.01.2011, 17:45   #5
ar4ibas
Senior Member
 
Регистрация: 11.11.2009
Сообщений: 362
Бабло: $71310
По умолчанию

Цитата:
Сообщение от Foma Посмотреть сообщение
Чет вообще не везет.
Решил нагенерить >1лям страниц для доров, ды вот беда, где-то в коде идет утечка памяти, и после 20к страниц пхп сжирает всю память и вылетает.

Мож есть какие-нибудь тулзы для автоматического выявления утечек в коде?
А то ручками уже второй день копаюсь, так и не нашел от куда ноги растут.

1. проапдейть софт (apache\php\eaccelerator итд). имхо это первое с чего нужно начинать.
2. что значит "пхп вылетает"? Работает как cli или mod_php?. смотри что в логах. Если скрипт отваливается изза ограничения по памяти в php.ini (обычно там 32м) то тебе скорее всего нада попробовать оптимизировать свой код (ибо 32м это реально дохуя) и возможно повысить этот лимит.
ar4ibas вне форума  
Старый 02.01.2011, 17:55   #6
t0os
сам иди в жопу!
 
Аватар для t0os
 
Регистрация: 02.05.2009
Сообщений: 672
Бабло: $81580
По умолчанию

А поэтапно запускать не вариант? Памяти побольше для php выделить.
t0os вне форума  
Старый 02.01.2011, 17:58   #7
Foma
Кролик
 
Аватар для Foma
 
Регистрация: 15.08.2007
Сообщений: 297
Бабло: $37345
ТС -->
автор темы ТС По умолчанию

Оно 500 метров оперативы сжирает, и больше не может выделить.
Хз что такое, везде переменные ручками очищаю на каждом заходе, а память все равно течет.
Foma вне форума  
Старый 02.01.2011, 20:18   #8
Aston Martim
Senior Member
 
Аватар для Aston Martim
 
Регистрация: 29.03.2009
Сообщений: 687
Бабло: $95875
По умолчанию

Сколько стоит MaxRequestsPerChild?
__________________
Мой форум о Бали
Aston Martim вне форума  
Старый 03.01.2011, 08:20   #9
chesser
автоматизирую интернеты
 
Аватар для chesser
 
Регистрация: 05.07.2009
Адрес: chesser.ru
Сообщений: 3,362
Бабло: $470735
По умолчанию

ну если действительно в алго проблема, то его дебажить надо
если генерится 1кк страниц, значит есть цикл, может в теле цикла переменная/объект копится и достигает немыслимых размеров. Попробуй внутри тела цикла коментить строки, чтобы вычислить примерно какой функционал все портит.
Ну и фунции пхпшные по памяти посмотри, там есть какие-то, которые статистику выводят, сколько занято/свободно
__________________
USA и NL серверы и VPS | wiki | блог | Drupal | NginxТДС
Ave, Google, morituri te salutant! © chesser
chesser вне форума  
Старый 03.01.2011, 20:08   #10
imgreen
Senior Member
 
Аватар для imgreen
 
Регистрация: 15.11.2008
Сообщений: 13,230
Бабло: $247845871
По умолчанию

полюбому дело в коде, но иногда просто не видишь ошибку в упор.
imgreen вне форума