[완료]어떤 프로세스의 CpuTime, ElapsedTime 자세하게 구하고 싶은데요...
글쓴이: tsohr / 작성시간: 목, 2007/12/13 - 12:04오후
안녕하세요.
오랜만에 글 올립니다.
프로세스를 계속 모니터링 해야 하는 상황이 생겼습니다.
그냥 모니터링이 아니라 로깅을 해야 합니다.
그래서 ps를 통해서 CPU% 를 넣고 구했더니
총 CPUTIME/총 ETIME이더군요...;
그게 아니고 top처럼 순간사용률이 필요해서
다음과 같이 구하고 있습니다.
bash 스크립트입니다...
$1 = 어떤 pID입니다.
...(생략)... PS_CMD_LAST_CPUTIME=`ps -p $1 -o cputime | tail -n 1 | awk -F: '{sum=0; sec=1;for (i=NF;i>0;i--){sum+=sec*$i;sec*=60;};printf(sum);}'`; PS_CMD_LAST_REALTIME=`ps -p $1 -o etime | tail -n 1 | awk -F: '{sum=0; sec=1;for (i=NF;i>0;i--){sum+=sec*$i;sec*=60;};printf(sum);}'`; ...(생략)... PS_CMD_CURRENT_CPUTIME=`ps -p $1 -o cputime | tail -n 1 | awk -F: '{sum=0; sec=1;for (i=NF;i>0;i--){sum+=sec*$i;sec*=60;};printf(sum);}'`; PS_CMD_CURRENT_REALTIME=`ps -p $1 -o etime | tail -n 1 | awk -F: '{sum=0; sec=1;for (i=NF;i>0;i--){sum+=sec*$i;sec*=60;};printf(sum);}'`; if [[ $PS_CMD_LAST_CPUTIME -ne $PS_CMD_CURRENT_CPUTIME ]] then PS_CMD_CPU_dFLOAT=`echo 'scale=5;('$PS_CMD_CURRENT_CPUTIME' - '$PS_CMD_LAST_CPUTIME') / ('$PS_CMD_CURRENT_REALTIME' - '$PS_CMD_LAST_REALTIME') * 100' | bc`; PS_CMD_CPU_dPERCENT=`printf "%02.1f%%" $PS_CMD_CPU_dFLOAT`; PS_CMD_LAST_CPUTIME=$PS_CMD_CURRENT_CPUTIME; PS_CMD_LAST_REALTIME=$PS_CMD_CURRENT_REALTIME; else continue; fi ...(생략)...
어 근데....
한 CPUTIME이 1초 올라가는데 막 10초 20초 걸리는 경우가 생기더라구요... (( oTL )) 후덜덜;
top치면 뒤에 소수점 2자리까지 시간 보여주잖아요...
그거같이 소수점 자리..
아니면 밀리세컨드를 구하고 싶은데
방법을 못찾겠더군요.
아시는 분은 코멘트좀 부탁드릴께요.
(__)
Forums:
times 시스템콜
시스템콜중에 times 시스템콜을 사용해보세요.
그리고 CPU Time이 늦게 올라간느건 당연한거에요
해당 프로세스가 실제로 CPU를 할당받아서 CPU에서 작업을 한 시간을 체크한 것이니깐요.
머리를 굴려라! 그래야 먹고 산다.
아... 감사합니다.
아... 감사합니다. 그런게 있군요
근데 times를 call한 process 자신의 정보만 보여주는가봐요... ㅠ
사용해야 하긴 하니까..
아무래도 바이너리쪽을 수정하든가 해야겠네요.
좋은하루되세요..
걱정하지 말고 필요한 것을 하나님께 구하고 아뢰십시오. 감사하는 마음으로 하나님께 말씀드리십시오. 그러면 우리 주 예수 그리스도 안에서 그 어느 누구도 측량할 수 없는 평안이 여러분의 마음과 생각 가운데 풍성히 임할 것입니다. - 쉬운성경::빌립보서 4:6-7
times 시스템콜
네 times 시스템콜은 호출한 프로세스의 CPU time과 elapsed time만 구할 수 있을거에요.
여러 프로세스들이 일정한 시간동안에 수행한 시간들을 각각 구하고 싶으시다면
프로세스가 컨텍스트 스위칭 하는 시점에서 각 프로세스들의 수행 시간을
구하면 가능합니다.
물론 커널 코드쪽의 프로세스 스케쥴링 하는 코드쪽에서 작업을 하셔야하죠.
머리를 굴려라! 그래야 먹고 산다.
댓글 달기