CPU 및 메모리 사용량을 동적으로 캡처하십시오
-
03-07-2019 - |
문제
API의 성능을 측정하는 C ++ 응용 프로그램을 실행하기 위해 쉘 스크립트를 실행 중입니다. API의 대기 시간 (주어진 매개 변수 세트의 값을 반환하는 데 걸리는 시간)을 캡처 할 수 있지만 5-10 초의 간격과 함께 CPU 및 메모리 사용량을 캡처하고 싶습니다.
시스템의 성능에 너무 많은 영향을 미치지 않고 동일한 스크립트 내 에서이 작업을 수행 할 수있는 방법이 있습니까? 나는 우리가 실행중인 대본의 밖에서 (독립적으로) 할 수있는 많은 예를 찾았다. 그러나 우리가 같은 스크립트 내에서 할 수있는 곳은 아닙니다.
해결책
나는 사용하는 것이 좋습니다 '시각'명령과 또한'vmstat' 명령. 첫 번째는 CPU에 실행 가능한 실행을 사용하고 시스템의 CPU/메모리/IO의 두 번째주기 (예 : 초당 1 회) 덤프를 제공합니다.
예시:
time dd if=/dev/zero bs=1K of=/dev/null count=1024000
1024000+0 records in
1024000+0 records out
1048576000 bytes (1.0 GB) copied, 0.738194 seconds, 1.4 GB/s
0.218u 0.519s 0:00.73 98.6% 0+0k 0+0io 0pf+0w <== that's time result
다른 팁
전체 Linux 상자에 동적으로 CPU 및 MEM 이용을 캡처하려는 경우 다음 명령을 따르면 다음에 도움이 될 수 있습니다.
CPU
vmstat -n 15 10| awk '{now=strftime("%Y-%m-%d %T "); print now $0}'> CPUDataDump.csv &
vmstat
CPU 카운터 수집에 사용됩니다
-n
지연 값의 경우이 경우 15 초마다 15 초마다 통계가 수집됩니다.
그 다음에 10
간격의 수입니다.이 예에서는 10 회 반복이 있습니다.
awk '{now=strftime("%Y-%m-%d %T "); print now $0}'
이것은 각 반복의 타임 스탬프를 버립니다
결국, 덤프 파일은 &
연속
메모리
free -m -s 10 10 | awk '{now=strftime("%Y-%m-%d %T "); print now $0}'> DataDumpMemoryfile.csv &
free
Mem Stats Collection 용입니다
-m
이것은 MEM 단위를위한 것입니다 (당신은 사용할 수 있습니다. -b
바이트의 경우, -k
킬로 바이트의 경우 -g
기가 바이트 용)
그 다음에 10
간격 수입니다 (이 예에서는 10 회 반복이있을 것입니다)
awk'{now=strftime("%Y-%m-%d %T "); print now $0}'
이것은 각 반복의 타임 스탬프를 버립니다
결국, 덤프 &
연속