首先优化配置会结合机器硬件的配置进行的,不能无限制无目的的进行,所以先了解自己的cpu,内存,硬盘等信息,然后进行系统的优化,再然后才到应用类的优化设置。
测试环境:CPU E3-1231 V3 四核八线程,内存32G
FreeBSD中Nginx.conf文件配置
user www www;
worker_processes auto;
worker_cpu_affinity auto;
worker_rlimit_nofile 51200;
#worker_rlimit_nofile 是nginx能打开文件的最大句柄数,我们需要把这个数字设大一点。
#linux系统的文件查看数限制查看是用 ulimit -n ,修改这个限制是用 ulimit -HSn 65535
events {
worker_connections 51200;
}
#开启gzip减少带宽
http {
gzip on;
gzip_min_length 1k;
gzip_buffers 4 16k;
gzip_http_version 1.1;
gzip_comp_level 2;
gzip_types text/plain application/javascript application/x-javascript text/javascript text/css application/xml application/xml+rss;
gzip_vary on;
gzip_proxied expired no-cache no-store private auth;
gzip_disable "MSIE [1-6]\.";
}
CentOS8中的Nginx.conf文件配置
user www www;
worker_processes auto;
worker_cpu_affinity auto;
worker_rlimit_nofile 51200;
#worker_rlimit_nofile 是nginx能打开文件的最大句柄数,我们需要把这个数字设大一点。
#linux系统的文件查看数限制查看是用 ulimit -n ,修改这个限制是用 ulimit -HSn 65535
events
{
use epoll;
worker_connections 51200;
multi_accept off;
accept_mutex off;
}
http
{
gzip on;
gzip_min_length 1k;
gzip_buffers 4 16k;
gzip_http_version 1.1;
gzip_comp_level 2;
gzip_types text/plain application/javascript application/x-javascript text/javascript text/css application/xml application/xml+rss;
gzip_vary on;
gzip_proxied expired no-cache no-store private auth;
gzip_disable "MSIE [1-6]\.";
events模块中use设置说明
use epoll
使用epoll的I/O 模型(值得注意的是如果你不知道Nginx该使用哪种轮询方法的话,它会选择一个最适合你操作系统的)
补充说明:与apache相类,nginx针对不同的操作系统,有不同的事件模型
A)标准事件模型
Select、poll属于标准事件模型,如果当前系统不存在更有效的方法,nginx会选择select或poll
B)高效事件模型
Kqueue:使用于FreeBSD 4.1+, OpenBSD 2.9+, NetBSD 2.0 和 MacOS X.使用双处理器的MacOS X系统使用kqueue可能会造成内核崩溃。
Epoll:使用于Linux内核2.6版本及以后的系统。
/dev/poll:使用于Solaris 7 11/99+, HP/UX 11.22+ (eventport), IRIX 6.5.15+ 和 Tru64 UNIX 5.1A+。
Eventport:使用于Solaris 10. 为了防止出现内核崩溃的问题, 有必要安装安全补丁
查看linux版本号可以使用 cat /proc/version命令
worker_processes,工作进程数
1.默认:worker_processes: 1
这里直接设置为auto,根据需求自动调整
worker_cpu_affinity auto;
允许将工作进程自动绑定到可用的CPU
worker_connections,单个工作进程可以允许同时建立外部连接的数量,数字越大,能同时处理的连接越多
1.默认:worker_connections: 1024
worker_connections解析
1.connections不是随便设置的,而是与两个指标有重要关联,一是内存,二是操作系统级别的“进程最大可打开文件数”。
2.进程最大可打开文件数:进程最大可打开文件数受限于操作系统,可通过 ulimit -n 命令查询,以前是1024,现在是65535。(常规系统都配置成65535)
这些官方信息更全面,我这里只讲我优化配置的点,因为服务器需求不同,这些配置会做相应调整,不能盲目的认为这些值是固定的。
接下去说一下php-fpm.conf文件的配置
FreeBSD文件配置默认情况在:/usr/local/etc/php-fpm.d/www.conf
CentOS8文件配置默认情况在:/usr/local/php/etc/php-fpm.conf
#最大子进程数量,一般每个php-cgi所耗费的内存为20M左右
#如果这个值设置的比较小,那么等待的请求时间会出现502超时
#32G内存服务器可以设置1600,但实际应用中不会这样配置,而是根据自己需求进行设定
pm.max_children = 800
#启动时创建的子进程数,常规10~20之间就可以,20个的话是400M内存
pm.start_servers = 40
#为避免内存泄露,php-fpm有这么一个机制,
#当一个php-cgi进程处理的请求数达到这个配置后,则会自动重启该进程,
#所以在高并发中,经常导致502错误,解决方法就是把这个值设置大一些,
#减少进程重启次数,减少高并发情况下502错误。
pm.max_requests = 10240
#单个请求的超时中止时间,超时后会终止进程,nginx发现信号断了,
#就会给客户端返回502错误。和php.ini的max_execution_time配置不冲突,
#谁先达到时间谁先起作用。
request_terminate_timeout = 100
#保证空闲进程数最小值,如果空闲进程小于此值,则创建新的子进程
pm.min_spare_servers = 40
#保证空闲进程数最大值,如果空闲进程大于此值,此进行清理
pm.max_spare_servers = 80
#空闲进程超时时间10秒
pm.process_idle_timeout = 10s
#状态页,可以通过该状态页了解监控 php-fpm 的状态,status可以修改成自己的名称
#pm.status_path = /status
pm.status_path = /kiccleaf
server {
listen 80;
server_name localhost;
#Nginx状态页,监控Nginx状态增加以下内容
location /nginx_status {
stub_status on;
access_log off;
#允许内网访问IP
allow 192.168.1.8;
allow 127.0.0.1;
deny all;
}
#php-fpm监控页,增加以下内容
location = /kiccleaf {
include fastcgi_params;
fastcgi_pass unix:/tmp/php-cgi.sock;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
}
}
打开http://网址/nginx_status 显示:
Active connections: 2
server accepts handled requests
6 6 78
Reading: 0 Writing: 1 Waiting: 1
打开http://网址/kiccleaf 显示:
pool: www
process manager: dynamic
start time: 31/Aug/2020:15:59:56 +0800
start since: 12
accepted conn: 14
listen queue: 0
max listen queue: 0
listen queue len: 0
idle processes: 39
active processes: 1
total processes: 40
max active processes: 1
max children reached: 0
slow requests: 0