我的应用程序是具有线程线程池的“每个请求线程” Web服务器M
。单个请求的所有处理都在同一线程中运行。
假设我正在具有N
核心的计算机上运行该应用程序。我想配置M
限制CPU使用率:例如,最多50%
所有CPU。
如果处理完全受CPU限制,那么我将设置M
为N/2
。但是,该处理会执行一些IO。
我可以运行不同的应用程序M
和使用top -H
,ps -L
,jstat
等进行监控。
您如何建议我估算M
?
CPU使用率达到50%并不一定意味着线程数必须为N_Cores /2。在处理I / O时,CPU在等待数据从设备到达时浪费了很多周期。
因此,您需要一种工具来衡量实际CPU使用率,并通过实验来增加线程数,直到实际CPU使用率达到50%。
Linux的perf就是这样的工具。这个问题解决了这个问题。另外,请确保收集整个系统的统计信息:perf record -a。
您对CPU发出并执行尽可能多的指令/周期(IPC)感兴趣。现代服务器最多可以执行4个IPC,以处理大量的计算绑定工作负载。您想要尽可能地接近该值以获得良好的CPU利用率,这意味着您需要增加线程数。当然,如果由于许多上下文切换而带来许多代价(缓存刷新,内核代码等)而导致无法进行许多I / O操作,
因此,最终的答案就是增加线程数,直到实际CPU使用率达到50%。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句