문제

좀 달리고 있어 JMeter Java 프로세스에 대해 테스트하여 로드 중인 웹 애플리케이션의 응답 속도(사용자 500명 이상)를 확인합니다.JMeter는 각 웹 요청에 대한 응답 시간을 제공하며 JVM 힙의 현재 크기를 가져오는 X초마다 Tomcat Manager에 ping을 보내는 스크립트를 작성했습니다.

Tomcat에서 사용되는 CPU 비율을 서버에서 통계를 수집하고 싶습니다.나는 다음을 사용하여 쉘 스크립트에서 그것을 시도했습니다. ps 이와 같이:

PS_RESULTS=`ps -o pcpu,pmem,nlwp -p $PID`

...X초마다 명령을 실행하고 결과를 텍스트 파일에 추가합니다.(궁금하신 분들을 위해, pmem = % 메모리 사용량 및 nlwp 스레드 수입니다)

그러나 나는 이것이 내가 원하는 것보다 "CPU 사용률 %"에 대한 다른 정의를 제공한다는 것을 발견했습니다. ps의 맨페이지에 따르면, pcpu 다음과 같이 정의됩니다.

"##.#" 형식의 프로세스 CPU 사용률입니다.사용된 CPU 시간을 프로세스가 실행된 시간(CPU 시간/실시간 비율)으로 나누어 백분율로 표시합니다.

다시 말해서, pcpu 프로세스에 대한 CPU 사용률(%)을 알려줍니다. 일생 프로세스의.

X초마다 샘플을 채취하고 싶기 때문에 현재 시간에만 프로세스의 CPU 사용률을 수집하고 싶습니다. top (마지막 업데이트 이후 프로세스의 CPU 활용).

쉘 스크립트 내에서 이를 어떻게 수집할 수 있나요?

도움이 되었습니까?

해결책

사용 top -b (그리고 다른 출력을 원하는 경우 다른 스위치).저주 창으로 점프하는 대신 stdout으로 덤프됩니다.

다른 팁

JMeter와 같은 테스트를 수행하는 동안 서버를 모니터링하기 위해 제가 찾은 가장 유용한 도구는 다음과 같습니다. dstat.서버에서 다양한 통계를 제공할 뿐만 아니라 스프레드시트로 쉽게 가져올 수 있도록 csv로 출력하고 Python으로 작성된 모듈을 사용하여 도구를 확장할 수 있습니다.

사용자 부하: top -b -n 2 |grep Cpu |tail -n 1 |awk '{print $2}' |sed 's/.[^.]*$//'시스템 부하: top -b -n 2 |grep Cpu |tail -n 1 |awk '{print $3}' |sed 's/.[^.]*$//'유휴 부하: top -b -n 1 |grep Cpu |tail -n 1 |awk '{print $5}' |sed 's/.[^.]*$//'

모든 결과는 소수점 이하입니다.

내 머리 꼭대기에서 시스템 상태의 /proc 파일 시스템 보기를 사용하겠습니다. 남자 5 프록 총 CPU 사용량 정보가 포함된 /proc/PID/stat 항목 형식을 확인하고 /proc/stat를 사용하여 전역 시스템 정보를 가져옵니다."현재 시간" 사용량을 얻으려면 실제로 "지난 N초 동안 사용된 CPU"를 의미할 것입니다.현재 CPU 소비 속도를 확인하려면 짧은 거리에 두 개의 샘플을 취하십시오.그런 다음 이러한 값을 유용한 것으로 만들 수 있습니다.하지만 실제로 이것은 순수한 쉘 스크립트라기보다는 Perl/Ruby/Python 작업에 더 가깝습니다.

프로세스의 절전 평균을 제공하는 /proc/PID/status를 사용하여 대략적인 데이터를 얻을 수 있습니다.그래도 꽤 거친 데이터입니다.

또한 반복 횟수로 1을 사용하면 $delay 시간 내에 다른 스냅샷을 얻기 위해 기다리지 않고 현재 스냅샷을 얻을 수 있습니다.

top -b -n 1
라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top