Linux의 사용자 모드에서 프로세스가 네트워크 I/O 집약적인지 확인하는 방법은 무엇입니까?

Linux의 사용자 모드에서 프로세스가 네트워크 I/O 집약적인지 확인하는 방법은 무엇입니까?

저는 현재 특정 프로세스가 네트워크 I/O 집약적인지 여부를 런타임에 결정해야 하는 프로그램을 Linux에서 작성하고 있습니다. iotop다음과 같은 몇 가지 도구를 사용해 보았지만 iftop그 중 어느 것도 특정 프로세스를 모니터링할 수 없습니다. 그렇다면 프로세스가 네트워크 I/O 집약적인지 여부를 사용자 수준에서 확인할 수 있는 방법이 있습니까? 어떤 도움이라도 대단히 감사하겠습니다!

답변1

대기 채널이 무엇인지 특정 주파수로 확인할 수 있습니다. 경험하는 평균 대기 채널은 프로세스에 소요된 시간을 나타냅니다.

예: 일반적인 net-io 바인딩 프로세스로 Ubuntu 이미지를 다운로드합니다.

$ 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 바인딩을 사용하는 프로세스일 것입니다.에폴네트워크 io의 경우.

이와 대조적으로 다음과 같은 일반적인 CPU 집약적 프로세스의 경우:

$ ( while :; do :; done )& pid=$!

대기 채널이 있어야합니다-(=없음=CPU 코어에 있음) 거의 항상.

관련 정보