Linux에서 하드 디스크로드를 어떻게 모니터링 할 수 있습니까?


101

리눅스에서 하드 디스크로드를 모니터링하는 좋은 명령 줄 유틸리티가 있습니까? top디스크 활동 iso cpu 사용법 과 같은 것이지만 모니터링하는 것.

좀 더 구체적으로 말하면, 프로그램에서 실행되는 프로그램의 여러 부분에 대해 여러 번 최적화 한 후 일부 (무거운로드) 서버의 경우 병목 현상은 단순히 디스크의 파일에 로깅하는 것입니다. 그러나 서버가 처리 할 수있는 트래픽 양을 평가하기가 매우 어렵다는 것을 알게되었습니다.

가장 이상적인 도구는 "현재 디스크 대역폭의 35 %를 사용하고 있습니다"라는 문구입니다. 어떤 아이디어?


1
완벽한 질문은 내가 찾던 것입니다 =)
rafa.ferreira

다음과 같이 sysfs를 직접 읽을 수 /sys/block/sda/stat있습니다. 필드 # 1은 총 읽기 수를, 필드 # 5는 총 쓰기 수를, 필드 # 9는 진행중인 I / O 작업 수를 나타냅니다. 자세한 내용은 kernel.org/doc/Documentation/iostats.txt를 참조하십시오 . 값은 오랫동안 부호가 없으며 줄 바꿈 될 수 있습니다.
sastanin

우리는 항상 Plesk 서버 에서이 문제와 싸우고 있기 때문에 이것은 매우 좋은 질문입니다. 그러나 누락 된 것은 how do you do it with SNMP?입니다. 로그인하여 내용을 확인하는 것이 좋지만 실제로 기록 데이터가 필요합니다.
유진 반 데르 메웨

답변:


83

iostat도구를 사용하여이를 잘 측정 할 수 있습니다 .

% iostat -dx /dev/sda 5

Device:         rrqm/s   wrqm/s     r/s     w/s   rsec/s   wsec/s avgrq-sz avgqu-sz   await  svctm  %util
sda               0.78    11.03    1.19    2.82    72.98   111.07    45.80     0.13   32.78   1.60   0.64

디스크 사용률이 마지막 열에 나열됩니다. 이것은 다음과 같이 정의됩니다

장치에 대한 I / O 요청이 발행 된 CPU 시간의 백분율 (장치의 대역폭 폭 활용). 이 값이 100 %에 가까울 때 장치 포화가 발생합니다.


3
데비안에 어떤 패키지가 있습니까? apt-cache dumpiostat에 대해 아무것도 설정하지 않았습니다
hBy2Py

9
@Brian : 그것은 sysstat 패키지에 있습니다 (어쨌든 yum을 통해 ...)
Joe

RHEL 6.5에서 찾을 수 없습니다. RHEL에 사용할 수 있습니까?
Hazok

지연없이 계속 작동 할 수 있습니까? 데이터를 가져 오기 위해 단일 인스턴스를 실행하려고하면 샘플을 가져올 수 없을 때와 같은 수를 얻습니다.
Wilf

@Hazok RHEL 6.5의 sysstat RPM의 일부입니다.
The General,

81

iotop 은 각 프로세스에서 사용중인 IO의 양을 확인하는 top 버전입니다. 표준 우분투 저장소에 있습니다. RHEL 또는 Fedora에 있는지 모르겠지만 그래야합니다.

여기에 이미지 설명을 입력하십시오

iotop을 지원하지 않는 이전 커널 (예 : CentOS 5.x 또는 RHEL 5.x)의 경우 대신 topio를 사용하십시오 ( http://yong321.freeshell.org/freeware/pio.html#linux 참조) . io 통계 용 proc // io는 iotop과 유사한 기능을 제공합니다. 자세한 내용은 링크를 참조하십시오.


1
실제로, 그것은 우분투에 기본적으로 설치되어 있지 않기 때문에 다음을 발행 할 수 있습니다 : sudo apt-get install iotop
Moshe

1
iotop에는 2.6.20보다 높은 커널이 필요합니다. 불행히도 RedHat el4와 el5를 모두 배제합니다.
Dave Cheney

2
RedHat 5.4부터, 아이오 톱 작업에 필요한 비트가 백 포트되었습니다. 즐겨!
Dave Cheney

그것은 Fedora에 있습니다 :).
jamie September

