高并发数性能测试 Linux 设置问题
问题 1:一个进程文件句柄数限制(服务端+客户端)
因为每一个 tcp 连接都要占一个文件描述符,一旦这个文件描述符使用完了,新的连接返回给我们的错误是 too many open files 或者 Socket/File: Cannot open so many files。执行 ulimit -n 输出 1024 (默认 soft,ulimit -Hn 可查 hard),说明对于一个进程而言最多只能打开 1024 个文件,所以你要采用此默认配置最多也就可以并发上千个 TCP 连接。
软限制(soft limit)是指 Linux 在当前系统能够承受的范围内进一步限制用户同时打开的文件数;硬限制(hard limit)是根据系统硬件资源状况(主要是系统内存)计算出来的系统最多可同时打开的文件数量。通常软限制小于或等于硬限制
临时修改: ulimit -n 1000000
,只对当前登录用户目前的使用环境有效,系统重启或用户退出后就会失效。
编辑 /etc/security/limits.conf
文件,( 修改完重新登录就可以见到), 修改后内容为
- soft nofile 1000000
- hard nofile 1000000
soft 是一个警告值,而 hard 则是一个真正意义的阀值,超过就会报错。soft 指的是当前系统生效的设置值。hard 表明系统中所能设定的最大值 nofile - 打开文件的最大数目星号表示针对所有用户,若仅针对某个用户登录 ID,替换星号。
问题 2:端口数量受限(客户端)
一般来说,单独对外提供请求的服务不用考虑端口数量问题,监听某一个端口即可。但是请求的发起方/客户端需要突破 6 万可用端口的限制。操作系统上端口号 1024 以下是系统保留的,从 1024-65535 是用户使用的。网络四元组/网络五元组四元组是指的是 {源 IP 地址,源端口,目的 IP 地址,目的端口} 系统用一个 4 四元组来唯一标识一个 TCP 连接.五元组指的是(多了协议) {源 IP 地址,目的 IP 地址,协议号,源端口,目的端口}实际上只有{源 IP 地址,源端口}确定对外 TCP 请求数量, 因为目的地址和端口已经确定。例如 EMQ server 的 IP+端口 1883
查看 cat /proc/sys/net/ipv4/ip_local_port_range
临时修改: echo "1024 65535"> /proc/sys/net/ipv4/ip_local_port_range
永久修改: /etc/sysctl.conf 增加 net.ipv4.ip_local_port_range= 1024 65535
并令其生效 sysctl -p 现在可以使用的端口达到 64510 个
问题 3:系统全局可用句柄数目限制(即包含所有用户打开文件数总和)
fs.file-max
是系统全局的可用句柄数目。
The value in file-max denotes the maximum number of file handles that the Linux kernel will allocate。
客户端发出大量请求(大概为 40 万时)会出现
[warn] socket: Too many open files in system
查看: cat /proc/sys/fs/file-max
当前会话修改,可以这么做: echo 1048576 > /proc/sys/fs/file-max
但系统重启后消失。
永久修改,要添加到 /etc/sysctl.conf
文件中: fs.file-max = 1048576
保存并使之生效: sysctl -p
。
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论