【发布时间】:2010-10-04 08:06:51
【问题描述】:
我们的构建速度非常慢。这是一个用Ant 构建的Java 系统,我在Windows XP 上运行我的系统。根据硬件的不同,可能需要 5 到 15 分钟才能完成。
观察机器上的整体性能指标,以及将硬件差异与构建时间相关联,表明该进程受 I/O 限制。它还表明,该过程的读取比写入多得多。
但是,我还没有找到一种好的方法来确定正在读取或写入哪些文件,以及读取或写入了多少次。我的怀疑是,对于我们的许多子项目和编译器的后续调用,构建会多次重新读取相同的常用库。
有哪些分析工具可以告诉我给定进程正在处理哪些文件?免费很好,但不是必需的。
使用Process Monitor, as suggested by Jon Skeet, 我能够证实我的怀疑:几乎所有的磁盘活动都在读取和重新读取库,其中 JDK 的“rt.jar”副本和其他库位于列表顶部。我无法制作足够大的 RAM 磁盘来容纳我使用的所有库,但是将“最热门”的库安装在 RAM 磁盘上可将构建时间缩短约 40%;显然,Windows 文件系统缓存做得不够好,尽管我已经告诉 Windows 对此进行优化。
我注意到一个有趣的事情是,对JAR 文件的典型“读取”操作只有几十个字节;通常有两个或三个,然后在文件中进一步跳过几千字节。它似乎不适合批量读取。
我将在闪存驱动器上使用我的所有第三方库进行更多测试,看看会产生什么效果。
【问题讨论】:
-
一个快速的问题 erickson,您是如何计算出 ProcessMonitor 正在读取多少字节的?我在尝试使用 Windows XP 分析我们的构建时遇到了同样的问题
-
刚刚想通了,在ReadFile操作的Detail列中,比如Offset: N bytes, Length: M bytes等等。
标签: java windows build-process profiling