![如何确定某个进程是否受 CPU、内存或磁盘限制?](https://linux22.com/image/1074340/%E5%A6%82%E4%BD%95%E7%A1%AE%E5%AE%9A%E6%9F%90%E4%B8%AA%E8%BF%9B%E7%A8%8B%E6%98%AF%E5%90%A6%E5%8F%97%20CPU%E3%80%81%E5%86%85%E5%AD%98%E6%88%96%E7%A3%81%E7%9B%98%E9%99%90%E5%88%B6%EF%BC%9F.png)
如何知道某个进程是否绑定到 CPU、内存或磁盘?
答案1
这需要一些专业技能。视情况而定。例如:
如果有足够的内存,并且磁盘似乎不太忙,那么或许CPU 受限。查看 CPU 使用率,如果接近 100%,则为 CPU 受限。如果不是,则实施过程中存在人为瓶颈。例如,在双核 CPU 上,单线程进程的 CPU 使用率不会超过 50%。
如果 CPU 和内存可用,但磁盘非常繁忙,或者 IO 延迟似乎很高,则很可能是 IO 限制。看看添加更多磁盘(RAID?)是否有帮助。
以上都不是?请检查可用内存。
内存够用吗?进程本身可能存在人为瓶颈,例如,有人忘记删除 sleep(1) 了?不,通常没那么容易。 ;)
在大多数处理性能敏感型产品的公司中,我们为性能工程师配备了一整套实验室,这是有原因的!
使用 sar、vmstat、iostat、oprofile、lockstat、dtrace、产品特定的性能监控工具等工具来调试性能问题。
答案2
检查一下iotop
,可能会有用
答案3
可以实时检查大量进程统计信息(内存、CPU 使用率、I/O 等)的工具是顶部。它并不能取代 Sudhanshu 所提到的更专业的工具,但可能是一个很好的开始。
答案4
运行top
并查看 CPU 使用率行。较高的用户百分比表示它受 CPU 限制。较高的等待百分比表示它受 IO 限制。