【发布时间】:2010-10-27 23:37:39
【问题描述】:
在 Linux 和 Mac OS X 上,我可以使用“time”命令(不是 bash shell 内置命令时间)从 CLI 运行命令,并且不仅可以获取从开始到结束经过的运行时间,还可以获取许多其他统计数据也是如此。例如在 Mac OS X 上:
% /usr/bin/time -lp /usr/bin/wc PS1-01.m4v 6166365 46283357 1532034853 PS1-01.m4v 真正的 27.09 用户 24.65 系统 1.17 1433600 最大驻留集大小 0 平均共享内存大小 0 平均非共享数据大小 0 平均非共享堆栈大小 361 页面回收 1 页面错误 0 次掉期 0 块输入操作 0 块输出操作 已发送 0 条消息 收到 0 条消息 接收到 0 个信号 4 次自愿上下文切换 21604 非自愿上下文切换在 Ubuntu 10.4 上,“/usr/bin/time -v”给出相似但不相同的输出。不过,这对于我的目的来说绝对足够好。
我也可以在 Windows XP + Cygwin 上得到类似的结果。在 Cygwin 上,如果正在测量的命令是“Cygwin 二进制文件”,它可以按我的意愿工作。但是,如果被测量的命令是 not “Cygwin 二进制文件”(例如,在我的情况下,我从命令行运行 Java 虚拟机,指定要在命令行上运行的程序类文件) ,那么似乎 time 命令正在测量“隐藏”shell 进程的统计信息,而不是 Windows 二进制文件。至少,鉴于我所看到的,这是有道理的。我相信这是一个正在测量的 shell 进程,这来自几年前仔细调查此事的人的这封电子邮件,后来在同一个电子邮件线程中,Cygwin 开发人员证实了他的发现:
http://cygwin.ru/ml/cygwin/2001-09/msg00202.html
我最感兴趣的统计数据在 Linux 和 Mac OS X 上称为“最大驻留集大小”(有时缩写为 Max RSS 或 MRSS),但在 Windows 上可能称为“工作集大小”。另一个我想看到的是每个 CPU 内核忙碌(或空闲——我可以自己做 100-x)的时间百分比,对多核系统中的每个内核进行单独测量。还可以获取使用的用户和系统 CPU 时间,这将对应于将 CPU 时间分解为 Windows 内核与用户应用程序运行时间,但是将两者合并为一个数字也可以。请注意,如果程序并行使用多个数字,则这些数字可能长多核系统上的挂钟时间。
我在 Stack Overflow 上看到了 timeit.exe 和 timethis.exe 的其他提及。据我所知,这些似乎只给出了经过的时间。我认为有许多工具可以为我提供进程的当前“工作集大小”,但到目前为止我所知道的唯一工具会在 GUI 窗口中显示该数字。如果我可以使用批处理方法获取信息,这真的对我有用,因为我想对从 CLI 运行的许多不同程序进行性能测试,一次一个从脚本。
【问题讨论】:
标签: performance command-line windows-xp memory-management