내 모든 디스크 IO를 사용하는 프로세스


120

"top"을 사용하면 어떤 CPU가 사용 중이고 어떤 프로세스가 내 CPU를 모두 사용하고 있는지 알 수 있습니다.

"iostat -x"를 사용하면 어떤 드라이브가 사용 중인지 알 수 있습니다.

그러나 어떤 프로세스가 모든 드라이브의 처리량을 사용하고 있는지 어떻게 알 수 있습니까?


2
글쎄, 기술적으로 리눅스에서도 마찬가지입니다. 사용자 프로세스는 페이지 캐시의 페이지 만 수정하기 때문입니다 ...;)
Damon

제가 가지고있는 질문과 제가 찾고 있던 답변 만 있었지만 이런 종류의 질문이 수퍼 유저에게 더 적합하지 않습니까?
Zeta Two

그리고 이것이 Linux가 Solaris 및 MacOS보다 열등한 이유입니다. dtrace가 내장되어있어 쉽게 알아낼 수 있습니다.-/
Thorbjørn Ravn Andersen

답변:


162

찾고 있습니다 iotop(커널> 2.6.20 및 Python 2.5가 있다고 가정). 실패하면 파일 시스템에 연결하는 방법을 찾고 있습니다. 나는 전자를 추천합니다.


8
iotop프로세스에서 사용하는 IOPS 수가 아닌 I / O 대역폭을 표시하는 것 같습니다. 이것은 매우 관련이 없습니다. 작은 쓰기 + 동기화를 많이 수행하는 프로세스는 대규모 연속 데이터 일괄 처리를 고속으로 작성하는 프로세스보다 디스크의 IO 용량을 더 많이 사용합니다.
Arnaud Le Blanc

작은 쓰기의 경우 내가 본 모든 [jdb2/nvme0n1p1]것은 iotop에 있었지만 / proc / sys / vm / block_dump를 활성화하고 출력을 정상 / 안정 시스템 lxadm.com/Simple_filesystem_read/write_tracing_with_/proc/sys/ 와 비교하여 좋았 습니다. kubectl 요청을 지속적으로 생성하는 도커 컨테이너로, /home/spinnaker/.kube/cache/discovery/.../serverresources.json. 사용자 / 프로세스 이름으로 범위를 좁 히면 다음과 같은 iotop -atku systemd-network | grep kubectl것도 도움이 될 수 있습니다.
Greg Bray

16

현재 실행중인 'D'상태 (디스크 응답 대기 중)의 프로세스를 찾으려면 다음을 수행하십시오.

while true; do date; ps aux | awk '{if($8=="D") print $0;}'; sleep 1; done

또는

watch -n1 -d "ps axu | awk '{if (\$8==\"D\") {print \$0}}'"

Wed Aug 29 13:00:46 CLT 2012
root       321  0.0  0.0      0     0 ?        D    May28   4:25  \_ [jbd2/dm-0-8]
Wed Aug 29 13:00:47 CLT 2012
Wed Aug 29 13:00:48 CLT 2012
Wed Aug 29 13:00:49 CLT 2012
Wed Aug 29 13:00:50 CLT 2012
root       321  0.0  0.0      0     0 ?        D    May28   4:25  \_ [jbd2/dm-0-8]
Wed Aug 29 13:00:51 CLT 2012
Wed Aug 29 13:00:52 CLT 2012
Wed Aug 29 13:00:53 CLT 2012
Wed Aug 29 13:00:55 CLT 2012
Wed Aug 29 13:00:56 CLT 2012
root       321  0.0  0.0      0     0 ?        D    May28   4:25  \_ [jbd2/dm-0-8]
Wed Aug 29 13:00:57 CLT 2012
root       302  0.0  0.0      0     0 ?        D    May28   3:07  \_ [kdmflush]
root       321  0.0  0.0      0     0 ?        D    May28   4:25  \_ [jbd2/dm-0-8]
Wed Aug 29 13:00:58 CLT 2012
root       302  0.0  0.0      0     0 ?        D    May28   3:07  \_ [kdmflush]
root       321  0.0  0.0      0     0 ?        D    May28   4:25  \_ [jbd2/dm-0-8]
Wed Aug 29 13:00:59 CLT 2012
root       302  0.0  0.0      0     0 ?        D    May28   3:07  \_ [kdmflush]
root       321  0.0  0.0      0     0 ?        D    May28   4:25  \_ [jbd2/dm-0-8]
Wed Aug 29 13:01:00 CLT 2012
root       302  0.0  0.0      0     0 ?        D    May28   3:07  \_ [kdmflush]
root       321  0.0  0.0      0     0 ?        D    May28   4:25  \_ [jbd2/dm-0-8]
Wed Aug 29 13:01:01 CLT 2012
root       302  0.0  0.0      0     0 ?        D    May28   3:07  \_ [kdmflush]
root       321  0.0  0.0      0     0 ?        D    May28   4:25  \_ [jbd2/dm-0-8]
Wed Aug 29 13:01:02 CLT 2012
Wed Aug 29 13:01:03 CLT 2012
root       321  0.0  0.0      0     0 ?        D    May28   4:25  \_ [jbd2/dm-0-8]

