프로세스별 디스크 I/O 활용도를 확인하는 방법은 무엇입니까?

프로세스별 디스크 I/O 활용도를 확인하는 방법은 무엇입니까?

저는 Linux 시스템에 문제가 있으며 디스크 I/O의 최대치, 평균 서비스 시간 및 평균 대기 시간을 발견 sysstat하고 보고했습니다.sar

다음에 이러한 피크가 발생할 때 어떤 프로세스가 이러한 피크를 일으키는지 어떻게 확인할 수 있습니까?

으로 할 수 있나요 sar? 이미 녹음된 파일에서 이 정보를 찾을 수 있나요 sar?

의 출력 sar -d, 시스템 중단이 오후 12시 58분에서 13시 1분경에 발생했습니다.

12:40:01          DEV       tps  rd_sec/s  wr_sec/s  avgrq-sz  avgqu-sz     await     svctm     %util
12:40:01       dev8-0     11.57      0.11    710.08     61.36      0.01      0.97      0.37      0.43
12:45:01       dev8-0     13.36      0.00    972.93     72.82      0.01      1.00      0.32      0.43
12:50:01       dev8-0     13.55      0.03    616.56     45.49      0.01      0.70      0.35      0.47
12:55:01       dev8-0     13.99      0.08    917.00     65.55      0.01      0.86      0.37      0.52
13:01:02       dev8-0      6.28      0.00    400.53     63.81      0.89    141.87    141.12     88.59
13:05:01       dev8-0     22.75      0.03    932.13     40.97      0.01      0.65      0.27      0.62
13:10:01       dev8-0     13.11      0.00    634.55     48.42      0.01      0.71      0.38      0.50

어제 시작한 다른 스레드에 대한 후속 질문도 있습니다.

답변1

운이 좋게 다음 최대 활용 기간을 잡을 수 있다면 다음을 사용하여 프로세스별 I/O 통계를 대화형으로 연구할 수 있습니다.아이오톱.

답변2

당신이 사용할 수있는pidstat다음 명령을 사용하여 20초마다 프로세스당 누적 io 통계를 인쇄하려면 다음을 수행하십시오.

# pidstat -dl 20

각 행에는 다음과 같은 열이 있습니다.

  • PID - 프로세스 ID
  • kB_rd/s - 작업으로 인해 초당 디스크에서 읽히게 된 킬로바이트 수입니다.
  • kB_wr/s - 작업으로 인해 초당 디스크에 기록되거나 기록될 킬로바이트 수입니다.
  • kB_ccwr/s - 작업에 의해 디스크 쓰기가 취소된 킬로바이트 수입니다. 이는 작업이 일부 더티 페이지 캐시를 자를 때 발생할 수 있습니다. 이 경우 다른 작업이 고려된 일부 IO가 발생하지 않습니다.
  • 명령 - 작업의 명령 이름입니다.

출력은 다음과 같습니다.

05:57:12 PM       PID   kB_rd/s   kB_wr/s kB_ccwr/s  Command
05:57:32 PM       202      0.00      2.40      0.00  jbd2/sda1-8
05:57:32 PM      3000      0.00      0.20      0.00  kdeinit4: plasma-desktop [kdeinit]              

05:57:32 PM       PID   kB_rd/s   kB_wr/s kB_ccwr/s  Command
05:57:52 PM       202      0.00      0.80      0.00  jbd2/sda1-8
05:57:52 PM       411      0.00      1.20      0.00  jbd2/sda3-8
05:57:52 PM      2791      0.00     37.80      1.00  kdeinit4: kdeinit4 Running...                   
05:57:52 PM      5156      0.00      0.80      0.00  /usr/lib64/chromium/chromium --password-store=kwallet --enable-threaded-compositing 
05:57:52 PM      8651     98.20      0.00      0.00  bash 

05:57:52 PM       PID   kB_rd/s   kB_wr/s kB_ccwr/s  Command
05:58:12 PM       202      0.00      0.20      0.00  jbd2/sda1-8
05:58:12 PM      3000      0.00      0.80      0.00  kdeinit4: plasma-desktop [kdeinit]              

답변3

지속적인 모니터링보다 더 좋은 것은 없습니다. 이벤트가 발생한 후에는 시간에 민감한 데이터를 다시 가져올 수 없습니다.

당신이 몇 가지 일이 있습니다~할 것 같다그러나 당신의 친구는 연루되거나 제거될 수 있는지 확인할 수 있습니다 /proc.

sort -n -k 10 /proc/diskstats
sort -n -k 11 /proc/diskstats

필드 10, 11은 누적 쓰기 섹터 및 누적 쓰기 시간(ms)입니다. 그러면 핫 파일 시스템 파티션이 표시됩니다.

cut -d" " -f 1,2,42 /proc/[0-9]*/stat | sort -n -k +3

이러한 필드는 PID, 명령 및 누적 IO 대기 틱입니다. 이는 핫 프로세스를 보여줍니다.아직 실행 중이라면. (아마도 파일 시스템 저널링 스레드를 무시하고 싶을 것입니다.)

위 항목의 유용성은 가동 시간, 장기 실행 프로세스의 특성, 파일 시스템 사용 방식에 따라 달라집니다.

주의 사항: 2.6 이전 커널에는 적용되지 않습니다. 확실하지 않은 경우 설명서를 확인하세요.

(이제 가서 미래의 자신을 위해 Munin/Nagios/Cacti/무엇이든 설치하세요 ;-)

답변4

사용 btrace. 예를 들어 사용하기 쉽습니다 btrace /dev/sda. 명령을 사용할 수 없는 경우 패키지에서 사용할 수 있을 것입니다.블록 추적.

편집하다: debugfs가 커널에서 활성화되어 있지 않으므로 시도해 볼 수도 있습니다 date >>/tmp/wtf && ps -eo "cmd,pid,min_flt,maj_flt" >>/tmp/wtf. 물론 페이지 결함 로깅은 btrace를 사용하는 것과 전혀 동일하지 않지만 운이 좋다면 가장 많은 디스크를 사용하는 프로세스에 대한 힌트를 줄 수도 있습니다. 방금 가장 I/O 집약적인 서버 중 하나를 시도했고 목록에는 많은 I/O를 소비하고 있는 프로세스가 포함되어 있었습니다.

관련 정보