Многие сталкиваются с довольно сложной проблемой — определить какой скрипт на вашем сайте (хостинге) потребляет слишком много выделенной памяти.
В этой статье я приведу пример того как можно без особых сложностей определить какой скрипт съедает много памяти.
Итак, для начала опишу принцип:
Мы будем определять количество выделенной памяти до выполнения скрипта и после. Для этого будем использовать функцию memory_get_peak_usage(true)
Для этого создадим файл:
mem_log_past.php
// Получаем сколько памяти выделено когда скрипт отработал
$AllocMem = round(mmemory_get_peak_usage(true)/1024);
// Если больше 3000 кб, то логируем.
if ($AllocMem>3000)
{
$dtm=date(‘Y-m-d’);
// Путь к файлу лога
$fn=’/home/user/logs/mem-‘.$dtm.’.log’;
$txt=»
Перерасход памяти: «.($AllocMem).» Kb
Скрипт: «.$_SERVER[‘SCRIPT_FILENAME’].»
Ссылка: «.$_SERVER[‘REQUEST_URI’].»
«;
file_put_contents($fn,$txt,FILE_APPEND);
}
Этот файлы должен использоваться после выполнения скрипта.
Сделать это просто с помощью переменной в php.ini:
auto_append_file =/home/user/logs/mem_log_past.php
Если у вас нет доступа к php.ini, то вы можете прописать её в файле .htaccess вашего сайта:
php_value auto_append_file «/home/user/logs/mem_log_past.php»
На этом всё:
Теперь в папке /home/user/logs/ будут создаваться файлы с описанием где и на сколько превышен лимит памяти.
Кроме этого в исходном коде страниц вашего сайта, пролистав код в самый низ, вы увидите сколько памяти потрачено на генерацию текущей страницы.