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.