IPV4的内核7个参数的配置优化
将下面的内核参数得到值追加到Linux系统的/etc/sysctl.conf
/sbin/sysctl -p
- net.core.netdev_max_backlog参数
该参数表示当每个网络接口接收数据包的速率比内核处理这些数据包的速率快时,允许发送到队列的数据包的最大数目。
net.core.netdev_max_backlog = 262114
- net.core.somacconn参数
该参数用于调节系统同时发起的TCP连接数,默认为128。
该值过小时可能导致连接超时或重传问题。
net.core.somaxconn = 262144
- net.ipv4.tcp_max_orphans参数
该参数用于设定系统中最多允许存在多少TCP套接字不被关联到任何一个用户文件句柄上。若超过,没有与用户文件相关联的TCP套接字将被立即复位(防止简单的DOS攻击),系统内存充足时,可以增大这个参数。
net.ipv4.tcp_max_orphans = 262144
- net.ipv4.tcp_max_syn_backlog参数
该参数用于记录尚未收到客户端确认信息的连接请求的最大值。
系统内存充足时,可以增大这个参数。
net.ipv4.tcp_max_syn_backlog= 262144
- net.ipv4.tcp_timestamps参数
该参数用于设置时间戳,避免序列号的卷绕。
对于Nginx服务器,建议将其关闭。
net.ipv4.tcp_timestamps = 0
- net.ipv4.tcp_synack_retries参数
该参数用于设置内核放弃TCP连接之前向客户端发送SYN+ACK包的数量。
主要影响三次握手的第二次握手发送SYN附带一个回应前一个SYN的ACK。
net.ipv4.tcp_synack_retries = 1
- net.ipv4.tcp_syn_retries 参数
设置内核放弃建立连接之前发送SYN包的数量。
net.ipv4.tcp_syn_retries = 1
CPU中Nginx配置优化的2个指令
- worker_processes指令
用来设置Nginx服务的进程数。
最好赋值为机器CPU的倍数。
举个例子,双核CPU建议设置为2或4.
worker_processes = 4
- worker_cpu_affinity指令
该指令用来为每个进程分配CPU的工作内核。
图片以4个CPU工作数来演示:
worker_cpu_affinity 0001 0100 1000 0010;
与网络相关配置的四个指令
- keepalive_timeout指令
用于设置Nginx服务器与客户端保持连接的超时时间。
该指令有两个选项,第一个指定了客户端连接保持活动的超时时间,此时间后,服务器会关闭此连接;第二个选项指定了Keep_Alive消息头保持与客户端某些服务器的连接,超过此时间后,客户端可以关闭连接。
keepalive_timeout 60 50;
- send_timeout指令
用于设置Nginx服务器响应客户的超时时间,建立连接后,在此时间内客户端没有任何活动,Nginx服务器将会关闭连接。
send_timeout 10s;
- client_header_buffer_size指令
设置Nginx服务器允许客户端请求头部的缓冲区大小。可以根据系统的分页大小来设置。
获取分页大小
getconf PAGESIZE
设置此缓冲区大小
client_header_buffer_size 4k;
服务器返回400错误的部分原因:请求的头部过大。
- multi_accept指令
用于配置Nginx服务器是否尽可能多的接收客户端的网络连接请求。
与事件驱动模型相关的配置
- use指令
用于指定Nginx服务器使用的事件驱动模型。 - worker_connections指令
设置服务器的每个工作进程允许同时连接客户端的最大数量。
计算公式为 client = worker_processes * worker_cennections / 2
worker_connections number
此指令与Linux系统进程可以打开的文件句柄数量有关。
worker_connections的大小不能超过open file resource limit的赋值。
#查看系统的open file resource limit
cat /proc/sys/fs/file-max
#设置open file resource limit的值
echo "2390251" > /proc/sys/fs/file-max; sysctk -p
- worker_rlimit_sigpending指令
设置事件队列长度上限值。主要影响事件驱动模型中rtsig模型可以保存的最大信号数。若上限,服务器会自动转用poll模型处理未处理的客户端请求。
worker_rlimit_sigpending limit;
- devpoll_changes 和 devpoll_events指令
设置/dev/poll事件驱动模型下服务器可以与内核之间传递事件的数量,前者设置传递给内核的事件数量,后者设置从内核中获取的事件数量。
devpoll_changes number
devpoll_changes number
- kqueue_changes 和 kqueue_events指令
设置在kqueue事件驱动模型下服务器可以与内核之间传递事件的数量。
kqueue_changes number
kqueue_events number
- epoll_events 指令
用于设置在epoll事件驱动模型下服务器可以在内核之间传递事件的数量。
epoll_cahnges number
- rtsing_signo指令
设置rtsig模式使用的两个信号的第一个,第二个信号是在第一个信号的编号上加1.
rtsig_signo signo
- rtsing_overflow_* number指令
包括三个具体的指令:rtsing_overflow_events rtsing_overflow_test rtsing_overflow_threshold。控制当rtsig模式中信号队列溢出时服务器的处理方式。
rtsig_overflow_* number