Анализ медленного выполнения скриптов php

Лекция



Привет, Вы узнаете о том , что такое php анализ медленного выполнения скриптов, Разберем основные их виды и особенности использования. Еще будет много подробных примеров и описаний. Для того чтобы лучше понимать что такое php анализ медленного выполнения скриптов, методы оптимизации , настоятельно рекомендую прочитать все из категории Выполнение скриптов на стороне сервера PHP (LAMP) NodeJS (Backend) .

Медленная работа PHP-скриптов — одна из самых распространенных проблем в веб-разработке. Она влияет на скорость загрузки страниц, пользовательский опыт и даже SEO. Чтобы эффективно решать эту проблему, важно не только находить «узкие места», но и понимать причины их возникновения.

Основные причины замедления PHP-скриптов

  1. Неоптимальные запросы к базе данных
    • Частые или дублирующиеся запросы
    • Отсутствие индексов
    • Использование SELECT * вместо выборки нужных полей
    • N+1 проблема (много мелких запросов вместо одного)
  2. Избыточные вычисления
    • Повторные расчеты одних и тех же данных
    • Отсутствие кеширования результатов
  3. Работа с файлами
    • Частое чтение/запись на диск
    • Отсутствие буферизации
  4. Подключение большого количества файлов
    • Много include/require
    • Отсутствие автозагрузки (autoload)
  5. Низкая эффективность алгоритмов
    • Использование неоптимальных структур данных
    • Лишние циклы и вложенные операции
  6. Сетевые задержки
    • Внешние API-запросы
    • Медленные сторонние сервисы

Анализ медленного выполнения скриптов php

Отладка PHP скриптов с использованием slow_log

Если вы опытный 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 конфигурации. Об этом говорит сайт https://intellect.icu . Скорее всего: /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 команду для мониторинга журналов ... Как у нас есть несколько файлов журналов для мониторинга, вы можете просто использовать следующую команду , чтобы контролировать их все вместе ...

