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

Админ Wordpress на nginx + php5-fpm на VPS невероятно медленный. Другие приложения / интерфейс WP работают нормально

Я подумал, что это может быть вопрос StackOverflow, но обнаружил, что Nginx + php5-fpm обсуждается здесь на Что не так в моей конфигурации php-fpm? так что я отправлю здесь. Другое проведенное исследование - это несколько поисков, связанных с медленным wordpress с аналогичной конфигурацией, но во всех других случаях, которые я мог найти, это был медленный передний И задний конец, а не только администратор. Вот моя спецификация:

Wordpress 3.3 на Ubuntu 11.10 + Nginx 1.0.10 + php5-fpm 5.3.8 + ISPconfig 3.0.4.1 + 256 МБ VPS

Запуск магазина Zen Cart и phpbb3 в разных пулах php-fpm. Там почти ничего не работает, кроме самого необходимого, и оба эти сайта абсолютно стремительно развиваются. Как и внешний интерфейс сайта Wordpress, когда W3TC ускорился.

НО .... админке требуется 6-10 секунд, чтобы что-либо сделать. Нет ничего в журнале медленной работы mysql или журнале ошибок php-fpm, нагрузка не увеличивается, и использование памяти не увеличивается (но о памяти см. Ниже).

При первой загрузке в wp-admin / options.php он показывает очень длинную страницу, которая выглядит неправильно, со строкой за строкой вроде ...

active_plugins СЕРИАЛИЗИРОВАННЫЕ ДАННЫЕ

Вот основные элементы из ps_mem.py

732.0 KiB +  87.5 KiB = 819.5 KiB       bash
  2.1 MiB + 369.0 KiB =   2.4 MiB       fail2ban-server
  1.8 MiB +   2.0 MiB =   3.9 MiB       nginx (5)
  5.1 MiB +  12.8 MiB =  17.9 MiB       php5-fpm (29)
 87.8 MiB + 149.0 KiB =  88.0 MiB       mysqld
---------------------------------
                        116.2 MiB
=================================

Вот средняя нагрузка почти всегда: средняя нагрузка: 0,48, 0,53, 0,51

А вот результат free -m

             total       used       free     shared    buffers     cached
Mem:           241        202         38          0          3         49
-/+ buffers/cache:        149         92
Swap:          511         29        482

Вот nginx.conf, включая настройки cloudflare real_ip (тоже пробовал без cloudflare), а также изменения, необходимые для работы постоянных ссылок под nginx:

server {
        listen 31.172.x.x:80;


        server_name mysite.co.uk www.mysite.co.uk www.my-site.co.uk my-site.co.uk;

        root   /var/www/mysite.co.uk/web;

        index index.html index.htm index.php index.cgi index.pl index.xhtml;

        error_page 400 /error/400.html;
        error_page 401 /error/401.html;
        error_page 403 /error/403.html;
        error_page 404 /error/404.html;
        error_page 405 /error/405.html;
        error_page 500 /error/500.html;
        error_page 502 /error/502.html;
        error_page 503 /error/503.html;

        error_log /var/log/ispconfig/httpd/mysite.co.uk/error.log;
        access_log /var/log/ispconfig/httpd/mysite.co.uk/access.log combined;

        ## Disable .htaccess and other hidden files
        location ~ /\. {
            deny all;
            access_log off;
            log_not_found off;
        }

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

        location = /robots.txt {
            allow all;
            log_not_found off;
            access_log off;
        }

        location /stats {
            index index.html index.php;
            auth_basic "Members Only";
            auth_basic_user_file /var/www/clients/client3/web9/.htpasswd_stats;
        }

        location ~ \.php$ {
            try_files $uri =404;
            include /etc/nginx/fastcgi_params;
            fastcgi_pass unix:/var/lib/php5-fpm/web9.sock;
            fastcgi_index index.php;
            fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
            fastcgi_param PATH_INFO $fastcgi_script_name;
            fastcgi_intercept_errors on;
        }

         set_real_ip_from   204.93.240.0/24;
          set_real_ip_from   204.93.177.0/24;
          set_real_ip_from   199.27.128.0/21;
          set_real_ip_from   173.245.48.0/20;
          set_real_ip_from   103.22.200.0/22;
          set_real_ip_from   141.101.64.0/18;
          set_real_ip_from   108.162.192.0/18;
          real_ip_header     CF-Connecting-IP;
        client_max_body_size 28M;
        client_body_buffer_size 128k;

        if (!-e $request_filename) {
                rewrite  ^(.*)$  /index.php?q=$1  last;
                break;
            }
        #include /var/www/mysite.co.uk/web/nginx.conf;      
}

