Java 性能分析工具:操作系統工具

引言

性能分析的前提是將應用程序內部的運行狀況以及應用運行環境的狀況以一種可視化的方式更加直接的展現出來,如何來達到這種可視化的展示呢?我們需要配合使用操作系統中集成的程序監控工具和 Java 中內置的監控分析工具來進行Java 程序的性能分析。本文為系列文章,共三篇分別介紹這幾類工具。在本文中將介紹操作系統中的性能監控工具。

操作系統中的程序性能監控工具並非只針對於 Java 程序,適用於所有運行其中的程序。在基於 UNIX 的操作系統中,有許多命令行工具可以用來監控程序的運行狀況,例如 sar,vmstat,iostat,prstat 等等。在 Windows 操作系統中,既有圖形化用戶界面的資源監控器 Perfmon(Performance Monitor),也有如 typeperf 的命令行工具。

Advertisements

進行性能測試時,我們需要通過操作系統提供的工具收集操作系統中的各類資源監控數據,包括CPU、內存和硬碟的使用數據,如果被測試程序使用了網路,還需要收集網路使用數據。只有收集的數據足夠完整和充分,性能測試的結果才會更準確,性能分析也會更加容易進行。下面將首先介紹在 UNIX/類 UNIX 系統中各類資源的監控和分析的方法。

Linux 系統資源的監控

CPU 使用率

CPU使用時間分為兩類:用戶時間(User Time)和系統時間(System Time),系統時間在 Windows 系統中被稱為特權時間(Privileged Time)。用戶時間為 CPU 執行應用程序代碼的時間,而系統時間則為 CPU執行操作系統內核代碼的時間比例。系統時間與應用程序本身有關,例如當應用程序執行 I/O操作時,操作系統內核將會執行從硬碟讀取文件的代碼,或者執行向網路數據緩存中寫入數據的代碼。應用程序中任何需要使用操作系統底層資源的行為都會導致應用程序佔用更多的系統時間。

Advertisements

性能調優的終極目標是在單位時間內最大限度提高 CPU 使用率。CPU使用率是在一個特定時間間隔內的平均值,這個時間間隔可以是 30 秒,也可以是 1 秒。比如,一個程序需要 10 分鐘執行完成,在此期間該程序的CPU 使用率為 50%。當對程序代碼優化之後,CPU 使用率提高為 100%,那麼該程序的性能將提升一倍,只需要 5分鐘執行完成。當該程序再次優化代碼使用 2 個 CPU,CPU 的使用率依然為 100%,那麼該程序將只需要 2.5分鐘執行結束。從這個例子可以看出,CPU 使用率能夠反應程序使用 CPU 的效率,CPU 使用率越高程序性能越好,反之亦然。

在Linux 操作系統中執行 vmstat 5 命令,將會得到如清單 1 中的數據(每 5 秒增加一行)。為了易於理解,此例中的程序只使用單線程運行,在多線程環境中同樣適用。從示例數據中第一行數據可以知道,在 5 秒內,CPU一共被使用了 2.25 秒(5*(37%+8%)),其中 37%的時間用於執行用戶代碼,8%的時間用戶執行系統代碼。剩餘的 2.75 秒 CPU處於閑置狀態(idle)。

清單 1. vmstat 5 命令結果

以下三點原因會造成 CPU 閑置:

  1. 應用程序被線程的同步操作阻塞,直到鎖被釋放;

  2. 應用程在等待某些請求的響應,例如等待數據查詢請求的響應;

  3. 應用程序無事可做;

前兩種情況比較容易理解,也有對應的調優方式。針對原因一,如果能夠減少鎖的競爭,或者調整資料庫返回請求資源的性能,那麼應用程序會運行的更快;對於原因二,優化請求響應方,提高響應速度;那麼在其他條件不變的情況下,應用程序會運行的更快,CPU 使用率也會提高。

第三種情況當應用程序有事去做時,CPU 將利用 CPU周期去執行應用程序的代碼。這是一條通用的規則。當執行一段無限循環的代碼(如下所示)時,它將會再消耗一個 CPU100%的時間。如果 CPU 的使用率並沒有達到100%,意味著操作系統應該執行無限循環,但它並沒有去做而是處於閑置狀態。這種情況對於無限循環並沒有多少影響,但是如果我們的程序是用來計算一個表達式的結果,那麼這種情況將會導致計算的速度變慢。

清單 2. 無限循環示例

當在一台單核機器上運行清單 2中的代碼,絕大多數時間我們不會注意到它在運行。但是如果啟動另一個程序或者監控另一個程序的性能時,這種影響就會體現出來。操作系統善於利用時間切片程序來競爭 CPU 周期,但是最新啟動的程序只能獲得極少的的可用 CPU 周期。有一種解決問題的方案,那就是留出一定比例的閑置 CPU周期以防有其他程序需要使用 CPU。但是這種方案暴露出來的問題就是操作系統無法知曉下一步操作,操作系統只能去執行當前所有的操作而不會留出閑置的CPU 周期。

Advertisements

你可能會喜歡