Есть несколько методов решения поставленной задачи — запротоколировать объем потребления памяти при исполнении PHP скрипта.
Первый мы рассмотрим в этой статье.
Данный способ позволяет фиксировать в лог файл потребление памяти PHP, не внося изменения в ваш основной скрипт.
Будем определять количество выделенной памяти до и после выполнения скрипта. Для этой цели используем функцию memory_get_peak_usage(true)
Принцип таков:
Создадим файл:
mem_log_past.php
// Получаем сколько памяти выделено когда скрипт отработал $AllocMem = round( memory_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']."\n"; 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/ будут создаваться логи, описывающие превышение лимита памяти.
Кроме этого в исходном коде страниц вашего сайта, пролистав код в самый низ, вы увидите сколько памяти потрачено на генерацию текущей страницы.