【问题标题】:Getting max resident/working set size of Windows program from CLI, and user & system run times?从 CLI 获取 Windows 程序的最大驻留/工作集大小,以及用户和系统运行时间?
【发布时间】: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


    【解决方案1】:

    在 Stack Overflow 和 Internet 上的其他地方进行了大量搜索之后,我找到了有关 Win32 API 调用的部分答案,这些答案可以用来获取程序的一些性能测量结果,并且能够使用 MinGW 编译一个小的做我想做的事的 C 程序。我想与其他人分享它,以防他们也在为 Windows 寻找与 /usr/bin/time 在 Linux 和 Mac OS X 上的功能接近的东西:

    http://homepage.mac.com/jafingerhut/files/code/code.html

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-07-01
      • 1970-01-01
      • 2012-05-11
      • 2015-05-21
      • 2010-10-30
      • 2011-03-03
      • 2011-11-24
      • 1970-01-01
      相关资源
      最近更新 更多