Appstats for Java (僅適用於 Java 7 執行階段)

Java SDK 包含可用於剖析應用程式 RPC (遠端程序呼叫) 效能的 Appstats 資料庫。App Engine RPC 是應用程式與 App Engine Service API 之間的來回網路呼叫。例如,下列的 API 呼叫皆為 RPC 呼叫:

  • Datastore 呼叫,例如 DatastoreService.get()DatastoreService.put()DatastoreService.query()
  • Memcache 呼叫,例如 MemcacheService.get()MemcacheService.getAll()
  • URL Fetch 呼叫。
  • Mail 呼叫。

可擴充應用程式的最佳化或除錯工作可能相當困難,因為有許多問題可能會導致效能不彰或產生預期外的費用。這些問題非常難以透過常見的資訊來源 (如記錄檔或要求的時間統計資料) 進行偵錯。大多數的應用程式要求會將大部分時間花在等待網路呼叫完成,屬於滿足要求的過程之一。

為了讓應用程式保持快速運作,您必須知道以下事項:

  • 您的應用程式是否發出不必要的 RPC 呼叫?
  • 如要取得相同的資料,是否應對資料進行快取處理,而非重複發出 RPC 呼叫?
  • 如果平行執行多個要求,而非序列執行,應用程式的執行效果是否會更好?

Appstats 資料庫可協助您回答這些問題,並且讓您能夠剖析 RPC 呼叫,以驗證應用程式是否正以最有效的方式使用 RPC 呼叫。Appstats 可讓您追蹤特定要求的所有 RPC 呼叫,以及每次呼叫的時間和成本的相關報表。

(如要進一步瞭解如何管理應用程式的成本,請參閱管理應用程式的資源使用量。)

觀看影片示範。

設定

Appstats 無須下載或安裝,即可開始使用。您只需如下步驟所述,設定您的應用程式、重新部署並存取 Appstats 指控台即可,其餘部分由 Appstats 資料庫負責。

依附元件

您必須將依附元件 appengine-api-labs 新增至您的專案。下列是在 Maven pom.xml 檔案中執行此操作的其中一個方法:

<dependency>
 <groupId>com.google.appengine</groupId>
 <artifactId>appengine-api-labs</artifactId>
 <version>1.9.76</version>
 <!-- <scope>test</scope> -->
</dependency>

1. 安裝事件記錄器

Appstats 使用 Servlet 篩選器 (即 SDK 提供的一種類別) 收集有關各個要求的資訊。請將 <filter><filter-mapping> 元素新增至您的部署描述元 (web.xml),以便在您要監控的要求上安裝篩選器。

如要安裝 servlet 篩選器,請在 web.xml 檔案的頂層元素中,加入類似如下內容的區段:

<filter>
  <filter-name>appstats</filter-name>
   <filter-class>com.google.appengine.tools.appstats.AppstatsFilter</filter-class>
</filter>

<filter-mapping>
  <filter-name>appstats</filter-name>
  <url-pattern>/*</url-pattern>
</filter-mapping>

如此一來,就會將該篩選器安裝到所有含有 <url-pattern>/* 的網址 (這包括下文中所討論的 Appstats 網頁式主控台,您可能會想將此排除在記錄作業之外)。您可以指定不同的模式,將 Appstats 限制在符合該模式的網址。

2. 設定主控台路徑

您可以使用網頁瀏覽器前往您應用程式的網址,進入 Appstats 主控台。請使用 SDK 所提供的 Servlet 類別,將這個主控台設定為應用程式的一部分。

如要設定主控台在網址路徑 /appstats/ 下受到保護,並且僅允許應用程式管理員進行存取,請在 web.xml 檔案的頂層元素中加入下列內容:

<servlet>
  <servlet-name>appstats</servlet-name>
  <servlet-class>com.google.appengine.tools.appstats.AppstatsServlet</servlet-class>
</servlet>

<servlet-mapping>
  <servlet-name>appstats</servlet-name>
  <url-pattern>/appstats/*</url-pattern>
</servlet-mapping>

<security-constraint>
  <web-resource-collection>
    <web-resource-name>appstats</web-resource-name>
    <url-pattern>/appstats/*</url-pattern>
  </web-resource-collection>
  <auth-constraint>
    <role-name>admin</role-name>
  </auth-constraint>
</security-constraint>

3. 選用設定

記錄

您可以將 AppstatsFilter 類別設定為將要求特定資訊寫入至應用程式記錄。如要啟用這項記錄功能,請修改步驟 1 所建立的 filter 元素來加入 logMessage 參數:

<filter>
  <filter-name>appstats</filter-name>
  <filter-class>com.google.appengine.tools.appstats.AppstatsFilter</filter-class>
  <init-param>
    <param-name>logMessage</param-name>
    <param-value>Appstats available: /appstats/details?time={ID}</param-value>
  </init-param>
</filter>

針對篩選器所處理的每一個要求,param-value 的文字值都會附加到記錄,其中 {ID} 會換成要求的 ID。這個範例中的文字會將 Appstats 詳細資料的路徑提供給要求。

由於系統會在「INFO」層級寫入這些記錄項目,所以您也必須將記錄層級設為「INFO」。您可以將以下內容新增到 logging.properties 檔案,為 AppstatsFilter 類別進行具體設定:

com.google.appengine.tools.appstats.AppstatsFilter.level = INFO

顯示成本

AppStats 可以追蹤 RPC 的「成本」和時間。如果應用程式速度夠快,但費用比您預期來得高,請找出成本超出預期的作業。如需開啟成本追蹤功能,請將 appstats 篩選器的 calculateRpcCosts 參數設為 true

<filter>
  <filter-name>appstats</filter-name>
  <filter-class>com.google.appengine.tools.appstats.AppstatsFilter</filter-class>
  <init-param>
    <param-name>calculateRpcCosts</param-name>
    <param-value>true</param-value>
  </init-param>
</filter>

公開存取權

根據預設,只有通過驗證的應用程式管理員才能存取 Appstats 主控台。如要開放主控台的存取權,您必須執行下列兩項操作:

  • 針對步驟 2 所建立的 AppstatsServlet 類別,修改 servlet 元件來加入設為 falserequireAdminAuthentication 參數:

    <servlet>
      <servlet-name>appstats</servlet-name>
      <servlet-class>com.google.appengine.tools.appstats.AppstatsServlet</servlet-class>
      <init-param>
        <param-name>requireAdminAuthentication</param-name>
        <param-value>false</param-value>
      </init-param>
    </servlet>
    
  • 步驟 2 所建立的 security-constraint 元件移除。

4. 從開發伺服器測試 Appstats

您可以使用開發伺服器測試 Appstats 設定。

5. 部署

如果您對 Appstats 設定感到滿意,請部署應用程式。存取網址為 http://your_app_id.appspot.com/appstats 的主控台。

Appstats 主控台導覽

Appstats 主控台會提供各種高階資訊,包括已發出的 RPC 呼叫、要求的網址路徑、近期要求記錄以及個別要求的詳細資料:

  • 「RPC Stats」表格會顯示應用程式發出的各個 RPC 類型統計資料。按一下加號按鈕,便會展開項目,依照 RPC 的路徑要求顯示細項資料:

  • 「Path Stats」表格會顯示傳送到應用程式的每個路徑要求的統計資料。按一下加號按鈕,便會展開項目,依照路徑要求的 RPC 來顯示細項資料:

    如果啟用 API 成本追蹤功能,該表格也會顯示成本。

  • 「Requests History」表格會顯示個別要求的相關資料。按一下加號按鈕,便會展開項目,依照 RPC 顯示細項資料。按一下要求連結,則會顯示要求的時間軸,包括個別 RPC 的時間:

  • RPC 的「Timeline」圖表會顯示發起特定 RPC 呼叫的時間,以及處理要求所花的時間。「RPC Total」的長條代表等待 RPC 呼叫所花的總時間,而「Grand Total」長條則是處理要求所花的總時間。如下列時間軸所示,大多數時間都花在 RPC 呼叫。通常都是如此情況。另一個分頁標籤則會顯示要求的其他相關資訊。在分析效能時,瞭解 RPC 呼叫對應用程式回應時間的影響,是相當重要的一點。

運作方式

Appstats Servlet 篩選器會將本身新增到 App Engine Service API 之下的遠端程序呼叫架構,並記錄要求處理常式期間所有進行的 API 呼叫的統計資料,然後再使用 __appstats__ 的命名空間將資料儲存到 Memcache 中。Appstats 會保留 (大約) 最近 1,000 個要求的統計資料。資料包含摘要記錄,每筆記錄約 200 位元組,並包含詳細的記錄,每筆最多 100 KB。

Java 版的 Appstats 使用固定的值與行為,將資料儲存在 Memcache 和 Datastore 中 (Python 版的 Appstats 可以設定這些值與行為,Java 版則無法設定)。

本頁內容對您是否有任何幫助?請提供意見:

傳送您對下列選項的寶貴意見...

這個網頁
Java 適用的 App Engine 標準環境