服务器百万并发实现C10K,C1000k, C10M

目录

  • 1 介绍
    • 1.1 并发量与接入量关系
    • 1.2 并发量决定性因素
  • 2 具体代码实验
    • 2.1 单线程reactor
    • 2.2 多线程reactor(线程池)
  • 3 参数调优
  • 4 监控工具
  • 5 高并发设计原则

1 介绍

本文章主要介绍影响百万并发网络io因素:网络模型,linux参数调优。以及监控工具。

1.1 并发量与接入量关系

接入量:一段时间内服务器连入的客户端数量总和。例如每日接入的数量等
并发量:一个服务器同时能承载的客户端数量。承载指:一个请求(http,tcp等)在200ms内有返回,并且返回的结果还是争取的。例如:服务器维护了10万个连接,并且这10万个客户端请求,服务器能正确的返回结果,就说明服务器的并发量是10万。

1.2 并发量决定性因素

影响200ms返回正确结果的决定因素:1 数据库响应是否正常 2 网络带宽 3 内存操作 4 日志等

2 具体代码实验

通过4台虚拟机:主机4核8G 三台客户端:2核4G来处理

2.1 单线程reactor

服务器:
在这里插入图片描述
客户端A:
1
服务器百万并发实现C10K,C1000k, C10M_第1张图片
系统文件描述符限制:
ulimit -a 查看文件描述符 openfiles限制
方法1: ulimit -n 数量 临时修改,重启服务器就无效
方法2:修改/etc/security/limits.conf 永久修改
配置详细参数定义:
服务器百万并发实现C10K,C1000k, C10M_第2张图片
domain:域 记录那个用户组的程序有效 * 所有用户 root:root用户
type:soft(软限制) hard(硬限制) 软:能超过value,但是超过后操作系统回回收,硬不能超过设置的数量
value:对应数量

2
在这里插入图片描述
客户端连接报无法分配地址,是跟netfilter组件有关。
原因关于网络协议栈:
服务器百万并发实现C10K,C1000k, C10M_第3张图片
服务器百万并发实现C10K,C1000k, C10M_第4张图片

2.2 多线程reactor(线程池)

3 参数调优

net.ipv4.tcp_mem = 252144 524288 786432
net.ipv4.tcp_wmem = 2048 2048 4096
net.ipv4.tcp_rmem = 2048 2048 4096
fs.file-max = 1048576
net.nf_conntrack_max = 1048576
net.netfilter.nf_conntrack_tcp_timeout_established = 1200

ulimit -a调优

参数图:
服务器百万并发实现C10K,C1000k, C10M_第5张图片

4 监控工具

htop 工具
安装 apt-get install htop
使用:
服务器百万并发实现C10K,C1000k, C10M_第6张图片

5 高并发设计原则

自己的服务器,调试网络协议栈参数原则:
1 若服务器用来作为文件传输,大量数据时,可将buff调大
2 若client与服务器传输字符,数据较小时,可将buff调小,自己做的测试最小的512,此时ssh都连接不上,而且日志打印也不出来。

代码:
https://github.com/hengfengyaoren/C10K.git

你可能感兴趣的:(网络编程,c++)