如何识别 Debian/Ubuntu nginx + php5-fpm 设置中的瓶颈

如何识别 Debian/Ubuntu nginx + php5-fpm 设置中的瓶颈

我希望得到有关可能导致以下情况的任何提示或想法。

该网站位于 Debian 服务器上,配备 nginx 1.6.2、php5 到 fpm。

对页面的 GET 请求应该会从服务器上的几个请求文件生成一个相当大的 ZIP 存档。这是一个资源要求很高的操作,大约需要 30 秒(假设)并消耗 ~500+MiB 的内存。

现在,如果客户端在该操作期间尝试打开另一个页面,PHP 的会话处理将对该页面的打开施加延迟,直到第一个 GET 请求完成。到目前为止,所有这些都在我的理解范围内。

但是:如果客户端(坚持)多次刷新浏览器(5-8 次),服务器将不会响应任何用户,而不仅仅是坚持的用户。这让我很烦,因为 nginx 配置设置为 2 worker_processes,每个 1024 worker_connections,这应该至少为我提供大约 1000 个连接,然后服务器就会崩溃。

Top 命令显示 CPU 负载很小。

请赐教。

答案1

看起来 PHP 的子节点已经用完了。对于你的情况,请尝试编辑:

/etc/php5/fpm/pool.d/www.conf

查找pm.max_children = 5并将其更改为更高的值(10 或更大)

您还可以检查php_admin_value[memory_limit] = 32M (每个孩子允许的最大内存消耗)

删除注释并将值更改为适合您设置的值。

答案2

<卡住的记录>

你需要科学、有条理地处理这个问题。特别是科学 方法是你的朋友。

  • 安装监控
  • 收集资料
  • 分析数据
  • 根据分析做出改变
  • 监视更改Monitor changes
  • 文档

必要时重复

</卡住记录>

答案3

我猜测是 CPU 耗尽了。你用过“top”来解决这个问题吗?

Nginx 允许你使用以下方式实施速率限制速率限制模块。有一个关于如何做到这一点的教程这里,但我认为它更多的是在资源层面而不是 IP 层面。此块应该限制请求和连接,这对您来说更合适 - 代码来自本网站

http {
  ...
  limit_conn_zone $binary_remote_addr zone=alpha:8m;
  limit_req_zone  $binary_remote_addr zone=delta:8m rate=30r/s;
  ...

  server {
    ...
    limit_conn alpha 5;
    limit_req  zone=delta burst=80 nodelay;
    ...
  }
}

相关内容