我的应用程序是一个"每个请求的线程"具有CASE
个线程的线程池的Web服务器。单个请求的所有处理都在同一个线程中运行。
假设我在具有SELECT d.name, d.department_id, d.email ,
CASE WHEN d.status = 1
THEN 'Active'
ELSE 'Inactive'
END as status,
dep.name as dep_name FROM doctors d
INNER JOIN departments dep ON dep.id = d.department_id
内核的计算机上运行该应用程序。我想配置M
来限制CPU使用率:例如最多N
个所有CPU。
如果处理完全 CPU绑定,那么我会将M
设置为50%
。但是处理会有一些IO。
我可以使用不同的M
运行该应用,并使用N/2
,M
,top -H
等来监控它。
您如何建议我估算ps -L
?
答案 0 :(得分:2)
CPU使用率为50%并不一定意味着线程数需要为N_Cores / 2.在处理I / O时,CPU在等待数据从设备到达时会浪费很多周期。
因此,您需要一个工具来衡量实际CPU使用率,并且通过实验,您可以增加线程数,直到实际CPU使用率达到50%。
Linux的性能就是这样一个工具。 This 问题解决了这个问题。另外一定要收集整个系统的统计数据: perf record -a 。
您感兴趣的是您的CPU发出并执行尽可能多的指令/周期(IPC)。现代服务器可以执行多达4个IPC,用于强大的计算绑定工作负载。您希望尽可能接近以获得良好的CPU利用率,这意味着您需要增加线程数。当然,如果由于许多上下文切换带来一些惩罚(缓存刷新,内核代码等)而导致许多I / O无法实现
所以最后的答案就是增加线程数,直到实际CPU使用率达到50%。
答案 1 :(得分:0)
这完全取决于您的特定软件和硬件。 硬件很重要,因为如果线程阻塞写入慢速磁盘,则需要很长时间才能再次唤醒(并再次使用cpu),但如果磁盘非常快,则阻塞只会切换cpu上下文,但线程会立即再次运行。
我认为您只能尝试使用不同的参数,或者应用可能会监视它的CPU使用情况并动态调整池。