[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: Памяти резко не хватает, что делать?
Страницы: 1, 2
inpost
95-96% времени идёт потребление 5-5.5 гб (httpd).
Периодами происходит скачек и потребление памяти вырастает до 13-14гб памяти и сайт начинает медленно работать, через минут 10 стабилизируется и снова 5гб.

Как вычислить, кто и сколько потребляет памяти, чтобы найти проблемную зону и исправить её?
При максимальной загрузке памяти в 14 гб я вижу следующую картину: обработка запросов слишком медленная, сайт еле работает, отсюда запросы начинают копиться, итого если глянуть на ситуацию спустя 1 минуту - множество маленьких простых запросов Аяксом, но это понятно, что они просто начали копиться и всё. Отсюда причиной роста не эти множество мелких запросов, а другая причина, либо 1 скрипт является не оптимизированным, либо ддосят, либо другой процесс на сервере скушал всё.

У меня свой сервер, есть htop установленный, есть права рута. От того, что есть htop - мне легче не становится, я не знаю как запускать, куда смотреть...

Ах да, 14gb - это потребление httpd, у mysql 2-3gb СТАБИЛЬНО.

_____________
Обучаю веб-программированию качественно и не дорого: http://school-php.com
Фрилансер, принимаю заказы: PHP, JS, AS (видео-чаты). Писать в ЛС (Личные сообщения на phpforum).
glock18
Есть какие-то тяжелые экспорты/репорты в админке?

- Должны быть какие-то скрипты, которые вызывают подозрение в первую очередь.

- Может быть стоит выставить memory_limit значительно меньший чем есть (сейчас -1 что ли? если так, то чревато как раз подобными проблемами). В тестовой среде, конечно. Поскольку на проблемных местах будешь получать Allowed memory size of # bytes exhausted, ну и очевидно найти их станет проще.

- Использование памяти можно попробовать отслеживать при помощи memory_get_usage() более подробно. Еще удобнее будет xdebug для этого

- Пыховый GC просто крайне ужасен. если есть долгоиграющие скрипты, то крайне рекомендуется удалять ссылки все объекты, которые уже не будут использоваться. Это само по себе правда не гарантирует очистку памяти
glock18
Так же это могут быть последствия ддос-атаки, например. По логам надо смотреть сколько запросов в это время, куда, и тд. Если не ддос, то можно попробовать проблемный урл выделить, если такой есть.
inpost
"Еще удобнее будет xdebug для этого"
- Можно настроить, чтобы он собирал потребляемую память скриптами и логировал всё? Если да, то ссылочку можно на этот момент?

memory_limit 128M для всех стоит. Всего процессов одновременных для апача - 400, 100*400 = грубо говоря те же 14гб, но в данном случае должно было быть так, что сразу все скушали столько памяти, что невозможно, потому что проверял частозапрашиваемые страницы, ajax, они представляют из себя 70-75% всех запросов, и они потребляют 1мб памяти.

- Должны быть какие-то скрипты, которые вызывают подозрение в первую очередь.
Каждый второй, по очереди проверяю и убеждаюсь, что они нормально работают. Но проверил пока 1/10 сайта, слишком много скриптов.

"Если не ддос, то можно попробовать проблемный урл выделить, если такой есть."
Глазами анализировать? Там около 20-100 запросов в секунду.

_____________
Обучаю веб-программированию качественно и не дорого: http://school-php.com
Фрилансер, принимаю заказы: PHP, JS, AS (видео-чаты). Писать в ЛС (Личные сообщения на phpforum).
glock18
Цитата (inpost @ 10.06.2013 - 15:12)
- Можно настроить, чтобы он собирал потребляемую память скриптами и логировал всё? Если да, то ссылочку можно на этот момент?


Лог у него есть. Касательно памяти можно попробовать этот патч: http://xdebug.org/archives/xdebug-general/1228.html

Цитата (inpost @ 10.06.2013 - 15:12)
потому что проверял частозапрашиваемые страницы, ajax, они представляют из себя 70-75% всех запросов

если проблема редкая (а она редкая), то дело не в частозапрашиваемых страницах

Цитата (inpost @ 10.06.2013 - 15:12)
"Если не ддос, то можно попробовать проблемный урл выделить, если такой есть."
Глазами анализировать? Там около 20-100 запросов в секунду.


ну, прям, я не знаю. Это должно было придти на ум в первую очередь. Все что нужно - знать примерное время начала этой байды. А дальше глазами или лог аналайзером - дело твое. Урезать при анализе размер лога до нужного момента, и вперед с песней.
glock18
Цитата (inpost @ 10.06.2013 - 15:12)
- Должны быть какие-то скрипты, которые вызывают подозрение в первую очередь.
Каждый второй, по очереди проверяю и убеждаюсь, что они нормально работают. Но проверил пока 1/10 сайта, слишком много скриптов.


То есть совсем ничего не вызывает подозрений? Проблема может иметь природу такую, что не проявится наглядным образом, если на сервер нагрузки помимо этого запроса нет (при локальной проверке, например). Проверять лучше тогда пик потребления памяти memory_get_peak_usage(), и делать замеры memory_get_usage() при более глубоком разборе.
glock18
Цитата (inpost @ 10.06.2013 - 15:12)
memory_limit 128M для всех стоит. Всего процессов одновременных для апача - 400, 100*400 = грубо говоря те же 14гб, но в данном случае должно было быть так, что сразу все скушали столько памяти, что невозможно, потому что проверял частозапрашиваемые страницы, ajax, они представляют из себя 70-75% всех запросов, и они потребляют 1мб памяти.


Если 70-75% потребляют 1мб, то зачем лимит 128м стоит? Естественно за тем, что есть скрипты, которым нужно больше памяти. Их и надо проверять. Особенно те из них, которые более часто запрашиваются.

Есть в проекте места, где делаются http-запросы на сам проект?

PS: Логи апача по-любому придется смотреть
glock18
Цитата (glock18 @ 10.06.2013 - 15:31)
Есть в проекте места, где делаются http-запросы на сам проект?


в смысле, может быть есть какие-то предпосылки для неконтролируемого увеличения кол-ва процессов.

Вот есть несколько советов здесь, может что-то подскажет (если проблема с настройкой сервера):
http://www.webhostingtalk.com/showthread.php?t=969698
alexbel2404
Была подобная проблема, когда дисковая система не справлялась, из-за этого плодились процессы. Решилось установкой nginx перед апачем.
Oyeme
Я пользовался Zabbix
Cистема мониторинга сервера.

http://www.zabbix.com/

Как это выглядит http://www.zabbix.com/screenshots.php wink.gif
Все подробно итд

T1grOK
Apache порой может по непонятным причинам отжирать память, и даже упасть. Nginx пока не подводил.

_____________
Mysql, Postgresql, Redis, Memcached, Unit Testing, CI, Kohana, Yii, Phalcon, Zend Framework, Joomla, Open Cart, Ymaps, VK Api
VELIK505
Запусти просто набери htop в putty и нажми enter сделай скрин полного экрана графика что выдаст а затем тоже самое проделай с командой top и выложи сюда тоже скрин.
Опять же насколько я помню у тебя нету nginx статику и динамику обрабатывает 1 апач, что не есть хорошо. Допустим иногда тот же nginx приняв на себя статику забрав лишнюю работу у апача может скинуть кол-во процессов apache в 5 и более раз соответственно уменьшить нагрузку.
killer8080
Цитата (inpost @ 10.06.2013 - 17:46)
Периодами происходит скачек и потребление памяти вырастает до 13-14гб памяти

проверь не совпадает ли это с запуском кроном каких нибудь тяжелых скриптов, парсеров например. Используй atop, он висит демоном, и ведет логи, в отличии от htop. Если есть возможность поймать момент перегрузки, можно посмотреть какие запросы в этот момент обрабатывает апач, через mod_status
glock18
Цитата (killer8080 @ 12.06.2013 - 08:28)
проверь не совпадает ли это с запуском кроном каких нибудь тяжелых скриптов, парсеров например


Вот я об этом подумал. А крон то разве php не через fast-cgi запускает? httpd то вроде как вообще не задействуется. Или?
killer8080
Цитата (glock18 @ 12.06.2013 - 11:30)
А крон то разве php не через cgi запускает? httpd то вроде как вообще не задействуется. Или?

крон может что угодно делать, он может и wget-ом скрипты дергать smile.gif
Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2024 Invision Power Services, Inc.