Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/macos/8.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
命令行java程序的磁盘I/O_Java_Macos_Performance_Command Line_Io - Fatal编程技术网

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

命令行java程序的磁盘I/O,java,macos,performance,command-line,io,Java,Macos,Performance,Command Line,Io,我有一个简单的问题,我在网上读过,但找不到简单的解决方案: 我在命令行上运行一个java程序,如下所示,该程序访问数据库: java-jarmyprogram.jar 我想要一个简单的机制来查看这个程序(在OSX上)执行的磁盘I/O数量。 到目前为止,我遇到了iotop,但是如何让iotop测量myProgram.jar的磁盘I/O 我是否需要像JProfiler这样的探查器是否获取此信息?iotop是一个实用工具,它按IO消耗/利用率的降序为您提供前n个进程 最重要的是,它是一个实时监控实用程

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

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

java-jarmyprogram.jar

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


我是否需要像
JProfiler这样的探查器
是否获取此信息?

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

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

我建议使用sar。你可以阅读更多关于它的内容

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

sar最好的地方是,当程序运行时,您可以使用守护程序收集数据,然后使用

根据我的说法,你可以遵循以下方法

  • 启动sar监控,每n秒采集一次sar数据。n的值取决于程序的大致执行时间 示例:如果您的程序需要10秒执行,则每秒监视是好的,但如果您的程序需要1小时执行,则每分钟或30秒监视。这将最小化sar处理的开销,并且您的数据仍然是有意义的

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

  • 程序执行结束

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

  • 停止搜索

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

    您可以使用探查器进行同样的操作,但它们几乎没有缺点

  • 他们需要自己的代理(代理将有自己的开销)
  • 其中有些不是免费的
  • 其中一些不容易设置
  • 可能提供或不提供足够/所需的数据 除此之外,使用内置/系统级实用程序总是有益的


    我希望这会有所帮助。

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

    此外,即使您已经用OsX标记了这个问题,但请务必在问题中提到您正在使用OsX

    如果您正在寻找脱机数据—这些数据是Unix基础系统中的文件系统提供的,但不幸的是,OSX中缺少这些数据,


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

    您的Java程序正在作为操作系统程序
    Java
    运行,因此使用
    iotop
    iotop
    监视当前正在运行的程序,对吗?那么,我怎样才能在之后检查这个统计数据呢?另外,我应该监控
    iotop
    中的哪个字段?谢谢,这篇博文非常有用。我的一个问题是,这些命令似乎只报告正在运行的进程的i/O。因此,如果我的java程序很快就完成了,我该如何检查该程序的I/O统计数据?我的java程序的进程ID没有显示在中,例如
    iosnoop
    。有什么建议吗?