Вот пул php5-fpm

[web9]

listen = /var/lib/php5-fpm/web9.sock
listen.owner = web9
listen.group = client3
listen.mode = 0660

user = web9
group = client3

pm = dynamic
pm.max_children = 4
pm.start_servers = 1
pm.min_spare_servers = 1
pm.max_spare_servers = 2

chdir = /

php_admin_value[open_basedir] = /var/www/clients/client3/web9/web:/var/www/clients/client3/web9/tmp:/var/www/mysite.co.uk/web:/srv/www/mysite.co.uk/web:/usr/share/php5:/tmp:/usr/share/phpmyadmin:/etc/phpmyadmin:/var/lib/phpmyadmin
php_admin_value[session.save_path] = /var/www/clients/client3/web9/tmp
php_admin_value[upload_tmp_dir] = /var/www/clients/client3/web9/tmp

php_admin_value[date.timezone] = "UTC"
php_admin_value[post_max_size] = 28M
php_admin_value[session.gc_maxlifetime] = 604800
php_admin_value[upload_max_filesize] = 28M
php_admin_flag[display_errors] = off
php_admin_flag[display_startup_errors] = off
php_admin_flag[log_errors] = off
php_admin_flag[ignore_repeated_errors] = off
php_admin_flag[ignore_repeated_source] = off
php_admin_value[memory_limit] = 32M

Мне пришлось внести изменения в /etc/php5/conf.d/suhosin.ini как посоветовал phpmyadmin, а также увеличил лимит памяти для WP, поскольку я получал «ALERT - скрипт пытался увеличить memory_limit до 268435456 байт, что превышает допустимое значение».

; configuration for php suhosin module
extension=suhosin.so
suhosin.executor.include.whitelist="phar"
suhosin.request.max_vars=2048
suhosin.post.max_vars=2048
suhosin.request.max_array_index_length=256
suhosin.post.max_array_index_length=256
suhosin.request.max_totalname_length=8192
suhosin.post.max_totalname_length=8192
suhosin.get.max_value_length=1024
suhosin.memory_limit=128M

Я уменьшил ограничение памяти в wp-config.php, как показано ниже.

define('WP_MEMORY_LIMIT', '32M');
define('WP_MAX_MEMORY_LIMIT', '32M');

Хотя я изменил эти ограничения с 256 на 128 до 64 на 32, и это НЕ имеет значения для начальной или конечной скорости.

Вот мой файл fastcgi_params, который я публикую здесь, потому что я внес изменения в соответствии с рекомендациями Вот чтобы исправить сломанный конкатенированный path_info, который все еще отправляет php:

fastcgi_param   QUERY_STRING            $query_string;  
fastcgi_param   REQUEST_METHOD          $request_method;
fastcgi_param   CONTENT_TYPE            $content_type;
fastcgi_param   CONTENT_LENGTH          $content_length;
fastcgi_param CONTENT_LENGTH $content_length;

fastcgi_param REQUEST_URI $request_uri;
fastcgi_param DOCUMENT_ROOT $document_root;
# fastcgi_param DOCUMENT_URI $document_uri;
fastcgi_param SERVER_PROTOCOL $server_protocol;

fastcgi_param GATEWAY_INTERFACE CGI/1.1;
fastcgi_param SERVER_SOFTWARE nginx/$nginx_version;

