Назад | Перейти на главную страницу

PHP медленно загружается на сервере nginx

У меня есть приложение php с 815 тыс. Уникальных пользователей в месяц, которое довольно быстро загружается на мою машину разработчика (около 600 мс для домашней страницы) и используется для быстрой загрузки на производственном сервере.

Я не системный администратор, я просто разработчик, поэтому я начал поиск по диагностике сервера, я следил за этим блок-схема

Хотя в последнее время трафик увеличился, с ресурсами сервера все в порядке.

%Cpu(s):  8.3 us,  2.6 sy,  0.0 ni, 87.1 id,  0.0 wa,  0.0 hi,  0.3 si,  1.7 st

У меня достаточно памяти.

Сузив проблему, я попробовал кое-что, что дало мне интересные результаты, я скопировал исходный код html из своего браузера и вставил его в test.html на производственном сервере, и он загружается менее чем за 800 мс, я беру тот же код html и прошу это test.php, и загрузка занимает около 6 секунд, оба файла используют один и тот же html-код, в файлах не выполняются запросы к базе данных, поэтому я думаю, что это связано с моей конфигурацией nginx или php.

Вот моя конфигурация nginx:

server {
    listen 80;
    server_name site-name.com;
    root /home/user/site-name.com/public;


    index index.html index.htm index.php;

    charset utf-8;

    location / {
        try_files $uri $uri/ /index.php?$query_string;
    }

    location = /favicon.ico { access_log off; log_not_found off; }
    location = /robots.txt  { access_log off; log_not_found off; }

    access_log off;
    error_log  /var/log/nginx/site-name.com-error.log error;

    error_page 404 /index.php;

    location ~ \.php$ {

        try_files $uri =404;
        fastcgi_split_path_info ^(.+\.php)(/.+)$;
        fastcgi_pass unix:/var/run/php/php7.0-fpm.sock;
        fastcgi_index index.php;
        fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
        include fastcgi_params;
    }
    location ~*  \.(jpg|jpeg|png|gif|ico|css|js|woff2)$ {
        expires 365d;
    }


    location ~ /\.ht {
        deny all;
    }
} 

css, изображения, html и js файлы загружаются быстро.

Конфигурация PHP fpm

Я нашел решение, хотя у меня есть доступные серверные ресурсы, но они не использовались, только 5 были максимальным количеством дочерних процессов, которые можно было создать. У меня было много памяти, которая не использовалась. Итак, я отредактировал конфигурацию FPM, в моем случае я отредактировал: /etc/php/7.0/fpm/pool.d/www.conf

Я сделал некоторые подсчеты того, сколько памяти использует каждый процесс и сколько у меня доступно, и изменил эти значения:

pm = ondemand
pm.max_children = 125
pm.start_servers =
pm.min_spare_servers = 15
pm.max_spare_servers = 25

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

Теперь он работает удивительно быстро, самые тяжелые страницы загружаются менее чем за 1 с, а памяти все еще достаточно.