2

(我在这个论坛上搜索了几个小时,找到了一些主题,但没有一个对我有用)

我正在使用Wordpress与:Varnish + Nginx + PHP-FPM + APC + W3 Total Cache + PageSpeed

当我使用 Varnish 时,我第一次调用www.mysite.com时它只使用了 10% 的 CPU。第二次调用,会被缓存。问题是在 URL中传递请求参数。


对于仅 1 个请求 ( www.mysite.com?1=1 ),它显示在top

PID  USER      PR  NI  VIRT  RES  SHR S %CPU %MEM   TIME+  COMMAND
7609 nginx     20   0  438m  41m  28m S 11.6  7.0   0:00.35 php-fpm
7606 nginx     20   0  437m  39m  26m S 10.3  6.7   0:00.31 php-fpm

页面完全加载后,上述这些进程仍然处于活动状态。2 秒后,它们被另外 2 个 php-fpm 进程(下)替换,这些进程活动 3 秒。

PID USER       PR  NI  VIRT  RES  SHR S %CPU %MEM   TIME+  COMMAND
7665 nginx     20   0  444m  47m  28m S 20.9  7.9   0:00.69 php-fpm
7668 nginx     20   0  444m  46m  28m R 20.9  7.9   0:00.63 php-fpm

40% 的 CPU使用率仅用于 1 个未缓存的请求!


奇怪的东西:

  • 页面加载CPU 使用率较高
  • 当我清除缓存(W3 和 Varnish)时,只需10% 的 CPU即可加载未缓存的页面
  • 这种高 CPU 使用率只是在传递请求参数或在Wordpress 管理中发生

当我尝试执行 10 次请求(按 F5 键 10 次)时,服务器停止服务并在 php-fpm 日志中出现:

警告:[pool www] 服务器达到 max_children 设置 (10),考虑提高它

我将该值提高到 20,同样的问题。

我正在使用pm=ondemandpm.max_children=10pm.max_requests=500)。

最初我使用的是pm=dynamic( pm.max_children=10, pm.start_servers=1, pm.min_spare_servers=1, pm.min_spare_servers=2, pm.max_requests=500) 并且发生了同样的问题。

任何人都可以帮忙,好吗?任何帮助,将不胜感激!

PS:

  • APC 开启(98% 命中,2% 未命中)
  • 服务器是Amazon Micro (613MB RAM)
  • PHP 5.3.26 (fpm-fcgi)
  • Linux 版本 3.4.48-45.46.amzn1.x86_64 Red Hat 4.6.3-2(我认为是基于CentOS 5)
4

3 回答 3

4

首先减少缓存的堆栈。当您已经使用从内存提供的 w3 缓存时,为什么还要使用从内存提供页面的清漆?

W3cache 是 CPU 密集型的!它不仅可以缓存项目,还可以即时压缩、缩小和合并文件。

你的机器上总共有 512MB 的内存,这并不多,而且你的 CPU 能力也比现代智能手机少。由于 xen 虚拟化层,与根服务器相比,内存访问非常慢 - 这就是为什么少即是多。

确保 w3cache 设置正确,以便它实际缓存项目,然后预热你的缓存,你应该没问题。

看看谷歌的 nginx pagespeed 模块https://github.com/pagespeed/ngx_pagespeed,它可以做 w3cache 做的同样的事情,只是效率更高,因为它发生在网络服务器中,而不是 PHP

Nginx 也可以直接从 memcached http://www.kingletas.com/2012/08/full-page-cache-with-nginx-and-memcache.html提供服务(示例文章,可能需要更多调查)

于 2013-07-14T09:16:29.193 回答
2

问题解决了!

对于那些有同样问题的人:

  1. 检查清漆配置;

  2. 检查您的 Wordpress 插件;

1)在我的例子中,没有在 Varnish 中配置 TTL,因此没有缓存任何内容。这个配置对我有用:

sub vcl_fetch {
    if (!(req.url ~ "wp-(login|admin)")) {
            unset beresp.http.set-cookie;
            set beresp.ttl = 48h;
    }
}

2) 页面加载后的高 CPU 使用率是由名为“滚动触发框”的 Wordpress 插件引起的。

页面加载后它正在执行一些 AJAX。我禁用了那个插件并且高负载停止了。

于 2013-07-16T20:57:07.267 回答
0

这里有两个因素在起作用:

  1. 您正在使用具有可突增 CPU 配置文件的微型实例。它最多可以爆发 2 个 ECU,然后限制为远小于 1 个(有人估计这在 0.1 - 0.2 个 ECU 左右)

  2. 以管理员身份登录时,wordpress 缓存插件通常会绕过或减少缓存。如果您想一直缓存,W3 应该允许您切换它。

于 2013-07-13T19:21:31.247 回答