Как я могу контролировать загрузку php-скрипта на сервере?

У нас есть сайт на нашем выделенном сервере, который, кажется, вызывает проблемы.

Недавно он разбил наш выделенный сервер – это очень раздражает. Он будет происходить в случайном порядке. Команда технической поддержки в хостинговой компании говорит, что это из-за недостатка памяти. Они увеличили настройку maxclients от apache, но безрезультатно.

Так что последнее, что может быть (мы переместили mysql и изображения с сервера), это то, что где-то есть php-скрипт, который использует чертовски много памяти. Это довольно популярный веб-сайт, а не стандарты стека, конечно, но он относительно популярен.

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

Как я могу определить, какие сценарии используют большую часть памяти?

что это из-за недостатка памяти. Они увеличили максимальную настройку apache

Найдите другого поставщика услуг.

Если у вас недостаточно памяти для обслуживания текущего количества клиентов, то увеличение количества клиентов затруднит проблему.

Прежде всего, проверьте, правильно ли он регистрирует ошибки PHP (т.е. записывает их на веб-сервер error_log). Вы можете проверить это, просто обратившись к (намеренно) плохо написанному сценарию, например

<?php this_fn_does_not_exist(); 

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

Вы также можете добавить код для записи сведений об использовании памяти (например, с помощью скрипта с автоматической подпиской), а не ждать его отказа. Было бы неплохо реализовать это с помощью зарегистрированной функции выключения.

Это должно дать вам некоторые приоритеты для повторного факторинга.

Между тем, как отдельное упражнение, вы должны установить задание cron, чтобы начать регистрировать регистрацию количества процессов httpd и количество свободной памяти, например

 #!/bin/bash t=`date` m=`free | grep '+'` p=`ps aux | grep httpd | wc -l` echo $t $m $p >> /var/log/webload 

Затем нарисуйте результаты, чтобы узнать, сколько клиентов вы можете обслуживать с заданным объемом памяти (NB, поскольку хорошая производительность ввода-вывода зависит от кеширования, то в зависимости от того, какие операции ввода / вывода происходят в вашей системе, вы, вероятно, захотите чтобы ориентироваться на 50% свободной памяти).

Это также обеспечит механизм измерения эффективности вашего рефакторинга.

Увеличение максимальной памяти, доступной для каждого процесса PHP, – это просто вопрос обновления файла php.ini.

Применяйте обычный процесс настройки PHP / веб-сервера – то есть проверяйте кеширование, работа с компрессией оптимально, регистрируйте и анализируйте запросы к базе данных.

NB иногда вам просто нужно больше оборудования.