Tail -f /var/log/php5/*.log

slow_log помог нам много раз , чтобы исключить из наших узких применений.

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

Анализируем php-fpm.slow.log

Итак, настал тот день когда Вы или Ваш коллега, наконец-то, запустили серьезный проект, будь то портал/социальная сеть/игра для социалок. Но, как всегда внезапно, проект начинает тормозить. В чем же дело? Ведь и база настроена как надо, и кеш используется, даже nginx с акселератором PHP кода трудятся в поте лица.

Дабы не покрывать весь код каким-то 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 )][trim($path )]++;
}
}
print_r($result);

На выходе мы получаем массив, ключами которого является путь до проблемного файла, а значениями — второй массив, ключами которого является строка в файле, значением — количество выполнений более N секунд.

Array
(
[/path/to/script1.php] => Array
(
=> 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, можно получить немного больше информации для отладки.

Инструменты для анализа производительности

1. Встроенные средства PHP

  • microtime()

    $start = microtime(true);
    
    // код
    
    $end = microtime(true);
    echo $end - $start;

    Позволяет измерить время выполнения отдельных участков кода.

2. Профилировщики

  • Xdebug
    • Один из самых мощных инструментов
    • Позволяет:
      • анализировать время выполнения функций
      • смотреть стек вызовов
      • находить «узкие места»
  • Blackfire
    • Удобный визуальный профилировщик
    • Показывает граф вызовов и нагрузку
  • Tideways / XHProf
    • Легкие профилировщики для production

3. Логирование

  • Запись времени выполнения в лог:

    error_log("Script executed in: " . ($end - $start));
  • Анализ медленных запросов

Подход к анализу

  1. Измерение
    • Определите, где именно возникает задержка
    • Разделите код на блоки и замерьте каждый
  2. Локализация проблемы
    • База данных?
    • Внешние API?
    • Логика PHP?
  3. Анализ данных профилировщика
    • Какие функции выполняются дольше всего?
    • Сколько раз они вызываются?
  4. Оптимизация
    • Уменьшение количества операций
    • Кеширование
    • Улучшение алгоритмов

методы оптимизации

1. Кеширование

  • OPcache (встроенный кеш PHP)
  • Кеш данных (Redis, Memcached)

2. Оптимизация БД

  • Добавление индексов
  • Использование JOIN вместо множества запросов
  • Кеширование результатов

3. Минимизация подключений

  • Использование autoload (PSR-4)
  • Удаление лишних include

4. Асинхронность

  • Очереди задач (RabbitMQ, Redis queues)
  • Отложенные операции

5. Оптимизация кода

  • Упрощение логики
  • Использование встроенных функций PHP (они быстрее)

Практический пример

Плохо:

foreach ($users as $user) {
$orders = getOrdersByUser($user['id']);
}

Хорошо:

$userIds = array_column($users, 'id');
$orders = getOrdersByUserIds($userIds);

Уменьшение количества запросов к базе данных.

Заключение

Анализ медленного выполнения PHP-скриптов — это системный процесс:

  • Сначала измеряем
  • Затем находим узкие места
  • После — оптимизируем

Главное правило: не оптимизировать вслепую. Используйте профилировщики и реальные данные, чтобы сосредоточиться на действительно проблемных участках.

После решения проблем, выявленных при помощи этого анализа, вероятнее всего, Ваш сервер снова будет радовать своих посетителей безупречной работой, а Вам останется лишь иногда поглядывать в slow.log для собственного спокойствия.

В заключение, эта статья об php анализ медленного выполнения скриптов подчеркивает важность того что вы тут, расширяете ваше сознание, знания, навыки и умения. Надеюсь, что теперь ты понял что такое php анализ медленного выполнения скриптов, методы оптимизации и для чего все это нужно, а если не понял, или есть замечания, то не стесняйся, пиши или спрашивай в комментариях, с удовольствием отвечу. Для того чтобы глубже понять настоятельно рекомендую изучить всю информацию из категории Выполнение скриптов на стороне сервера PHP (LAMP) NodeJS (Backend)

создано: 2016-03-01
обновлено: 2026-05-12
579



Помог ли вам этот ответ?
Нажмите оценку и напишите коротко почему. Так мы сможем сделать следующие ответы точнее и полезнее.
Насколько вы довольны ответом?
Ваш отзыв напрямую влияет на качество следующих подсказок и ответов.


Поделиться:
Пожаловаться

Найди готовое или заработай

С нашими удобными сервисами без комиссии*

Как это работает? | Узнать цену?

Найти исполнителя
$0 / весь год.
  • У вас есть задание, но нет времени его делать
  • Вы хотите найти профессионала для выполнения задания
  • Возможно применение функции гаранта на сделку
  • Приоритетная поддержка
  • идеально подходит для студентов, у которых нет времени для решения заданий
Готовое решение
$0 / весь год.
  • Вы можете продать (как исполнитель) или купить (как заказчик) готовое решение
  • Вам предоставят готовое решение
  • Будет предоставлено в минимальные сроки т.к. задание уже готовое
  • Вы получите базовую гарантию 8 дней
  • Вы можете заработать на материалах
  • подходит как для студентов так и для преподавателей
Я исполнитель
$0 / весь год.
  • Вы профессионал своего дела
  • У вас есть опыт и желание зарабатывать
  • Вы хотите помочь в решении задач или написании работ
  • Возможно применение функции гаранта на сделку
  • подходит для опытных студентов так и для преподавателей

Комментарии

Оставить комментарий

Если у вас есть какое-либо предложение, идея, благодарность или комментарий, не стесняйтесь писать. Мы очень ценим отзывы и рады услышать ваше мнение.
To reply

Лекции и учебник по "Выполнение скриптов на стороне сервера PHP (LAMP) NodeJS (Backend) "

Термины: Выполнение скриптов на стороне сервера PHP (LAMP) NodeJS (Backend)