20180712Nginx 参数优化和内核参数优化
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了20180712Nginx 参数优化和内核参数优化相关的知识,希望对你有一定的参考价值。
nginx 参数优化
- worker_processes
- 这里的数值不能超过CPU的总核数,因为在单个核上部署超过1个Nginx服务进程并不能起到提高性能的作用。
- worker_rlimit_nofile
- Nginx最大可用文件描述符数量,同时需要配置操作系统的"ulimit -n 200000",或者在/etc/security/limits.conf中配置
- worker_connections
- 配置单个Nginx单个进程可服务的客户端数量,(最大值客户端数 = 单个进程链接数据 * 进程数),最大客户端数同时也受操作系统socket链接数的影响(最大64K)
- use epoll
- Linux 关键配置,允许单个线程处理多个客户端请求
- multi_accept on
- 运行尽可能的处理更多的链接数,如果worker_connections配置太低,会产生大量的无效链接请求。
-
缓存配置信息
- open_file_cache max=200000 inactive=20s
- 缓存高频操作的文件的FDs(文件描述符/文件句柄) 最大数目和缓存的时间
- open_file_cache_valid 30s
- 在open_file_cache中指定检测正确信息的间隔时间
- open_file_cache_min_uses 2
- 在open_file_cache中指令参数不活动期间内最小的文件数
- open_file_cache_errors on
- 指定令当搜索一个文件释放缓存错误信息,也包括再次给配置文件添加文件
- open_file_cache max=200000 inactive=20s
- sendfile on
- 开启sendfile选项,使得内核的FD文件传输功能,这个比用户态用read()+write()的方式更高效
- tcp_nopush on
- 打开tcp_nopush选项,Nginx允许将HTTP应答首部与数据内容在用一个报文中发出。这个选项使服务器在sendfile时可以提前准备HTTP首部,能够达到优化吞吐的效果。
- tcp_nodelay on
- 不要缓存data-sends(关闭Nagle算法),这个能提高高频发送小数据报文的实时性。
- keepalive_timeout 30
- 配置链接keep-alive超时时间,服务器将在超时之后关闭相应的链接。
- keepalive_requests 10000
- 单个客户端在keep-alive链接上可以发送的请求数量。在测试和压测的环境中,需要配置一个较大的值
- reset_timedout_connection on
- 允许服务器在停止发送应答之后关闭连接,以便释放链接相应的socket内存开销。
- client_body_timeout 10
- 配置客户端数据请求超时时间,默认时60s
- send_timeout 2
- 客户端数据读超时配置,客户端停止读取数据,超时时间后断开相应的链接,默认时60s
- 压缩参数设置,减少网络上所传输的数据量,但是解压也需要消耗一定的资源。
- gzip on
- gzip_min_length 10240
- gzip_proxied expired no-cache no-store private auth
- gzip_types text/plain text/css text/xml text/javascript application/x-javascript application/xml
- gzip_disable "MSIE [1-6]"
- 指定客户端禁止使用gzip压缩功能
内核参数调优
- net.ipv4.ip_local_port_range = 2000 65000
- 调高系统的IP以及端口数据限制,从可以接受更多的链接
- net.ipv4.tcp_window_scaling = 1
- 支持超过64KB的TCP窗口
- net.ipv4.tcp_max_syn_backlog = 3240000
- 设置协议栈可以缓存的报文数阀值,超过阀值的报文将被内核丢弃
- net.core.somaxconn = 3240000
- 调高socket侦听数阀值
- net.core.rmem_default = 8388608
- 一般默认的接收窗口大小
- net.core.rmem_max = 16777216
- 一般接收窗口的最大大小
- net.core.wmem_max = 16777216
- 一般默认发送窗口最大大小
- net.ipv4.tcp_rmem = 4096 87380 16777216(min default max)
- 为TCP socket预留用于接收缓冲的内存数量,即使在内存出现紧张情况下tcp socket都至少会有这么多的数量的内存用于接收缓冲,默认值为8K。
- net.ipv4.tcp_wmem = 4096 65536 16777216
- 为TCP socket预留用于发送缓冲的内存数量,每个tcp socket都可以在建议以后都可以使用它。默认值为6K
- net.ipv4.tcp_congestion_control = cubic
- 修改TCP拥塞控制算法。丢包使得TCP传输速度大幅下降的主要原因是丢包重传机制,控制这一机制的就是TCP拥塞控制算法。
- net.ipv4.tcp_fin_timeout = 30
- 表示如果套接字由本端要求关闭,这个参数决定了它保持在FIN-WAIT-2状态的时间。
- net.ipv4.tcp_keepalive_time = 1200
- 表示当前keepalive 启用的时间,TCP发送keepalive消息的频率。缺省是2小时,更改为20分钟
- net.ipv4.tcp_syncookies =1
- 表示开启SYN Cookies。当出现SYN等待队列溢出时,启用cookies来处理,可防范少量的SYN ×××,默认为0,表示关闭。
- net.ipv4.tcp_tw_reuse = 1
- 表示开启重用。允许将TIME-WAIT sockets重新用于新的TCP链接,默认为0,表示关闭。
- net.ipv4.tcp_tw_recycle = 1
- 表示开启TCP链接中的TIME-WAIT sockets的快速回收,默认为0,表示关闭。
- net.ipv4.tcp_max_tw_buckets = 5000
- 表示系统同时保持TIME_WAIT套接字的最大数量,如果超过这个数字,TIME_WAIT套接字将立刻被清除并打印告警信息。默认为180000,更改为5000.对于Apache,Nginx等服务器,上几行参数可以很好的减少TIME_WAIT套接字数量,但是对于Squid,效果不大。此项参数可以控制TIME_WAIT套接字的最大数量,避免Squid服务器被大量的TIME_WAIT套接字拖死。
以上是关于20180712Nginx 参数优化和内核参数优化的主要内容,如果未能解决你的问题,请参考以下文章