我的应用程序是一个“每请求一个线程”的Web服务器,具有 M
个线程的线程池。单个请求的所有处理都在同一线程中运行。
假设我在具有 N
个核心的计算机中运行应用程序。我希望配置 M
以限制CPU使用率:例如,最多使用 50%
的所有CPU。
如果处理完全受CPU限制,则将 M
设置为 N/2
。但是,处理还涉及一些IO。
我可以使用不同的 M
运行应用程序,并使用 top -H
、ps -L
、jstat
等来监视它。
您会如何建议我估计 M
?
我的应用程序是一个“每请求一个线程”的Web服务器,具有 M
个线程的线程池。单个请求的所有处理都在同一线程中运行。
假设我在具有 N
个核心的计算机中运行应用程序。我希望配置 M
以限制CPU使用率:例如,最多使用 50%
的所有CPU。
如果处理完全受CPU限制,则将 M
设置为 N/2
。但是,处理还涉及一些IO。
我可以使用不同的 M
运行应用程序,并使用 top -H
、ps -L
、jstat
等来监视它。
您会如何建议我估计 M
?
这完全取决于您的特定软件和硬件。 硬件很重要,因为如果一个线程阻塞了对慢速磁盘的写入,它将需要很长时间才能再次唤醒(并再次消耗CPU),但如果磁盘非常快,则阻塞只会切换CPU上下文,但线程将立即重新运行。
我认为您只能尝试使用不同的参数,或者应用程序可以自己监视其CPU使用情况并动态调整池。