如何判断:是 nginx 还是 PHP-cgi 更慢?

如何判断:是 nginx 还是 PHP-cgi 更慢?

我运营一个流量很大的网站。我使用 nginx 和 php fast-cgi。但是,在浏览器中加载简单的 php 文档时,页面加载需要长达 5-6 秒的时间。有时甚至只会导致“404 未找到”nginx 错误。

在 Debian 上使用“htop”时,我根本用不完服务器的资源。那么到底是怎么回事?是 nginx 吗?还是 PHP-fast-cgi?我不知道瓶颈在哪里。

我的 nginx 配置片段:

用户 www-数据 www-数据;
工作进程2;

事件 {
    工人连接4048;
}


http {
    包括 mime.types;
    默认类型应用程序/八位字节流;
    发送文件;
    #tcp_nopush 开启;
    保持活动超时 10;
    包括/usr/local/nginx/sites-enabled/*;
...
}

我的 fast-cgi 配置片段:

EXEC_AS_USER=www-数据

# FASTCGI-Listener 的主机和 TCP 端口(默认值:localhost:9000)

FCGI_HOST=本地主机
FCGI_PORT=9000

# 环境变量,由 PHP 处理

PHP_FCGI_CHILDREN=8
PHP_FCGI_MAX_REQUESTS=0

非常感谢!!

答案1

多少流量才算很多?以下是一些提示:

  • 尽可能使用缓存
  • 工作进程的数量可以等于 CPU 核心的数量
  • 尽早关闭实时连接或完全禁用它们(尝试一下keepalive_timeout 5
  • 每个连接都需要一个文件句柄worker_rlimit_nofile 20000;
  • 1 秒内可以服务的用户总数(大约)= worker_processes * worker_connections/ (keepalive_timeout * 2)
  • 禁用访问日志,除非你真的需要它们
  • 使用平衡器(如果一台服务器不可行)

答案2

让服务器安静下来,对所有 php 和 nginx 进程进行 strace 操作,尝试一个请求并观察它在哪里等待。

或者,寻找一个 php 的分析工具并用它收集一些数据。

答案3

  1. 尝试将 FastCGI 配置为 unix 套接字而不是 internet 套接字。在某些情况下,这可以节省高达 20% 的时间。
  2. 您可以将 worker_processes 推高至可用核心的数量。
  3. 检查你的 php-fpm 配置,因为它有足够的选项来:
    • 终止运行时间非常长的请求;
    • 关于长期运行请求的报告。
  4. 将 PHP_FCGI_MAX_REQUESTS 更改为相关值,例如 1000。以防内存损坏的情况。

相关内容