* nix衡量内存使用情况

我想测量程序在执行过程中使用的总内存(如RAM)。 理想情况下,就像运行程序的time一样,并在退出时打印统计信息。

unix / linux / bsd世界中是否有这样的标准工具? 谢谢。

编辑

我试图configuration的程序需要几分之一秒才能执行,所以任何暗示“在运行时检查这个”都是行不通的。 这就是为什么我要求一个“时间”像工具。

strace命令可能有些用处。 它会告诉你在什么系统调用时间被占用:

 $ strace -cTv zip /tmp/test.zip /usr/share/dict/words adding: usr/share/dict/words (deflated 73%) % time seconds usecs/call calls errors syscall ------ ----------- ----------- --------- --------- ---------------- 100.00 0.000055 2 34 read 0.00 0.000000 0 21 write 0.00 0.000000 0 12 3 open 0.00 0.000000 0 9 close 0.00 0.000000 0 3 3 access 0.00 0.000000 0 1 rename 0.00 0.000000 0 3 brk 0.00 0.000000 0 1 gettimeofday 0.00 0.000000 0 4 munmap 0.00 0.000000 0 3 mprotect 0.00 0.000000 0 6 _llseek 0.00 0.000000 0 6 rt_sigaction 0.00 0.000000 0 12 mmap2 0.00 0.000000 0 8 1 stat64 0.00 0.000000 0 1 1 lstat64 0.00 0.000000 0 9 fstat64 0.00 0.000000 0 1 fcntl64 0.00 0.000000 0 1 set_thread_area ------ ----------- ----------- --------- --------- ---------------- 100.00 0.000055 141 8 total 

在Linux上,您可以读取/ proc / [pid] / status; VmPeak字段是最大虚拟内存大小,VmHWM是最大驻留集大小。

getrusage()系统调用可能会或可能不会提供帮助。 结构rusage包含例如一个maxrss字段,但至less在Linux上,这从来没有填写。

如果您不介意重复执行几次,则可以使用ulimit -Hv设置shell的内存限制(在Bash中),然后在应用程序成功退出时进行二进制search。

我build议valgrind。 至less,地块应用程序会报告堆使用情况统计信息。

没有标准的工具,除了ps (这不是标准的选项/输出)。 这不会给你time般的可用性。

您可以使用nmon收集系统范围的统计信息,捕获进程的内存使用情况(对于短期进程,这可能无用)。 它支持很多平台。

你可以尝试写你自己的脚本,可以做到这一点。 它可以获得已启动程序的PID,并使用ps或/ proc / [pid] / status来获取有关它的内存信息。 当然,这不会完全表征内存使用情况,但它应该给你一个好主意。

只需使用stream程会计( acctpsacct取决于您的分配)。 进程记帐日志包括“已用内存”统计信息。