此代码
void print_usage(char * msg) { struct rusage usage; getrusage(RUSAGE_SELF, &usage); printf("Limits: %s\n", msg); printf(" %s, %li\n", " maximum resident set size " , usage.ru_maxrss ); printf(" %s, %li\n", " integral shared memory size " , usage.ru_ixrss ); printf(" %s, %li\n", " integral unshared data size " , usage.ru_idrss ); printf(" %s, %li\n", " integral unshared stack size " , usage.ru_isrss ); printf(" %s, %li\n", " page reclaims " , usage.ru_minflt ); printf(" %s, %li\n", " page faults " , usage.ru_majflt ); printf(" %s, %li\n", " swaps " , usage.ru_nswap ); printf(" %s, %li\n", " block input operations " , usage.ru_inblock ); printf(" %s, %li\n", " block output operations " , usage.ru_oublock ); printf(" %s, %li\n", " messages sent " , usage.ru_msgsnd ); printf(" %s, %li\n", " messages received " , usage.ru_msgrcv ); printf(" %s, %li\n", " signals received " , usage.ru_nsignals); printf(" %s, %li\n", " voluntary context switches " , usage.ru_nvcsw ); printf(" %s, %li\n", " involuntary context switches " , usage.ru_nivcsw ); }
即使我在相当大的程序中使用它(在jvm启动之后),对于许多字段也只报告零。
maximum resident set size , 0 integral shared memory size , 0 integral unshared data size , 0 integral unshared stack size , 0 page reclaims , 2514 page faults , 0 swaps , 0 block input operations , 0 block output operations , 0 messages sent , 0 messages received , 0 signals received , 0 voluntary context switches , 137 involuntary context switches , 1
非零字段是“ *vcsw”,“ *flt”。
*vcsw
*flt
所有*rss,*swap,msg*,*block,*signals均为零。
*rss
*swap
msg*
*block
*signals
有东西坏了吗?
Linux是x86 2.6.30。
是的,它被部分破坏了。并非所有字段都由内核填充。http://www.kernel.org/doc/man- pages/online/pages/man2/getrusage.2.html
工作领域:
ru_utime ru_stime ru_maxrss (since Linux 2.6.32) ru_minflt ru_majflt ru_inblock (since Linux 2.6.22) ru_oublock (since Linux 2.6.22) ru_nvcsw (since Linux 2.6) ru_nivcsw (since Linux 2.6)
未使用的字段:
ru_ixrss (unmaintained) ru_idrss (unmaintained) ru_isrss (unmaintained) ru_nswap (unmaintained) ru_msgsnd (unmaintained) ru_msgrcv (unmaintained) ru_nsignals (unmaintained)