Linux(服务器编程):百万并发服务器系统参数调优( 四 )
三、第1次测试测试如下
- 左侧运行服务端程序reactor(111.229.177.161:8888) , 右侧运行客户端程序mul_port_client_epoll去连接服务器
- 效果如下:
- 左侧服务端接收了1021个客户端(除去描述符0、1、2)之后程序报错 , 显示无法继续接收客户端的连接
- 右侧客户端也报错 , 无法继续连接服务端
文章插图
原因分析
- 默认情况下 , 系统有限制 , 一个进程最多只能1024个文件(或文件描述符) 。 我们的客户端发起来了超过1024个客户端的连接 , 因此程序报错
- 通过ulimit命令可以查看 , 如下:
文章插图
解决方案(修改最大文件数)
- 第一步:
- 通过ulimit命令或者修改/etc/security/limits.conf配置文件 , 修改用户可打开的最大文件描述符个数 。 由于ulimit命令修改的结果不能永久保存 , 因此我们此处修改/etc/security/limits.conf配置文件
- (下面图1)下面修改/etc/security/limits.conf , 将所有用户可打开的文件描述符个数修改为1048576(1024*1024)
- (下面图2)修改完成之后退出当前会话(不必重启) , 然后重新开启会话 , 通过ulinit命令可以看到修改成功
- 然后再把客户端的机器也全部修改一下 , 别忘记了
文章插图
文章插图
- 第二步:
- (下面图1)上面我们虽然修改了/etc/security/limits.conf , 但是该配置文件约束的是“用户级别”的系统限制 。 还有两个“内核级别”的配置参数与文件描述符有关 。 一个为nr_open(表示单个进程打开文件句柄数上限) , 另一个为file-max(表示系统范围内所有进程可打开的文件句柄的数量限制)
- 其中nr_open默认为1048576 , 我们就不需要修改了
- file-max默认为180566 , 因此我们需要将其修改为1048576
- (下面图2)修改/etc/sysctl.conf文件 , 在里面修改file-max的值为1048576 , 然后保存退出
- (下面图3)执行sysctl的命令 , 将/etc/sysctl.conf文件的内容更新到/proc/sys/fs/file-max中生效 , 令执行完之后查看/proc/sys/fs/file-max文件 , 更新成功
- 然后再把客户端的机器也全部修改一下 , 别忘记了
文章插图
文章插图
文章插图
- 第三步:
- 上面我们将进程可分配描述符数量都增大了 , 那么还需要修改服务端程序reactor.c中的MAX_EPOLL_EVENTS宏 , 因为其代表的是epoll_wait()可以处理事件的数量 , 因为客户端数量增加了 , 因此该宏也要增加
- 下面我们将该宏设置为1024*512=524288(由于本人机器内存不足 , 只能修改这个大 , 如果修改再大程序就运行不了 , 因为无法为程序分配更多的内存 。 如果你的机器内存够大 , 那么可以将这个数值再往上调;如果你的机器内存不足 , 那么就将这个值调小)
- 修改完成之后重新编译reactor.c
推荐阅读
- Git服务器配置错误导致日产汽车源码在网上泄露
- 机器人|万州区举办“中国梦科技梦”机器人编程大赛
- Linux Kernel 5.10.5发布:禁用FBCON加速滚动特性
- Linux 5.11开始围绕PCI Express 6.0进行早期准备
- Fedora正在寻求协助 希望加快Linux 5.10 LTS内核测试进度
- Linux Mint 20.1 Ulyssa稳定版已确定延期至2021年初发布
- 英特尔Xe GPU在Linux 5.11上的性能表现不错
- MIPS架构厂商日渐式微 Linux报告其漏洞遭遇困难
- 手把手配置HLS流媒体服务器
- 2020年科技十大“翻车”现场:谷歌服务器真的有点累了……