簡體   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