我以为这可能是一个 StackOverflow 问题,但我发现这里有人在讨论 Nginx+php5-fpm我的 php-fpm 配置有什么错误?所以我会在这里发帖。其他研究是多次搜索与类似配置的缓慢 wordpress 相关的内容,但在我能找到的所有其他情况下,前端和后端都很慢,而不仅仅是管理员。这是我的规格:
Ubuntu 11.10 上的 Wordpress 3.3 + Nginx 1.0.10 + php5-fpm 5.3.8 +ISPconfig 3.0.4.1+ 256Mb VPS
运行 Zen Cart 商店和 phpbb3,两者都在不同的 php-fpm 池中。除了基本功能外,几乎没有其他功能在运行,这两个站点都运行得飞快。当 W3TC 加速时,Wordpress 站点的前端也一样。
但是...管理员端需要 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 的内存限制,因为我收到“警报 - 脚本试图将 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 文件,我将其发布在这里是因为我根据建议做了更改这里修复 php 仍然发送的损坏的连接 path_info:
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 从套接字更改为端口,然后再改回来,等等。现在真的不知道还能做什么——有人能发现什么或给出建议吗?
最奇怪的是?我在 Amazon S3 上的免费“微型”实例上运行个人 WP 安装,配置类似,运行起来非常顺畅。这让诊断变得更加困难。
是的,我的内存可能有点紧张,但为什么 Zen Cart 和 phpbb 在运行大型数据库时可以在 200ms 内加载页面,而我的 wordpress 安装只有 10 个小页面?还有,回答另一个问题 - 是的,如果我关闭其他网站,速度仍然会很慢。
答案1
没错 - 我花了两天时间学习了很多有关 xdebug 之类的东西,现在我可以回答我自己的问题,并且可以肯定地说,现在您无法在 RAM 小于 512Mb 的 VPS 上运行 Wordpress 3.3 - 即使是全新安装且没有插件。这很遗憾,因为 256Mb VPS 以前一直都很好用。
之前,一切都还好。你还记得我最初的问题中提到过“警告 - 脚本试图将 memory_limit 增加到 268435456 字节,这超过了允许值”这一行吗?
好吧,我还注意到,在命令行实用程序“top”中我没有看到任何内存峰值。但显然,刷新速度不够快。在拥有图形工具的 VPS 主机的帮助下,当 WP 3.3 的 ADMIN 端尝试加载时,我们看到了 228Mb 的突发使用量。但前端呢?好吧,正如我之前所说,它运行得很迅速,甚至几乎没有在他们的图表上显示出来。
这件事发生后不久,我发现了这一点:http://www.dev4press.com/2011/blog/benchmark/wordpress-benchmark-3-0-vs-3-1-vs-3-2-vs-3-3/这证实了我的发现,但并没有显示出相同的内存使用情况。
我暂时换了一个 512Mb RAM VPS,同时决定接下来该做什么,当然,WP 又恢复正常了。但这不是一个经济实惠的长期解决方案。因此,要么尝试恢复,要么考虑另一个 CMS。这很遗憾,因为我已经快乐地使用了 5 年的 Wordpressing。
最后要说的是,为了避免不可避免的“但如今你可以以非常低的价格买到 1Gb RAM VPS”的评论,是的,你可以。而且我在这方面遭受了严重的损失,这就是我对此的全部看法。你付出多少就会得到多少 - 只是 256 比 512 更好...