2012-12-11 4 views
1

나는 시간이 지남에 따라 CPU와 메모리를 사용하는 태스크를 가지고있다. 같은매트릭스에서 값 인쇄하기

mpstat -u 1 -P ALL

출력은 같습니다에는 다음과 같은 리눅스 명령을 실행 나에게 출력을 제공 내가 4 번째 열과 3 행에있는 값을 잡아하려는

02:22:14 PM CPU %usr %nice %sys %iowait %irq %soft %steal %guest %idle 
02:22:15 PM all 4.51 0.00 0.11 0.00 0.00 0.00 0.00 0.00 95.37 
02:22:15 PM 0 0.00 0.00 1.00 0.00 0.00 0.00 0.00 0.00 99.00 
02:22:15 PM 1 **78.22** 0.00 0.99 0.00 0.00 0.00 0.00 0.00 20.79 

02:22:15 PM 2 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 100.00 
02:22:15 PM 3 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 100.00 
02:22:15 PM 4 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 
02:22:15 PM 5 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 
02:22:15 PM 6 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 100.00 
02:22:15 PM 7 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 
02:22:15 PM 8 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 
02:22:15 PM 9 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 
02:22:15 PM 10 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 
02:22:15 PM 11 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 
02:22:15 PM 12 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 
02:22:15 PM 13 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 
02:22:15 PM 14 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 
02:22:15 PM 15 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 100.00 
02:22:15 PM 16 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 
02:22:15 PM 17 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 
02:22:15 PM 18 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 
02:22:15 PM 19 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 100.00 
02:22:15 PM 20 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 
02:22:15 PM 21 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 
02:22:15 PM 22 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 
02:22:15 PM 23 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 

을 A [3] [ 4] 즉, bash/python/perl에서 매 20 초마다 78.22입니다. 그래서 내가 원하는 스크립트는 mpstat 명령을 실행하고 지정된 열의 값을 출력하고 그래프를 작성하는 값을 기반으로합니다. .dat 파일에 필요한 값을 추가하고 그래프를 만드는 gnuplot 또는 app를 실행하려고합니다.

이동 방법에 대한 제안이 있으십니까?

답변

4

awk을 사용하여 3 번째 줄과 4 번째 줄을 가져올 수 있습니다. 다음 코드는이 셀을 mpstat의 출력에서 ​​가져 와서 현재 UNIX 시간 소인과 함께 통계 파일에 추가합니다.

mpstat -u 1 -P ALL | awk 'NR==4 {print systime(), $4}' >> stats.txt 

이 명령을 실행하려면 20 초마다 :

watch -n 20 "mpstat -u 1 -P ALL | awk 'NR==4 {print systime(), \$4}' >> stats.txt" 

그런 다음 gnuplot와 플롯 :

cat stats.txt | gnuplot -p -e 'set datafile separator " "; plot "-" using 1:2 with lines' 
+0

다음을 수행합니다. mpstat -u 1 -P ALL | awk 'NR == 4 {print systime(), $ 4}'>> stats.txt, stats.txt는 빈 파일로 끝납니다. –

+0

또한 연속성의 값을 인쇄하지 않고 한 번 인쇄하고 중지합니다. 내 목표는 프로세스가 실행될 때까지 CPU 사용량에 대한 탭을 지속적으로 유지하는 것입니다. 따라서 충분하지는 않지만 일부 개선 사항은 훌륭합니다. –

+0

'while'루프 또는 (가장 좋아하는)'watch '명령으로이 명령을 반복 할 수 있습니다. 원래 답변을 업데이트했습니다. –

0

을 다음

#!/bin/bash 
function _mpstat() { 
    while :; do 
     arr=($(mpstat -P 1 | tail -n 1)) 
     echo "${arr[3]}" 
     sleep 20 
    done >> file.txt 
} 
_mpstat & 
echo "_mpstat PID: $!" 

Expla 시도 미국

  • while :; do 무한 루프
  • $(mpstat -P 1 | tail -n 1) mpstat의 전용 CPU $()
  • arr=(...) 명령이 배열에 값을 반환 -P 1 꼬리 -n 1 마지막 라인, 리턴 값 1
  • echo "${arr[3]}" 에코 배열 인덱스 3
  • sleep 20 20 초 동안 수면
  • >> file.txt while 루프 블록 내에서 stdout을 파일로 보냅니다.
  • _mpstat &
  • 당신은 그것의 부모를 표시 할 PID를 grep을 필요에 모두 때 죽일 수있는 기능

의 PID를 반환 &

  • echo "_mpstat PID: $! 백그라운드 프로세스에 기능을 보냅니다.