Programing

프로세스 이름으로 필터링하고 CPU 사용량을 기록합니다.

lottogame 2020. 11. 5. 07:38
반응형

프로세스 이름으로 필터링하고 CPU 사용량을 기록합니다.


이름별로 프로세스를 필터링하고 1 초마다 해당 프로세스의 CPU 사용량을 로그 파일에 쓸 수있는 Linux top 명령에 대한 옵션이 있습니까?


top & pgrep

top프로세스 이름으로 출력을 필터링하려면를 사용 pgrep하여 프로세스 이름 으로 PID 목록을 가져온 다음 -p옵션에 전달할 수 있습니다 top.

예를 들면 :

top -p $(pgrep -d',' http)

참고 :이 -d','옵션은 쉼표로 PID를 구분하며, top -p. 참고 2 : top에서 지정한 이름과 일치하는 실행중인 프로세스가 없으면 실패 메시지를 반환합니다 pgrep.

의 결과를 top파일에 쓰려면 -n 1옵션 (한 번만 반복)을 사용하고 출력을 로그 파일로 리디렉션합니다.

top -p $(pgrep -d',' http) -n 1 >> your_log_file

매초마다 그렇게하려면 아마도 a while루프가 할 sleep것입니까?

while :; do top -p $(pgrep -d',' http) -n 1 >> your_log_file; sleep 1; done

각 항목의 타임 스탬프를 지정하려면의 출력을 추가 할 수 있습니다 date.

while :; do top -p $(pgrep -d',' http) -n 1 >> log.txt; date >> log.txt; sleep 1; done

또 다른 옵션은 다음과 같습니다.

top -b -d 1 -p $(pgrep -d',' java) -n 120 > log.txt
  • -d 옵션을 사용하면 top이 데이터를 새로 고치는 데 사용하는 빈도를 설정할 수 있습니다.
  • -b 옵션은 top의 기존 인터페이스가 사용되지 않음을 의미합니다. 대신 모든 것을 표준 출력으로 보낸 다음 파이프 (|) 또는 리디렉션 (>)을 사용할 수 있습니다.
  • -n 옵션은 top이 실행해야하는 반복 횟수를 알려줍니다.

그 후에 다음을 입력 할 수 있습니다.

cat log.txt | grep USER_OF_PROCESS

프로세스의 실행 시간과 % CPU, 메모리 등을 볼 수 있습니다.


#You can run following script as ./cpurecorder.sh pid filename
#It will generate output file with memory usage and cpu utilisation.
#You can log other variable by searching man for ps.

`enter code here`filepath=/home/rtcsadm              # modify as desired
interval=20                         # reports per minute
timelimit=6000                      # how long to run, in seconds

mydate=`date "+%H:%M:%S"`           # the timestamp
freq=$((60/$interval))              # for sleep function

while [ "$SECONDS" -le "$timelimit" ] ; do
  ps -p$1 -opid -opcpu -opmem -ocomm -c | grep $1 | sed "s/^/$mydate /" >> $filepath/$2.txt
  sleep 3
  mydate=`date "+%H:%M:%S"`
done

참고 URL : https://stackoverflow.com/questions/8710584/filter-by-process-name-and-log-cpu-usage

반응형