如何确定进程是否绑定到CPU,内存或磁盘?
如何确定进程是否绑定到CPU,内存或磁盘?
Answers:
那需要一些伏都教徒。这取决于。例:
如果有足够的内存,磁盘似乎不太忙,则可能是 CPU限制的。查看CPU使用率,如果它接近100%,则表示CPU受限。如果不是这样,那么实现中就会存在人为的瓶颈。例如,在双核CPU上,单线程进程的CPU使用率不会超过50%。
如果CPU和内存可用,但磁盘非常繁忙,或者IO延迟似乎很高,则可能是其IO受限。查看是否添加更多磁盘(RAID?)是否有帮助。
以上都不是?检查可用的内存。
足够的内存?该过程本身可能存在人为的瓶颈,即有人忘记了睡眠(1)?Naah通常不那么容易。;)
在大多数公司中,有一个针对性能敏感产品的性能工程师组成整个实验室的原因!
使用sar,vmstat,iostat,oprofile,lockstat,dtrace,产品特定的性能监视工具等工具来调试性能问题。
与提到的其他工具一样,运行ps l PID
,插入相关的进程ID或查看top或htop中的STATE和WCHAN列。
如果它处于D(用于磁盘)状态,则表示正在执行文件IO。这可能是因为它正在读取大量文件,或者因为它正在使用大量内存并进行交换。WCHAN列将告诉您它里面包含什么内核函数。为他们谷歌搜索或在这里询问可能会给您一些指示,它们表示什么意思。
如果它处于R(运行)状态,则说明它正在用户空间中使用CPU,换句话说,它此时已受CPU限制。
如果它处于S(休眠)状态,则位于可中断的系统调用中,这可能意味着它实际上正在休眠,或者正在执行诸如等待网络流量或锁定之类的操作。同样,查看特定的wchan会告诉您更多信息。
另请参见流程的“等待通道”是什么?