繁体   English   中英

命令行 java 程序的磁盘 I/O

[英]disk I/O of a command line java program

我有一个简单的问题,我已经在网上阅读但找不到简单的解决方案:

我在命令行上运行一个访问数据库的java程序,如下所示:

java -jar myProgram.jar

我想要一个简单的机制来查看这个程序(在 OSX 上)执行的磁盘 I/O 的数量。 到目前为止,我遇到了iotop ,但是如何让iotop测量 myProgram.jar 的磁盘 I/O?

我需要像JProfiler这样的分析器来获取这些信息吗?

iotop 是一个实用程序,它为您提供按 IO 消耗/利用率降序排列的前 n 个进程。

最重要的是,它是一个实时监控实用程序,这意味着它的输出每 n 秒(或您指定的时间间隔)更改一次。 尽管您可以将其重定向到文件,但您需要在绘制图形后解析该文件并找出有意义的数据。

我建议使用 sar。 你可以在这里阅读更多关于它的信息

它是 linux/unix 中最低级别的监控实用程序。 它将为您提供比 iotop 更多的数据。

关于 sar 最好的一点是,您可以在程序运行时使用守护进程收集数据,然后使用ksar对其进行分析

据我说,您可以按照以下方法,

  1. 启动sar监控,每隔n秒收集一次sar数据。 n 的值取决于程序的大致执行时间。

示例:如果您的程序需要 10 秒执行,那么每秒监控一次很好,但如果您的程序需要 1 小时执行,那么每分钟或 30 秒监控一次。 这将最大限度地减少 sar 进程的开销,并且您的数据仍然是有意义的。

  1. 等待一段时间(以便在程序启动之前获取数据)然后启动程序

  2. 程序执行结束

  3. 再次等待一段时间(以便在程序完成后获取数据)

  4. 停止萨尔。

使用 ksar 监控/可视化 sar 数据。 首先,检查磁盘利用率,然后检查磁盘的 IOPS。

您可以将 Profiler 用于相同的事情,但它们几乎没有缺点,

  1. 他们需要自己的代理(代理将有自己的开销)
  2. 其中一些不是免费的。
  3. 其中一些不容易设置。
  4. 可能会或可能不会提供足够/所需的数据。

除了这个恕我直言,使用内置/系统级实用程序总是有益的。

我希望这可以帮到你。

您的 Java 程序最终将成为主机系统的进程,因此您需要为自己的进程 ID 过滤掉监控工具的输出。 请参阅此博客文章脚本部分

此外,即使您使用 OsX 标记了问题,但确实提到您正在使用 OsX。

如果您正在寻找脱机数据 - 由 Unix 基础系统中的proc文件系统提供,但不幸的是 OSX 中缺少该数据,Mac OS X 上的 /proc 文件夹在哪里?
/proc 在 Mac OS X 上

您可能会选择编写一个小脚本来从磁盘和进程监控工具中为您的进程 ID 转储数据。 您可以通过进程名称在脚本中获取进程 ID,将脚本放入循环中以查找该进程名称并在执行 Java 程序之前启动脚本。 当脚本找到上述进程时,它将按照您决定的时间间隔不断地从您选择的命令中转储相关数据。 一旦您的程序结束,日志转储脚本也会终止。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM