[완료]어떤 프로세스의 CpuTime, ElapsedTime 자세하게 구하고 싶은데요...

tsohr의 이미지

안녕하세요.

오랜만에 글 올립니다.

프로세스를 계속 모니터링 해야 하는 상황이 생겼습니다.
그냥 모니터링이 아니라 로깅을 해야 합니다.

그래서 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자리까지 시간 보여주잖아요...
그거같이 소수점 자리..
아니면 밀리세컨드를 구하고 싶은데
방법을 못찾겠더군요.
아시는 분은 코멘트좀 부탁드릴께요.

(__)

uosarang의 이미지

시스템콜중에 times 시스템콜을 사용해보세요.
그리고 CPU Time이 늦게 올라간느건 당연한거에요
해당 프로세스가 실제로 CPU를 할당받아서 CPU에서 작업을 한 시간을 체크한 것이니깐요.

머리를 굴려라! 그래야 먹고 산다.

tsohr의 이미지

아... 감사합니다. 그런게 있군요
근데 times를 call한 process 자신의 정보만 보여주는가봐요... ㅠ
사용해야 하긴 하니까..
아무래도 바이너리쪽을 수정하든가 해야겠네요.
좋은하루되세요..

걱정하지 말고 필요한 것을 하나님께 구하고 아뢰십시오. 감사하는 마음으로 하나님께 말씀드리십시오. 그러면 우리 주 예수 그리스도 안에서 그 어느 누구도 측량할 수 없는 평안이 여러분의 마음과 생각 가운데 풍성히 임할 것입니다. - 쉬운성경::빌립보서 4:6-7

uosarang의 이미지

네 times 시스템콜은 호출한 프로세스의 CPU time과 elapsed time만 구할 수 있을거에요.

여러 프로세스들이 일정한 시간동안에 수행한 시간들을 각각 구하고 싶으시다면

프로세스가 컨텍스트 스위칭 하는 시점에서 각 프로세스들의 수행 시간을

구하면 가능합니다.

물론 커널 코드쪽의 프로세스 스케쥴링 하는 코드쪽에서 작업을 하셔야하죠.

머리를 굴려라! 그래야 먹고 산다.

댓글 달기

Filtered HTML

  • 텍스트에 BBCode 태그를 사용할 수 있습니다. URL은 자동으로 링크 됩니다.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>
  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.

BBCode

  • 텍스트에 BBCode 태그를 사용할 수 있습니다. URL은 자동으로 링크 됩니다.
  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param>
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.

Textile

  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • You can use Textile markup to format text.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>

Markdown

  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • Quick Tips:
    • Two or more spaces at a line's end = Line break
    • Double returns = Paragraph
    • *Single asterisks* or _single underscores_ = Emphasis
    • **Double** or __double__ = Strong
    • This is [a link](http://the.link.example.com "The optional title text")
    For complete details on the Markdown syntax, see the Markdown documentation and Markdown Extra documentation for tables, footnotes, and more.
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>

Plain text

  • HTML 태그를 사용할 수 없습니다.
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.
  • 줄과 단락은 자동으로 분리됩니다.
댓글 첨부 파일
이 댓글에 이미지나 파일을 업로드 합니다.
파일 크기는 8 MB보다 작아야 합니다.
허용할 파일 형식: txt pdf doc xls gif jpg jpeg mp3 png rar zip.
CAPTCHA
이것은 자동으로 스팸을 올리는 것을 막기 위해서 제공됩니다.