Linux 中如何判断进程在用户模式下是否是网络 I/O 密集型?

Linux 中如何判断进程在用户模式下是否是网络 I/O 密集型?

我目前正在 Linux 中编写一个程序,该程序需要在运行时判断特定进程是否是网络 I/O 密集型。我尝试过一些工具,例如iotopiftop,但它们都不能监视特定进程。那么,有没有办法在用户级别判断一个进程是否是网络 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核心上)几乎一直如此。

相关内容