Linux(服务器编程):百万并发服务器系统参数调优( 四 )

三、第1次测试测试如下

  • 左侧运行服务端程序reactor(111.229.177.161:8888) , 右侧运行客户端程序mul_port_client_epoll去连接服务器
  • 效果如下:
    • 左侧服务端接收了1021个客户端(除去描述符0、1、2)之后程序报错 , 显示无法继续接收客户端的连接
    • 右侧客户端也报错 , 无法继续连接服务端

Linux(服务器编程):百万并发服务器系统参数调优文章插图
原因分析
  • 默认情况下 , 系统有限制 , 一个进程最多只能1024个文件(或文件描述符) 。 我们的客户端发起来了超过1024个客户端的连接 , 因此程序报错
  • 通过ulimit命令可以查看 , 如下:

Linux(服务器编程):百万并发服务器系统参数调优文章插图
解决方案(修改最大文件数)
  • 第一步:
    • 通过ulimit命令或者修改/etc/security/limits.conf配置文件 , 修改用户可打开的最大文件描述符个数 。 由于ulimit命令修改的结果不能永久保存 , 因此我们此处修改/etc/security/limits.conf配置文件
    • (下面图1)下面修改/etc/security/limits.conf , 将所有用户可打开的文件描述符个数修改为1048576(1024*1024)
    • (下面图2)修改完成之后退出当前会话(不必重启) , 然后重新开启会话 , 通过ulinit命令可以看到修改成功
    • 然后再把客户端的机器也全部修改一下 , 别忘记了

Linux(服务器编程):百万并发服务器系统参数调优文章插图
Linux(服务器编程):百万并发服务器系统参数调优文章插图
  • 第二步:
    • (下面图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文件 , 更新成功
    • 然后再把客户端的机器也全部修改一下 , 别忘记了

Linux(服务器编程):百万并发服务器系统参数调优文章插图
Linux(服务器编程):百万并发服务器系统参数调优文章插图
Linux(服务器编程):百万并发服务器系统参数调优文章插图