设置正确的线程数量

来源:互联网 发布:淘宝ps页头 编辑:程序博客网 时间:2024/04/28 23:36

    《高性能服务器架构》中提到了SEDA,我搜了一下,发现这篇文章《SEDA性能优化的分析和模拟》,对于线程数量的建议。假如一个Web请求,代码执行的时间为ST(Service Time),读文件、网络调用之类IO等待时间为为WT(Wait Time),CPU的个数是N、核数是M则线程数量TC(Thread Count)为:

 

    TC= N*M*(1+WT/ST)

 

    假如只有1个单核的CPU,如果IO为40毫秒,程序执行要20毫秒,那么可以得出如下的执行序列。

    Request1 执行20毫秒,等待40毫秒,此时CPU空闲。

    Request2 接着执行20毫秒,等待40毫秒,此时Request1还需要等待20毫秒。

    Request3 接着执行20毫秒,等待40毫秒,此时Request2还需要等待20毫秒,Request1执行完毕。

    Request4 就可以重用Request1的线程了。

  

    按照这个公式,假如1个单核的CPU,存在下面三种应用场景:

    S1:ST=10 WT=0 TC=1

    S2:ST=10 WT=50 TC=6

    S3:ST=10 WT=100 TC=11

    S1是纯粹的计算,没有IO,只消耗CPU;S2是本地文件的访问,有磁盘IO;S3是调用数据库,有网络IO。

    假如S1占总请求数量的10%,S2占20%,S3占70%,此时的TC应该是多少?假如百分比为PER

 

    TC = N*M*(1 + ( WT1*PER1 + WT2*PER2 ... WTn*PERn)/( ST1*PER1 + ST2*PER2 ... STn*PERn) )

    也就是说总的等待时间/总的执行时间

    上面的场景,按照公式为

    TC = 1 * 1 * ( 1 + 80/10 ) = 9

    也就是说设置9个线程是合适的。正确的估计每种场景,获得每种场景的数据,对于每种场景的比例做出分析,就大概能计算出线程数量的理论值。当然,也需要根据《压力测试衡量CPU的三个指标:CPU Utilization、Load Average和Context Switch Rate》的数据来验证和调整。

 

    对于SEDA细节,以后再研究吧。

   

==========================================================================

性能相关的系列文章:

LoadRunner利用ODBC编写MySql脚本
LoadRunner压力测试时监控服务器Linux的资源情况
压力测试衡量CPU的三个指标:CPU Utilization、Load Average和Context Switch Rate
高性能服务器架构(High-Performance Server Architecture)
网站性能测试PV到TPS的转换以及TPS的波动
用GTmetrix来优化你的网页(集成了YSlow、FireBug的功能)

原创粉丝点击