现在一般的游戏或网络公司都要求单服务器性能达到多少人,
有很多文章都没有探讨得特别清晰,
现在我从数据上给出一台服务器能支持多少人一个比较清晰的计算方法:
假设1: 如果服务器底层处理1个人和处理N个人的效率是一样
(现在如果AIO和IOCP模式,一个连接和10000个连接效率差不多);
假设2: 网络带宽没有限制
(如果数据协议设计合理,一般当CPU达到100%时,带宽消耗也不会很大)
假设3: 服务端资源没有限制
(主要是指内存资源,对于现在机器,一般内存不是制约因素,但是连接资源一般要受到系统制约)
现在给出理想情况下的计算公式:
平均服务响应时间(单位S)*单用户每秒请求数 ==> 单用户CPU时间
处理器个数 * (1S) / 单用户CPU时间 ==> 服务器最大在线人数
以上是理想情况下的压力计算公式,考虑到其他情况,可以将这一个算法*一个修正值。
修正值主要有这几个:
如果IO和或者等待其他任务消耗时间较多,可以适当提高线程或进程数,
这里线程和进程数的理想设计为
平均每处理器总时间 / ( 平均每处理器总时间 - 平均每处理器IO时间(或平均每处理器等待时间) )
==> 理想的线程(进程)数
可以使用 线程(进程)数 / 处理器个数进行修正
另外再乘以理想估计和实际估计偏差可以取(0.8)
得到最终结果理想情况是这样
0.8 * ( 处理器个数 * 1S ) / ( 平均服务响应时间(单位S)*单用户平均每秒请求数 ) ==> 最大在线人数
加第一修正的最大线程人数
0.8 * ( 平均每处理器总时间 / ( 平均每处理器总时间 - 平均每处理器IO时间(平均每处理器等待时间) ) )
* ( 平均服务响应时间(单位S)*单用户平均每秒请求数 ) ==> 最大在线人数
假设线程或进程数设计合理
可以采用这个进行估算
0.8 * 线程(进程)数 / ( 平均服务响应时间(单位S)*单用户平均每秒请求数 ) ==> 最大在线人数
多人服务器单服务器承压力的一般算法
最新推荐文章于 2023-11-21 14:24:03 发布