设置正确的线程数量
来源:互联网 发布:淘宝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的功能)
- 设置正确的线程数量
- 设置正确的线程数量
- 正确查看电脑内核数量和线程数的方法
- 动态设置线程数量的例子
- WebLogic用来响应客户端请求的线程数量的设置
- 线程的数量控制
- 线程的数量
- 设置map的数量
- Java的线程最大数量
- Java的线程最大数量
- WebLogic 8.1 用来响应客户端请求的线程数量的设置
- Spring与quartz2集成设置线程池线程数量
- 设置正确的DNS
- Executors.newFixedThreadPool(NTHREADS)线程池数量设置多少合适?
- Python根据数量生成正确顺序的ip地址
- golang 里goroutine产生的线程数量
- Python 限制线程的最大数量(Semaphore)
- 线程的正确结束方式
- 轻松面试找到理想员工-非官方的面试技术指南(转)
- BF548 and OV7620
- 求助一个问题
- 请不要拿ipad和手机、上网本相提并论
- orale tablespace&datafile -- oracle表空间
- 设置正确的线程数量
- 我的七个建议
- 为了追求更好的理想而放弃了承诺
- 给计算机系学生的建议 (转)
- EXCEPTION_IN_PAGE_ERROR 异常
- html重新加载问题
- 优先使用工具来减轻编程负担
- iis配置
- JS面向对象的支持[转自http://www.cnblogs.com/dwjaissk/archive/2006/12/18/595761.aspx]