Administrador do Wordpress em nginx + php5-fpm no VPS incrivelmente lento. Outras aplicações / front end do WP funcionam bem [fechado]

1

Eu pensei que essa poderia ser uma pergunta do StackOverflow, mas achei o Nginx + php5-fpm sendo discutido aqui em O que há de errado na minha configuração do php-fpm? então vou postar aqui. Outra pesquisa feita é várias buscas relacionadas ao wordpress lento com configuração semelhante, mas em todos os outros casos que eu poderia encontrar, era frente e back ends lento, não apenas o admin. Aqui está minha especificação:

Wordpress 3.3 no Ubuntu 11.10 + Nginx 1.0.10 + php5-fpm 5.3.8 + ISPconfig 3.0.4.1 + 256 MB VPS

Registrando também uma loja Zen Cart e phpbb3, ambos em diferentes pools php-fpm. Não há praticamente nada em execução, exceto o essencial e ambos os sites que estão sendo lançados. Assim como o front end do site Wordpress, quando o W3TC acelerou.

MAS .... o lado do administrador leva 6-10 segundos para fazer qualquer coisa. Não há nada no log lento do mysql, ou no log de erros do php-fpm, a carga não dispara e o uso de memória não dispara (mas veja abaixo sobre memória).

A primeira vez que carrega, no wp-admin / options.php mostra uma página muito longa que parece errada, com linha após linha de coisas como ...

active_plugins DADOS SERIALIZADOS

Aqui estão os principais itens de 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
=================================

Aqui está a média de carga praticamente o tempo todo: média de carregamento: 0,48, 0,53, 0,51

E aqui está a saída do free -m

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

Aqui está o nginx.conf, incluindo as configurações real_ip do cloudflare (também experimentadas sem o cloudflare), e também a reescrita necessária para fazer os permalinks funcionarem sob o 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;      
}

Aqui está o conjunto 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

Eu tive que fazer alterações no /etc/php5/conf.d/suhosin.ini como aconselhado pelo phpmyadmin , e também aumentou o limite de memória para WP como eu estava ficando "ALERT - script tentou aumentar memory_limit para 268435456 bytes que está acima do valor permitido".

; 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

Eu reduzi o limite de memória em wp-config.php como mostrado abaixo.

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

Embora, eu tenha alterado esses limites de 256 para 128 para 64 para 32 e isso não faz diferença para as velocidades de frente ou de fundo.

Aqui está o meu arquivo fastcgi_params, que estou postando aqui porque eu fiz uma alteração como recomendado aqui para corrigir o path_info concatenado quebrado que o php ainda está enviando:

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;

Eu mudei o tema para o padrão, desliguei todos os plugins, mudei todas as tabelas do mysql para innodb e segui as recomendações do mysqltuner (embora, como eu disse, não há nada sobre o mysql lento nos logs que eu possa ver) .

Eu tentei alterar o php-fpm do socket para a porta e vice-versa, e assim por diante. Não tenho certeza do que mais fazer agora - alguém pode encontrar alguma coisa aqui ou aconselhar?

A coisa mais estranha de todas? Estou executando uma instalação pessoal do WP em uma instância "minúscula" gratuita no Amazon S3 com uma configuração semelhante e ela voa junto. O que torna ainda mais difícil diagnosticar.

E sim, eu posso estar com um pouco de memória, mas por que o Zen Cart e o phpbb rodando com um grande banco de dados carregam sub 200ms, mas o meu wordpress instala 10 pequenas páginas? E, para responder a outra questão - sim, a lentidão ainda acontece se eu desativar os outros sites.

    
por talkingnews 13.12.2011 / 11:54

1 resposta

1
Bem, dois dias da minha vida e muita aprendizagem sobre coisas como o xdebug, eu posso responder a minha própria pergunta e dizer com segurança que você NÃO PODE agora rodar o Wordpress 3.3 - mesmo uma nova instalação sem plugins - em um VPS com menos de 512Mb de RAM. O que é uma pena, porque o VPS de 256Mb sempre foi perfeitamente bom antes.

Anteriormente, tudo estava bem. Você se lembra da minha pergunta original, eu notei a linha sobre "ALERT - script tentou aumentar memory_limit para 268435456 bytes que está acima do valor permitido"?

Bem, eu também notei que não vi nenhuma memória aparecendo no utilitário de linha de comando "top". Mas claramente, isso não atualiza rápido o suficiente. Com um pouco de ajuda do host VPS que possui ferramentas gráficas, vimos explosões de 228Mb de uso quando o lado ADMIN do WP 3.3 estava tentando carregar. Mas o front end? Bem, como eu disse antes, isso seguiu em frente e mal se registrou em seu gráfico.

Pouco depois disso, achei isso: link que confirma minhas descobertas, mas não mostra exatamente o mesmo uso de memória.

Eu temporariamente mudei para um VPS de RAM de 512Mb enquanto decido o que fazer e, claro, o WP está bem novamente. Mas não é uma solução acessível a longo prazo. Então, você terá que tentar reverter ou procurar outro CMS. O que é uma vergonha, depois de 5 anos de feliz Wordpressing.

Nota final para antecipar o inevitável "mas você pode obter 1Gb RAM VPS muito barato nos dias de hoje" comentário, sim, você pode. E eu fui gravemente queimada dessa maneira e é tudo o que estou dizendo sobre isso. Você recebe o que você paga - apenas que pagar por 256 é preferível a 512 ...

    
por 15.12.2011 / 11:23