Linux 内核参数考虑的是最通用场景,并不符合用于支持高并发访问的Web服务器的定义,所以需要修改Linux内核参数。其次,对 Nginx 的一些参数,也需要根据服务情况进行调整。
在上一篇中,提到了Unix/Linux 基本哲学之一就是 “一切皆文件”。要提高 TCP 并发量,需要调整文件句柄。
文件句柄
因为 Linux 系统为每个 TCP 建立连接时,都要创建一个 socket 句柄,每个 socket 句柄同时也是一个文件句柄。而系统对用户打开的文件句柄是有限制的,看到这里,也就理解了为什么在高并发时会出现 “too many open files”。
# 查看当前用户允许TCP打开的文件句柄最大数
ulimit -n
# 修改文件句柄
vim /etc/security/limits.conf
* soft nofile 655350
* hard nofile 655350
修改后,退出shell终端窗口,重新登录(不是重启服务器),即可查看到最新的结果。
注意:
soft nofile (软限制)是指Linux在当前系统能够承受的范围内进一步限制用户同时打开的文件数
hard nofile (硬限制)是根据系统硬件资源状况(主要是系统内存)计算出来的系统最多可同时打开的文件数量
通常软限制小于或等于硬限制。*
表示所有用户,也可以指定具体的用户名
所有进程打开的文件描述符数不能超过/proc/sys/fs/file-max
单个进程打开的文件描述符数不能超过user limit中nofil