13

주석에서 sastanin이 제안한 것처럼 /sys/block/sda/stat또는에 지정된 값을 직접 처리 할 수 ​​있습니다 /proc/diskstats. 다른 언급 된 도구를 사용할 수없고 쉽게 설치할 수없는 경우에 유용 할 수 있습니다.

예를 들어 (IIUC) 이와 같은 (bash)은 초당 읽기 수를 제공해야합니다.

OLD=`awk '{print $1}' /sys/block/sda/stat` # First field is number of read I/Os processed
DT=1
for ii in `seq 1 10`
do
    sleep $DT
    NEW=`awk '{print $1}' /sys/block/sda/stat`
    echo $((($NEW-$OLD)/$DT))
    OLD=$NEW
done

설명서는 https://www.kernel.org/doc/Documentation/iostats.txthttps://www.kernel.org/doc/Documentation/block/stat.txt 를 참조 하십시오 .


7

iotop / top / iftop의 힘을 한 곳에 모아서 시스템의 중요한 부분을 강조하는 atop을 살펴보십시오 .


5

nmon 도구를 살펴 보는 것이 좋습니다. 또한 나중에 시스템을 사용하기 위해 파일에 데이터를 기록 할뿐만 아니라 여러 시스템 매개 변수에 대한 실시간로드를 보여줍니다. 무료 도구는 다음과 같습니다.


5

hdparm -T /dev/sda버퍼 캐시 (fileio) 성능 hdparm -t /dev/sda을 테스트하여 장치 읽기 성능 을 테스트하는 데 사용할 수있는 총 대역폭 을 확인하려면

예 : 랩탑이 SATA 디스크에서 82MB / 초, 캐시에서 2GB / 초를 가져옵니다. 내 dekstop은 캐시에서 12GB / sec, HW RAID 어레이에서 500MB / sec를 가져옵니다. 서버 클래스 하드웨어에서 마지막 숫자가 두 배가 될 수 있습니다.

readahead를 256보다 높게 설정하면 4096이 가장 적합합니다.

for i in 128 256 512 1024 2048 4096 8192 16384 32768  
do  
hdparm --setra $i  
  for j in 1 2 4 8 16 32  
  do  
  time dd if=/dev/sda of=/dev/null bs="$j"k  count=<fixthis> 1GB / blocksize  
  done  
done  

다른 블록 크기와 다른 미리 읽기에서 1GB를 읽는 시간


SF에 오신 것을 환영합니다. 문자열 주위에 역 따옴표를 넣거나 단락을 들여 쓰기하여 게시물에 코드 강조 표시를 사용할 수 있습니다.
ℝ 아 핑크

두 가지-1) --setra는 지금 -a이고 2), hdparm -{T,t}명령은 디스크 읽기만 발행 strace하므로 비파괴 적입니다. (인터넷에 관한 조언에 관한 표준 면책 조항이 적용됨)
i336_

4

하드 디스크로드를 표시하기위한 표준 도구는 iostat입니다.

디스크의 대역폭이 얼마인지 모르기 때문에 사용중인 디스크 대역폭의 % age를 알려주지 않습니다. 어쨌든, 디스크에는 연속적인 데이터의 대량 전송에 대한 제조업체의 인용 수치 만 있습니다.


3

나는 RRDtool의 무엇을 당신이 원하는 무엇을해야 생각 여기 가 시스템 데이터를 덤프하는 데몬을 사용하고 당신이 좋아하지만 당신이 그것을 처리 할 수 있습니다. 나는 종종 시스템 부하를 측정하기 위해 그래프 등을 생성하는 데 사용했습니다.

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