2016-11-13 1 views
0

필자는 쉘 스크립팅에 비교적 익숙하며 bash를 사용하여 자체 건강 점검 스크립트를 작성하는 중입니다.쉘 스크립트를 사용하여 CPU로드를 테스트하는 더 빠른 방법입니까?

성능, 가독성 및 유지 관리 측면에서 CPU로드를 테스트하는 다음 스크립트가 있습니까?

#!/bin/sh 

getloadavg5() { 
    echo $(cat /proc/loadavg | cut -f2 -d' ') 
} 

getnumcpus() { 
    echo $(cat /proc/cpuinfo | grep '^processor' | wc -l) 
} 

awk \ 
    -v failthold=0.8 \ 
    -v warnthold=0.7 \ 
    -v loadavg=$(getloadavg5) \ 
    -v numcpus=$(getnumcpus) \ 
    'BEGIN { 
    ratio=loadavg/numcpus 
    if (ratio >= failthold) exit 2 
    if (ratio >= warnthold) exit 1 
    exit 0 
    }' 
+0

Re : 성능, 가독성 및 유지 관리 측면에서 최고입니다. 아니오라고 말합니다. –

+0

좀 더 알려주시겠습니까? –

+1

실제로 무엇을하려고하는지 명확하지 않습니다. 귀하의 질문에 표시된 명령에서 가져온 값은 주어진 순간에 기계가 무엇을하는지 거의 간과하지 않습니다. 두 번째 명령은 단지 정보 용이며 적극적으로 변경되지 않습니다. –

답변

2

이것은 code review stackexchange에 더 적합 할 수도 있지만,이 방법으로로드 평균의 사용을 묵인하지 않고, 여기에 몇 가지 아이디어가 있습니다 :

#!/bin/sh 
read -r one five fifteen rest < /proc/loadavg 
cpus=$(grep -c '^processor' /proc/cpuinfo) 

awk \ 
    -v failthold=0.8 \ 
    -v warnthold=0.7 \ 
    -v loadavg="$five" \ 
    -v numcpus="$cpus" \ 
    'BEGIN { 
    ratio=loadavg/numcpus 
    if (ratio >= failthold) exit 2 
    if (ratio >= warnthold) exit 1 
    exit 0 
    }' 

그것은 불필요한 고양이의이 없습니다/에코.

~ 10 대신 1 ~ 2 회 포킹 (쉘에 따라 다름)으로 인해 더 빨리 실행되기도하지만, 성능이 문제가된다면 쉘 스크립트는 일반적으로 피해야합니다.

+0

답장을 보내 주셔서 감사합니다. 그게 내가 찾고 있던거야. 인프라의 모든 VM에서 일정 간격으로 실행되는 일련의 상태 확인을 구현하는 데 사용할 기술은 무엇입니까? –