原生映像檔建置報告

建置報告是一個針對 GraalVM 原生映像檔量身定制的單一 HTML 頁面報告。該報告提供有關每個建置階段以及產生的二進制檔案內容的廣泛資訊。在這裡,您將學習如何產生建置報告以及如何使用每個報告區段。

注意:建置報告在 GraalVM 社群版中不可用。

目錄 #

報告產生 #

一個簡單的 HelloWorld Micronaut 應用程式(可在GraalVM 演示儲存庫中找到)用於演示建置報告的產生及其結構。

只需在執行 native-image 命令時使用 --emit 選項,即可輕鬆產生建置報告

native-image --emit build-report -cp . Application

在使用 Native Image 的 Maven 外掛程式的 Micronaut 範例中,只需在外掛程式的組態中新增 --emit build-report 選項即可

<plugin>
  <groupId>org.graalvm.buildtools</groupId>
  <artifactId>native-maven-plugin</artifactId>
  <configuration>
    ...
    <buildArgs combine.children="append">
      <buildArg>--emit build-report</buildArg>
      ...
    </buildArgs>
  </configuration>
</plugin>

報告會在建置成功後,自動與產生的二進制檔案一起建立。HTML 頁面的連結(預設名稱為 <二進制檔案名稱>-build-report.html)將會列在建置輸出結尾的 建置成品 區段中

========================================================================================================================
GraalVM Native Image: Generating 'MnHelloRest' (executable)...
========================================================================================================================

...

Build artifacts:
 .../graalvm-demos/micronaut-hello-rest-maven/target/MnHelloRest (executable)
 .../graalvm-demos/micronaut-hello-rest-maven/target/MnHelloRest-build-report.html (build_info) <----- generated report
========================================================================================================================
Finished generating 'MnHelloRest' in 36.0s.

此外,可以將報告的檔案名稱或路徑附加至 build-report 引數來自訂。當使用不同的組態建立同一個應用程式的多個二進制檔案時,這會非常有用

native-image -0b --emit build-report=/tmp/application-build-report-default.html -cp . Application
native-image -0s --emit build-report=/tmp/application-build-report-size-optimized.html -cp . Application

報告結構 #

每個報告頁面都由多個區段或標籤組成,每個區段都顯示與其標題對應的資料。最初顯示的是 摘要 區段,還有 程式碼區映像檔堆積資源軟體材料清單 (SBOM)PGO 取樣設定檔(僅在 PGO 建置中)區段。以下小節將詳細說明每個區段。

摘要 #

摘要 區段提供建置的一般概述。此區段由四個小節組成,這些小節對應於建置過程中的一個階段或提供其他有用的資訊

  • 環境 提供建置中使用的環境的資訊(Java 版本、GraalVM 版本、Graal 編譯器組態等等)。
  • 分析結果 顯示點對點分析(類型、欄位和方法)的結果,並按類別(可達、反映、JNI 和已載入)分組。
  • 映像檔詳細資料 提供二進制檔案內容的概述。該圖表以視覺方式呈現二進制檔案的不同部分(程式碼區、映像檔堆積、偵錯資訊和其他資料)在大小方面的關聯性。
  • 安全性報告 報告有關建置的各種安全性相關資訊(反序列化、內嵌 SBOM 和向後邊緣控制流程完整性 (CFI))。
  • 資源使用量 提供有關建置所用資源(記憶體回收、峰值 RSS 和 CPU 負載)以及產生二進制檔案所花費總時間的其他資訊。

Summary Preview

注意:將滑鼠游標移至 映像檔詳細資料 中的每個長條上,即可查看更多資訊。此外,按一下 程式碼區映像檔堆積 長條,即可連結到其各自的區段。

所有這些資訊也以 JSON 格式提供,並且可以按一下頁面右上角的 以 JSON 格式下載 來下載。

程式碼區 #

程式碼區 區段提供在靜態分析後找到可達程式碼的深入檢視。它由兩個相互關聯的部分組成:一個分項圖表和一個套件和類別清單

基於方法的分項

二進制檔案的程式碼區會按細粒度的方法級別依套件進行分項。此分項僅考慮由點對點分析找到的可達方法。它以旭日圖的形式視覺化:一個階層式的多層圓餅圖。