결과에서 알 수 있듯이 jdb2 / dm-0-8 (ext4 저널 프로세스) 및 kdmflush는 지속적으로 Linux를 차단합니다.

자세한 내용은이 URL이 도움이 될 수 있습니다. Linux Wait-IO 문제


11

atop 도 잘 작동하며 iotop을 실행할 수없는 구형 CentOS 5.x 시스템에서도 쉽게 설치할 수 있습니다. 도움이 필요하면 d디스크 세부 정보를 표시하려면 누르십시오 ?.

ATOP - mybox                           2014/09/08  15:26:00                           ------                            10s elapsed
PRC |  sys    0.33s |  user   1.08s |                | #proc    161  |  #zombie    0 |  clones    31 |                | #exit         16  |
CPU |  sys   4% |  user     11% |  irq       0%  | idle    306%  |  wait     79% |               |  steal     1%  | guest     0%  |
cpu |  sys   2% |  user      8% |  irq       0%  | idle     11%  |  cpu000 w 78% |               |  steal     0%  | guest     0%  |
cpu |  sys   1% |  user      1% |  irq       0%  | idle     98%  |  cpu001 w  0% |               |  steal     0%  | guest     0%  |
cpu |  sys   1% |  user      1% |  irq       0%  | idle     99%  |  cpu003 w  0% |               |  steal     0%  | guest     0%  |
cpu |  sys   0% |  user      1% |  irq       0%  | idle     99%  |  cpu002 w  0% |               |  steal     0%  | guest     0%  |
CPL |  avg1    2.09 |  avg5    2.09 |  avg15   2.09  |               |  csw    54184 |  intr   33581 |                | numcpu     4  |
MEM |  tot     8.0G |  free   81.9M |  cache   2.9G  | dirty   0.8M  |  buff  174.7M |  slab  305.0M |                |               |
SWP |  tot     2.0G |  free    2.0G |                |               |               |               |  vmcom   8.4G  | vmlim   6.0G  |
LVM |  Group00-root |  busy     85% |  read       0  | write  30658  |  KiB/w      4 |  MBr/s   0.00 |  MBw/s  11.98  | avio 0.28 ms  |
DSK |          xvdb |  busy     85% |  read       0  | write  23706  |  KiB/w      5 |  MBr/s   0.00 |  MBw/s  11.97  | avio 0.36 ms  |
NET |  transport    |  tcpi    2705 |  tcpo    2008  | udpi      36  |  udpo      43 |  tcpao     14 |  tcppo     45  | tcprs      1  |
NET |  network      |  ipi     2788 |  ipo     2072  | ipfrw      0  |  deliv   2768 |               |  icmpi      7  | icmpo     20  |
NET |  eth0    ---- |  pcki    2344 |  pcko    1623  | si 1455 Kbps  |  so  781 Kbps |  erri       0 |  erro       0  | drpo       0  |
NET |  lo      ---- |  pcki     423 |  pcko     423  | si   88 Kbps  |  so   88 Kbps |  erri           0 |  erro       0  | drpo       0  |
NET |  eth1    ---- |  pcki  22 |  pcko      26  | si    3 Kbps  |  so    5 Kbps |  erri       0 |  erro       0  | drpo       0  |

  PID                   RDDSK                    WRDSK                   WCANCL                    DSK                   CMD        1/1
 9862                      0K                   53124K                       0K                    98%                   java
  358                      0K                     636K                       0K                     1%                   jbd2/dm-0-8
13893                      0K                     192K                      72K                     0%                   java
 1699                      0K                      60K                       0K                     0%                   syslogd
 4668                      0K                      24K                       0K                     0%                   zabbix_agentd

이것은 Java pid 9862가 범인임을 분명히 보여줍니다.


4

TL; DR

을 사용할 수 있으면 iotop그렇게하십시오. 그렇지 않으면 도움이 될 수 있습니다.


을 사용 top하고 다음 단축키를 사용 하십시오 .

d 1 = set refresh time from 3 to 1 second

1   = show stats for each cpu, not cumulated

이것은 > 1.0 wa적어도 하나의 코어에 대한 값을 표시해야합니다. 디스크 대기가 없으면 단순히 IO로드가없고 더 이상 볼 필요가 없습니다. 일반적으로 상당한 부하가 시작 > 15.0 wa됩니다.

x       = highlight current sort column 
< and > = change sort column
R       = reverse sort order

프로세스 상태 열인 'S'를 선택하십시오. 'R'(실행중인) 프로세스가 맨 위에 표시되도록 정렬 순서를 반대로하십시오. 'D'프로세스 (디스크 대기 중)를 발견 할 수 있으면 범인이 무엇인지 표시 할 수 있습니다.


3

KDE 사용자의 경우 'ctrl-esc'를 사용하여 시스템 활동 모니터를 호출 할 수 있으며 프로세스 ID와 이름이있는 I / O 활동 차트가 있습니다.

'신규 사용자 상태'로 인해 이미지 업로드 권한이 없지만 아래 이미지를 확인하실 수 있습니다. IO 읽기 및 쓰기를위한 열이 있습니다.


2

lsof(열린 파일 나열) 을 고려해 보셨습니까 ?


3
각 파일에 대한 MB / s가 아닌 열린 파일 핸들 만 표시됩니다. iotop이 그렇게합니다.
oligofren

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.