VPS 上 nginx+php5-fpm 上的 Wordpress 管理员速度非常慢。其他应用程序/WP 前端运行良好

VPS 上 nginx+php5-fpm 上的 Wordpress 管理员速度非常慢。其他应用程序/WP 前端运行良好

我以为这可能是一个 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 更好...

相关内容