我目前正在 Linux 中编写一个程序,该程序需要在运行时判断特定进程是否是网络 I/O 密集型。我尝试过一些工具,例如iotop
和iftop
,但它们都不能监视特定进程。那么,有没有办法在用户级别判断一个进程是否是网络 I/O 密集型的呢?任何帮助将不胜感激!
答案1
您可以以一定的频率检查其等待通道是什么。您遇到的平均等待通道应该表明该过程中花费的时间。
例如:将下载 Ubuntu 映像作为典型的 net-io 绑定过程:
$ url='http://mirror.dkm.cz/ubuntu-releases/16.04/ubuntu-16.04-desktop-amd64.iso'
$ wget "$url" & pid=$!
当你这样做时:
$ ps h -p $pid -o wchan
你应该得到poll_schedule_timeout几乎一直如此,因此这是一个可能使用网络 io 绑定的进程epoll对于网络io。
相比之下,对于典型的 CPU 密集型进程,例如:
$ ( while :; do :; done )& pid=$!
你应该得到一个等待通道-(=无=它在CPU核心上)几乎一直如此。