fastcgi_param REMOTE_ADDR $remote_addr;
fastcgi_param REMOTE_PORT $remote_port;
fastcgi_param SERVER_ADDR $server_addr;
fastcgi_param SERVER_PORT $server_port;
fastcgi_param SERVER_NAME $server_name;

# PHP only, required if PHP was built with --enable-force-cgi-redirect
fastcgi_param REDIRECT_STATUS 200;

fastcgi_split_path_info ^((?U).+\.php)(/?.+)$;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
fastcgi_param PATH_INFO $fastcgi_path_info;
fastcgi_param PATH_TRANSLATED $document_root$fastcgi_path_info;

fastcgi_param SCRIPT_URL $script_url;
fastcgi_param SCRIPT_URI $scheme://$http_host$script_url;

# fastcgi_param SCRIPT_FILENAME $document_root$script_filename;

# fastcgi_param PATH_INFO $path_info;
# fastcgi_param PATH_TRANSLATED $document_root$path_info;

#try_files $fastcgi_script_name =404;

Я изменил тему по умолчанию, отключил все плагины, изменил все таблицы mysql на innodb и выполнил рекомендации mysqltuner (хотя, как я уже сказал, в журналах нет ничего о медленном mysql).

Я пробовал менять php-fpm с сокета на порт и обратно, и так далее и тому подобное. Не совсем уверен, что еще делать сейчас - может ли кто-нибудь здесь что-нибудь заметить или посоветовать?

Самое странное из всех? Я запускаю персональную установку WP на бесплатном «крошечном» экземпляре на Amazon S3 с аналогичной конфигурацией, и она летает. Это делает диагностику еще более сложной.

И да, у меня может быть мало памяти, но тогда почему Zen Cart и phpbb работают с большими страницами загрузки базы данных менее 200 мс, а моя установка WordPress - это 10 маленьких страниц? И, чтобы ответить на другой вопрос - да, медлительность все равно будет, если я отключу другие сайты.

Правильно - два дня моей жизни и чертовски много знаний о таких вещах, как xdebug, я могу ответить на свой вопрос и с уверенностью сказать, что вы НЕ МОЖЕТЕ запустить Wordpress 3.3 - даже новую свежую установку без плагинов - на VPS с меньшими затратами. чем 512 МБ ОЗУ. Это позор, потому что VPS на 256 Мб раньше всегда был идеальным.

Раньше все было нормально. Вы помните, в моем первоначальном вопросе я заметил строку о «ALERT - скрипт пытался увеличить memory_limit до 268435456 байт, что превышает допустимое значение»?

Ну, я также заметил, что я не заметил всплесков памяти в утилите командной строки "top". Но очевидно, что это не обновляется достаточно быстро. С небольшой помощью хоста VPS, у которого есть графические инструменты, мы наблюдали всплески использования 228 МБ, когда сторона ADMIN WP 3.3 пыталась загрузить. Но передняя часть? Ну, как я уже сказал, это быстро продвинулось и даже не зарегистрировалось на их графике.

Вскоре после этого я обнаружил следующее: http://www.dev4press.com/2011/blog/benchmark/wordpress-benchmark-3-0-vs-3-1-vs-3-2-vs-3-3/ что подтверждает мои выводы, но не совсем показывает такое же использование памяти.

Я временно перешел на VPS с ОЗУ 512 МБ, пока решаю, что делать, и, конечно же, с WP снова все в порядке. Но это не доступное долгосрочное решение. Так что придется либо попробовать вернуться, либо посмотреть другую CMS. Что жаль, после 5 лет счастливой работы с Wordpressing.

Последнее замечание, чтобы предупредить неизбежное: «В наши дни вы можете получить 1 Гб RAM VPS очень дешево», да, вы можете. И я так сильно обгорел, и это все, что я говорю по этому поводу. Вы получаете то, за что платите - просто платить за 256 предпочтительнее, чем за 512 ...