Как я знаю, использует ли мое приложение PHP слишком много памяти?

Я работаю над веб-приложением PHP, которые позволяют нам пользовательская сеть друг с другом, заказывают события и передают друг друга. Существует только приблизительно 100 пользователей.

Я настроил приложение на VPS с Ubuntu 9.10, apache2, mysql 5 и php 5. Я имел 360 Мбит RAM, но обновил до 720 МБ.

В последнее время мое веб-приложение испытывало отключения электричества из-за чрезмерного использования памяти. Из того, что я могу сказать в журналах ошибок, кажется, что сервер автоматически уничтожает апачские процессы, которые используют слишком много памяти. В результате я обновил память от 360 МБ до 720 МБ как временная мера.

Таким образом, мой вопрос, как я иду о решении этих вопросов отключения электричества? Как я знаю, происходит ли потребность моего веб-сайта в большей памяти из-за плохого кода или если это - часть естественного роста веб-сайта? Что состоит в том, чтобы определить самый эффективный путь, какие Сценарии PHP используют большую часть памяти?

9
задан Eric Leschinski 1 January 2014 в 03:36
поделиться

4 ответа

На этот вопрос нет простого ответа, хотя я подозреваю, что это может быть проблема в вашем коде.

Каков параметр memory_limit в вашем файле php.ini? Обычно я рекомендую не менее 4 МБ, а обычно 16. Сколько одновременных обращений вы выполняете? Сайт делает много тяжелых отчетов по статистике? Или рендеринг изображений через PHP? Вы где-нибудь используете file_get_contents ()?

Вам действительно нужно настроить какое-то пользовательское ведение журнала для отчета для каждого URL, размера файла журнала на выходе. например вы можете автоматически добавить:

<?php
register_shutdown_function('log_mem');

function log_mem()
{
   fputs(STDERR, '[' . date('c') . '] ' . memory_get_usage() . ' ' 
     . $_SERVER["REQUEST_URI"] . "\n");
}

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

HTH

C.

4
ответ дан 4 December 2019 в 22:28
поделиться

Вот инструмент, поддерживающий профилирование PHP: http://xdebug.org/docs/profiler

1
ответ дан 4 December 2019 в 22:28
поделиться

В зависимости от вашей версии httpd и php httpd может удерживать сегменты памяти, которые ему не нужны, и излишне увеличивать размер выполняемого процесса. У меня есть блок, который делает это, и я решил проблему, выполнив перезапуск httpd каждую ночь, например, так:

30 00 * * *     /httpd/sbin/apachectl restart
31 00 * * *     /httpd/sbin/apachectl start
35 00 * * *     /httpd/sbin/apachectl start
40 00 * * *     /httpd/sbin/apachectl start

Как видите, после перезапуска я выполняю 3 конечных запуска, на всякий случай, если apache выйдет из строя чтобы ожить после перезагрузки. 3, наверное, перебор, но, с другой стороны, ничего не повредит, так почему бы и нет.

0
ответ дан 4 December 2019 в 22:28
поделиться

Еще одна вещь, которую вы можете сделать, если размер вашего процесса небольшой, - это уменьшить в настройках httpd минимальное количество резервных серверов, равное 1, и максимальное количество резервных серверов, равное 3. Если у вас всего 100 пользователей, это должно быть нормально, поскольку вам не нужны накладные расходы на запуск процессов только для нескольких пользователей.

3
ответ дан 4 December 2019 в 22:28
поделиться
Другие вопросы по тегам:

Похожие вопросы: