我有一个高负载动态 PHP Web 服务,最近我将其从 Apache2 迁移到 Nginx 和 PHP-FPM。我发现自迁移以来,平均请求延迟已从 0.5 秒增加到 1 秒。
我不确定系统的瓶颈在哪里,我一直希望降低平均延迟,但我知道我的机器没有:
- 受 CPU 限制
- 受内存容量限制
- 受磁盘 IO 限制
- 受网络 IO 限制
Nginx 通过单个 unix 套接字将请求转发到 PHP-FPM。
- 瓶颈是否可能是内存带宽?
- 有没有什么方法可以监视unix套接字的状态?
- 拥有一个 unix 套接字池并在它们之间进行负载平衡会更好吗?
这是我的 nginx.conf 文件的一部分:
worker_processes 2; # one for each processor
worker_rlimit_nofile 65536;
...
fastcgi_buffers 256 16k;
fastcgi_buffer_size 32k;
fastcgi_max_temp_file_size 0;
proxy_buffer_size 32k;
proxy_buffers 4 32k;
proxy_busy_buffers_size 32k;
和我的 php-fpm.conf
listen = /var/run/php5-fpm.sock
listen.backlog = 2048
pm = static
pm.max_children = 64
有什么突出的异常或错误之处吗?
答案1
使用单个插座应该就可以了。
需要检查以下几件事:
每个进程的最大文件句柄数是多少?
ulimit -n
增加这个值可能会对你有帮助。在 php-fpm 中启用日志记录,以查看请求所花费的时间。在 pool.d/www.conf 中:
access.format = %R - %u %t "%m %r%Q%q" %s %f %{mili}d %{kilo}M %C%%
使用状态模块查看 nginx 内部发生的情况:http://wiki.nginx.org/HttpStubStatusModule