首先让我解释一下这种情况,我有一台64 GB RAM的服务器。 20核心40GB(SSD)。我有大约2000个并发用户
1周前,我使用apache和php 7但是cpu有80%有时高达101%,这是因为在从apache转移到Nginx,MySql到MongoDB之后,巨大的sql插入了。 cpu约为8%。
我现在的问题是Nginx多次返回502错误的网关响应,我找了一些答案,但没有任何帮助我,但当我将fpm socket更改为端口listen = /var/run/php5-fpm.sock
到listen = 127.0.0.1:9000
ngnix总是返回502,我无法弄清楚是什么问题。
答案 0 :(得分:0)
您的服务器功能强大,足以每天处理> 500 000 申请(如果明白的话)。
问题是因为PHP-FPM不能让更多子进程处理更多请求。
在apache中,它会自动从额外的apache进程开始。
但是Nginx + PHP-FPM为您提供了如何处理这种情况的自由。
只需更改您的fpm池conf:/etc/php/php-fpm.d/www.conf
(或您使用的任何内容)
确保它包含以下内容:
pm = static
pm.max_children = 4096
pm.process_idle_timeout = 10s
pm.max_requests = 32
然后重启php fpm
还要修改nginx.conf
并确保其中包含此字段:
user http;
worker_processes auto;
events {
worker_connections 4096;
multi_accept on;
use epoll;
}
附:不要将listen属性更改为ip:port
- 套接字更快,因为ip:port
它通过ip和端口创建网络连接,但是在套接字版本中它只是打开.sock" file&# 34 ;.
附:不要更改fastcgi_buffers
和etc指令,它不会修复错误的网关问题,因为php-fpm进程较少。
在我的服务器中默认为:
fastcgi_buffers 32 1024k;
fastcgi_buffer_size 1024k;
附:禁用不必要的日志记录(nginx.conf)以免使您的磁盘驱动器具有更多IO负载:
access_log off;
error_log /var/log/nginx/error.log crit;
如果您需要监控使用newrelic
并监控您的服务器的网络,cpu,mem活动
答案 1 :(得分:-1)
此更改将起作用:Nginx配置文件/etc/nginx/nginx.conf:在nginx.conf文件的http部分下面添加
HTTP
{
fastcgi_buffers 8 16k;
fastcgi_buffer_size 32k;
}