임베디드 리눅스의 프로세스 과부하 체크 방법? top이용
임베디드 리눅스에서 프로세스의 과부하정도를 체크해보고 싶은데요
top 명령을 통해서 현재 프로세스에 대한 정보들이 많이 나오고 있습니다.
처음에 언뜻 보기에는 CPU% 라는 항목이 해당 프로레스의 CPU부하율인줄 알고
착각한 부분이있었는데요
top명령에 대해 검색을 해보면
PID : 프로세스 ID (PID)
USER : 프로세스를 실행시킨 사용자 ID
PRI : 프로세스의 우선순위 (priority)
NI : NICE 값. 일의 nice value값이다. 마이너스를 가지는 nice value는 우선순위가 높다.
VIRT : 가상 메모리의 사용량(SWAP+RES)
SHR : 분할된 페이지, 프로세스에 의해 사용된 메모리를 나눈 메모리의 총합.
S : 프로세스의 상태
%CPU : 프로세스가 사용하는 CPU의 사용율<-----------------------------------부하율이 아니고 사용율
%MEM : 프로세스가 사용하는 메모리의 사용율
COMMAND : 실행된 명령어
RES : 현재 페이지가 상주하고 있는 크기(Resident Size)
현재 프로세스의 돌린상태에서 top명령을 통해 %CPU의 상태를 관찰하면 20~80% 가끔 90%까지 올라갈 경우가 있습니다.
%CPU가 과부하의 의미였다면 90%까지 가는것이 문제가 될듯 한데 CPU의 사용율의 의미라면 90%까지 상승하는것이 큰 문제&이슈 거리가 될수 있을까요?
CPU의 과부하 체크방법은 따로 있는건가요? 검색을 해보면 %CPU를 이용해서 여러가지 계산을 해서 과부하를 따로 구하는것 같은데 조언 부탁드리겠습니다.
셀스크립트면 되지 않나요?
while true
do
sleep 1800
PATH=/usr/bin:/usr/sbin:/usr/ccs/bin:/bin:/sbin:/usr/local/bin
DATE=`date +%Y%m%d`
CHECK_TIME=`date +%Y%m%d-%H:%M`
VMSTAT=`vmstat | grep -v cpu | grep -v id | sed 's/^ //' | sed 's/ \{2,\}/ /g'`
CPUIDL=`echo ${VMSTAT} | cut -d" " -f 22`
SWAPFREE=`echo ${VMSTAT} | cut -d" " -f 4`
MEMFREE=`echo ${VMSTAT} | cut -d" " -f 5`
echo "${CHECK_TIME},${CPUIDL},${MEMFREE},${SWAPFREE},${IOKRS},${IOKWS},${IOWAIT}
" >> shells/load_${DATE}.log
done
해당 프로세스를 죽였을때랑 실행했을때 차이를 보면 될듯합니다.
c로 만든건지 java로 만든거지에 따라서 분석 방법이 다르겠지요.
과부하라는 수치가 구체적으로 무엇을 의미하는 먼저
과부하라는 수치가 구체적으로 무엇을 의미하는 먼저 생각해 보셔야 할 것 같습니다.
top같은 모니터링 프로그램에서 나오는 수치는 말씀하신 것처럼 사용율의 의미 입니다.
계속해서 쉬지 않고 뭔가 연산을 하는 프로그램이라면 실행되는 동안 100%에 가까운 사용율을 가지는 것이 맞는 것 같습니다.
+1
부연하자면 시스템 상태를 감시하는데 "몇 %가 넘으면 과부하"라는 편리한 수치는 없습니다. 그때그때 상황에 따라 다릅니다.
CPU를 계속 써야 하는 프로그램이 돌고 있는데 부하가 100%에 근접하지 않으면 그건 시스템이 비효율적으로 놀고 있는 거지요.
댓글 달기