此圖表顯示不同套件(和類別)彼此之間的關聯性。比例是根據累積方法位元組碼大小(預設)或方法的總數來計算的。可以使用頁面右上角的 分項類型 下拉式清單來選取此選項。

Code Breakdown Type

注意:使用固定的臨界值來限制圖表上顯示的資料量(相對於目前根套件的總百分比的 0.1)。此臨界值適用於分項圖表,而下面的表格則包含完整的套件和類別清單(在目前的層級上)。

百分比(顯示在每個套件弧中)表示同層套件之間的關係。所有百分比都是相對於根套件(最上層檢視的抽象 總計 套件,以及向下鑽研時的任意套件)計算的。此外,您可以透過將滑鼠游標移至該套件弧上,查看特定套件的具體值(其方法位元組碼大小或方法總數)。

Code Breakdown Tooltip

此分項最重要的功能是能夠深入探索任意套件的關係。只需按一下任何感興趣的套件(至少有一個子套件或類別)即可輕鬆實現。按一下「根」套件(在圖表中心),即可同樣地反向操作,即返回上一層父套件。

也可以返回向下鑽研鏈中的任何套件(從 總計 到目前套件)。只需按一下圖表正上方顯示的向下鑽研鏈中的特定套件即可輕鬆實現。

Code Breakdown Drill Down

此外,分項圖表和套件與類別清單是同步的,每個向下鑽研都會同時更新下方的表格,反之亦然。

套件和類別清單

套件和類別清單是主分項的延伸。它會列出屬於所選套件(最初為 總計)的每個套件和類別。此表格也會顯示每個套件和類別的所有資訊:其方法位元組碼大小(或方法總數)及其相對百分比。

具有子項(至少一個套件或類別)的套件會顯示為連結。按一下連結即可在分項圖表中向下鑽研,它們是同步的。同樣地,按一下 ↑(顯示在第一列中)即可反向操作,即返回上一層(父套件)。

List of Packages and Classes

注意:僅會列出所選套件的直接子系(並在每次向下鑽研時更新)。

映像檔堆積 #

二進制檔案的物件堆積會被分解,並按物件類型分組(類似於 CLI 建置輸出中的 映像檔堆積 表格)。主要區別在於,建置報告會顯示物件類型的完整清單,以及更多詳細資訊,例如其計數、大小和相對百分比(以進度列的形式視覺化)。

完整清單的一個常見使用案例是判斷特定類別的任何執行個體是否為映像檔堆積的一部分(使用在頁面中尋找)。

Image Heap Breakdown Preview

資源 #

「資源」標籤可用於探索原生映像檔中包含的 Java 資源、其來源,以及其大小如何影響整體映像檔大小。這會很有用,例如,偵測因不正確的可達性元數據而意外包含或遺失的資源。

所有資源都會列在主表格中。預設情況下,會顯示透過組態檔明確要求的資源。此外,還有提供另外三種資源

  • 遺失的資源是透過組態檔要求的,但系統上不存在。
  • 注入的資源是透過 GraalVM SDK 以程式設計方式註冊的(通常由架構使用來協助原生映像檔編譯)。
  • 目錄資源是一種特殊類型的資源,表示目錄(通常很小,因為它們只包含該目錄內檔案和目錄的名稱)。可以在表格中透過其對應的核取方塊顯示每種資源類型。

可以使用左上角的搜尋方塊依名稱篩選表格中的資源。此外,可以使用表格標頭中專用的 &updownarrow; 排序按鈕,按任何資源屬性排序清單。

Resources Preview

軟體材料清單 (SBOM) #

軟體材料清單代表建置最終二進制檔案中涉及的所有成品的清單。每個成品都由其完整名稱(組織名稱 + 成品名稱)及其特定版本唯一識別。建置中使用的所有成品都會列在表格中。

SBOM Preview

所有這些資訊也以 JSON 格式在 CycloneDX 格式中提供,並且可以按一下以 JSON 格式下載來下載。

PGO 取樣設定檔 #

PGO 取樣設定檔是一個區段,僅在建置PGO 最佳化二進制檔案時產生的報告中才會出現。此區段在其專用的 PGO 指南中有詳細說明 - 在建置報告中檢查設定檔

與我們聯繫