Если вы старый PHP программист, вы должны были использовать в PHP error_log функцию некоторое время. Но сама по себе PHP не предоставляет способ выяснить , медленно выполнения сценариев. Медленные сценарии не являются те ,которые нарушают ваш сайт , но они замедляют вниз все. Использование FPM, мы можем иметь slow_log для всех таких сценариев. Давайте посмотрим , как использовать эти журналы для отладки PHP скриптов. Кроме того , мы увидим , как в PHP
error_log
получает перенаправляются , если он работает за FPM и Nginx.
Настройка slow_log для PHP скриптов
Открыть ... ВИМ /etc/php5/fpm/pool.d/www.conf
Внесите необходимые изменения , чтобы соответствовать следующие значения:
slowlog = /var/log/php5/slow.log request_slowlog_timeout = 10s
Вы можете заменить 10s с любым другим значением. Это поможет нам найти скрипты, которые выполняют медленно. изменение размеров изображения функция, сеть I / O соответствующие функции некоторые примеры, которые будут часто показывать-вверх в PHP slow_log. Его до вас, чтобы отладить их или игнорировать их, основываясь на вашем контексте.
Настройка error_log для PHP скриптов
При запуске PHP с помощью FPM, мы можем переопределить любые php.ini настройки из FPM. Открыть ... ВИМ /etc/php5/fpm/pool.d/www.conf
Прокрутка вниз к нижней части и раскомментируйте / изменение следующих 3 -х линий , чтобы соответствовать значениям , приведенным ниже:
php_admin_value [error_log] = /var/log/php5/error.log php_admin_flag [log_errors] = на
Обратите внимание , что включение display_errors
может привести к поломке приложений Ajax-приложений. Так что будьте очень осторожны с этим.
Важное значение для Nginx пользователей
Вы не увидите файл /var/log/php5/error.log
или нет какая - либо ошибка регистрируется , в этом файле. Ошибки в ваших скриптах для сайта будет идти вerror_log
указанный для этого сайта в его Nginx конфигурации. Скорее всего: /var/www/example.com/logs/error.log
Если вы не указали файл
error_log
путь для вашего сайта, то ошибки PHP будет перейти по умолчанию error_log Nginx в. Скорее всего /var/log/nginx/error.log
файл) Вы можете найти более подробную информацию здесь об отладке с Nginx .
Настройка FPM error_log для отладки самого FPM
FPM это отдельный процесс. Как и другие, он может работать в себя ошибки! Error_log FPM находится по умолчанию , но мы изменим свой путь , чтобы удовлетворить наше соглашение. Открыть ... ВИМ /etc/php5/fpm/php-fpm.conf
Убедитесь , что error_log
значение выглядит , как показано ниже
error_log = /var/log/php5/fpm.log
Обратите внимание , что эта error_log не связана с PHP в error_log
функции ,описанной ранее.
Подтвердите изменения ...
Создание каталога журнала php5 поэтому мы можем иметь все PHP журналы в одном месте:
MkDir / Var / Журнал / php5 /
Перезагрузка PHP-FPM для изменения вступили в силу ...
служба php5-FPM перезагрузка
Файл журнала мониторинга
Лучший способ открыть отдельную оболочку на вашем сервере и использовать хвост -f
команду для мониторинга журналов ... Об этом говорит сайт https://intellect.icu . Как у нас есть несколько файлов журналов для мониторинга, вы можете просто использовать следующую команду , чтобы контролировать их все вместе ...
Tail -f /var/log/php5/*.log
slow_log
помог нам много раз , чтобы исключить из наших узких применений.
Всегда помните , чтобы выключить его , когда вы закончите с отладкой. Оставляяslow_log
на это не очень хорошая идея.
Анализируем php-fpm.slow.log
Дабы не покрывать весь код каким-то Benchmark'ом для выявления узких мест можно воспользоваться замечательной возможностью логирования php-fpm, который будет дампить скрипты, выполнявшиеся больше N секунд. Включается это чудо в php-fpm.conf.
Что же делать?
В первую очередь, следует найти и исправить код в тех местах, где проблема возникает чаще всего. В этом нам поможет нижеследующий пример.
//чтобы отсечь лишнее, подбирается под конкретные задачи анализа лога, список функций легко определить на глаз при открытии файла лога
$functions=array(
"mysql_query",
"session_start",
);
//функция очищения пути к файлу
function clear_path($path)
{
return str_replace("/home/","",$path);
}
//открываем и парсим лог
$f=fopen("/path/to/php-fpm.log.slow.1","r");
if ($f)
while (($row=fgets($f,4096))!==false)
{
foreach ($functions as $function)
if (strpos($row,$function)!==false)
{
$path=explode(" ",$row);
$path=array_pop($path);
$path=explode(":",$path);
$result[clear_path($path[0])][trim($path[1])]++;
}
}
print_r($result);
На выходе мы получаем массив, ключами которого является путь до проблемного файла, а значениями — второй массив, ключами которого является строка в файле, значением — количество выполнений более N секунд.
Array
(
[/path/to/script1.php] => Array
(
[7] => 9
)
[/path/to/script2.php] => Array
(
[64] => 5
)
[/path/to/script3.php] => Array
(
[375] => 1
[468] => 39
[358] => 1
[391] => 5
[249] => 1
[154] => 2
)
)
Далее каждый уже для себя может настроить вывод в более приятной для глаза форме.
Что еще следует знать
В новом формате php-fpm.slow.log так же присутствует возможность просмотра параметров, переданных скрипту, приводится само время выполнения.
script_filename = /data/www/forum.php mod=rss&fid=3378&auth=0 (0.550162 sec)
Произведя несложную модификацию примера, а именно — добавив обработку строки с script_filename, можно получить немного больше информации для отладки.
Заключение
После решения проблем, выявленных при помощи этого анализа, вероятнее всего, Ваш сервер снова будет радовать своих посетителей безупречной работой, а Вам останется лишь иногда поглядывать в slow.log для собственного спокойствия.
Комментарии
Оставить комментарий
Выполнение скриптов на стороне сервера PHP (LAMP) NodeJS (Backend)
Термины: Выполнение скриптов на стороне сервера PHP (LAMP) NodeJS (Backend)