本頁提供有關性能監控入門或使用性能監控功能和工具的故障排除提示。
首先檢查故障排除
以下兩項檢查是在進一步排除故障之前建議任何人進行的一般最佳實踐。
1. 檢查性能事件的日誌消息
檢查日誌消息以確保性能監控 SDK 正在捕獲性能事件。
通過將
<meta-data>
元素添加到應用程序的AndroidManifest.xml
文件中,在構建時啟用性能監控的調試日誌記錄,如下所示:<application> <meta-data android:name="firebase_performance_logcat_enabled" android:value="true" /> </application>
檢查日誌消息中是否有任何錯誤消息。
性能監控使用
FirebasePerformance
標記其日誌消息。使用 logcat 過濾,您可以通過運行以下命令專門查看持續時間跟踪和 HTTP/S 網絡請求日誌記錄:adb logcat -s FirebasePerformance
檢查以下類型的日誌,這些日誌表明性能監控正在記錄性能事件:
-
Logging trace metric: TRACE_NAME , FIREBASE_PERFORMANCE_CONSOLE_URL
-
Logging network request trace: URL
-
單擊 URL 可在 Firebase 控制台中查看您的數據。儀表板中的數據更新可能需要一些時間。
如果您的應用沒有記錄性能事件,請查看故障排除提示。
2.檢查 Firebase 狀態儀表板
檢查Firebase 狀態儀表板,以防 Firebase 或性能監控出現已知中斷。
性能監控入門
如果您開始使用性能監控 ( iOS+ | Android | Web ),以下故障排除提示可以幫助解決涉及 Firebase 檢測 SDK 或在 Firebase 控制台中顯示第一個性能數據的問題。
當 Firebase 從您的應用收到事件信息(例如應用交互)時,它可以檢測您是否已成功將性能監控 SDK 添加到您的應用。通常在啟動應用後 10 分鐘內,Firebase 控制台的性能儀表板會顯示“檢測到 SDK”消息。然後,在 30 分鐘內,儀表板將顯示初始處理的數據。
如果自您將最新版本的 SDK 添加到應用程序以來已經超過 10 分鐘,並且您仍然沒有看到任何更改,請檢查日誌消息以確保性能監控正在記錄事件。嘗試按照如下所述執行適當的故障排除步驟來排除 SDK 檢測消息延遲的故障。
確保您使用的是性能監控 Android SDK 19.1.0 或更高版本(或 Firebase BoM 26.3.0 或更高版本),請參閱發行說明。
如果您仍在本地開發,請嘗試生成更多事件以進行數據收集:
- 通過在後台和前台之間多次切換應用程序、通過跨屏幕導航與應用程序交互和/或觸發網絡請求來生成事件。
確保您的Firebase 配置文件(
google-services.json
) 已正確添加到您的應用中,並且您尚未修改該文件。具體來說,檢查以下內容:配置文件名未附加其他字符,例如
(2)
。配置文件位於應用程序的模塊(應用程序級)目錄中。
配置文件中列出的 Firebase Android 應用 ID (
mobilesdk_app_id
) 對於您的應用來說是正確的。在項目設置的您的應用卡中找到您的 Firebase 應用 ID。
如果您的應用程序中的配置文件出現任何問題,請嘗試以下操作:
刪除應用程序中當前的配置文件。
按照以下說明下載新的配置文件並將其添加到您的 Android 應用程序中。
如果 SDK 正在記錄事件並且一切似乎都已正確設置,但您仍然沒有看到 SDK 檢測消息或已處理的數據(10 分鐘後),請聯繫 Firebase 支持。
檢查性能監控Gradle插件的設置,如下:
確保您正確添加了插件。具體來說,檢查以下內容:
- 您在模塊(應用程序級)
build.gradle
文件中添加了插件(
)。apply plugin: 'com.google.firebase.firebase-perf' - 您在項目級
build.gradle
文件中包含了插件的類路徑依賴項 (
)。classpath 'com.google.firebase:perf-plugin:1.4.2'
- 您在模塊(應用程序級)
-
instrumentationEnabled
在您的模塊(應用程序級)build.gradle
文件中 firebasePerformanceInstrumentationEnabled
在gradle.properties
文件中啟用
-
通過
AndroidManifest.xml
文件中的以下任一標誌檢查是否未禁用性能監控 SDK :-
firebase_performance_collection_enabled
-
firebase_performance_collection_deactivated
-
確保性能監控在運行時未禁用。
如果您找不到應用中禁用的任何內容,請聯繫 Firebase 支持。
性能監控會先處理性能事件數據,然後再將其顯示在性能儀表板中。
如果自“檢測到 SDK”消息出現以來已超過 24 小時,並且您仍然看不到數據,請檢查Firebase 狀態儀表板,以防出現已知的中斷。如果沒有出現中斷,請聯繫 Firebase 支持。
一般故障排除
如果您已成功添加 SDK 並在應用程序中使用性能監控,則以下故障排除提示可以幫助解決涉及性能監控功能和工具的一般問題。
如果您沒有看到性能事件的日誌消息,請嘗試以下故障排除步驟:
檢查性能監控Gradle插件的設置,如下:
確保您正確添加了插件。具體來說,檢查以下內容:
- 您在模塊(應用程序級)
build.gradle
文件中添加了插件(
)。apply plugin: 'com.google.firebase.firebase-perf' - 您在項目級
build.gradle
文件中包含了插件的類路徑依賴項 (
)。classpath 'com.google.firebase:perf-plugin:1.4.2'
- 您在模塊(應用程序級)
-
instrumentationEnabled
在您的模塊(應用程序級)build.gradle
文件中 firebasePerformanceInstrumentationEnabled
在gradle.properties
文件中啟用
-
通過
AndroidManifest.xml
文件中的以下任一標誌檢查是否未禁用性能監控 SDK :-
firebase_performance_collection_enabled
-
firebase_performance_collection_deactivated
-
確保性能監控在運行時未禁用。
如果您找不到應用中禁用的任何內容,請聯繫 Firebase 支持。
如果您缺少屏幕渲染跟踪數據,請嘗試以下故障排除步驟:
確保您使用的是最新版本的 Android SDK (v20.4.1)。屏幕渲染跟踪僅適用於 v15.2.0 或更高版本。
確保您沒有手動禁用屏幕的硬件加速。
確保您沒有使用 DexGuard 或 Jack。性能監控與這些工具鏈不兼容。
您是否看到了自動收集的跟踪的性能數據,但沒有看到自定義代碼跟踪的性能數據?請嘗試以下故障排除步驟:
如果您通過Trace API檢測自定義代碼跟踪,請檢查跟踪的設置,尤其是以下內容:
- 自定義代碼跟踪和自定義指標的名稱必須滿足以下要求:沒有前導或尾隨空格、沒有前導下劃線 (
_
) 字符、最大長度為 32 個字符。 - 所有跟踪都必須啟動和停止。任何未啟動、未停止或在啟動之前停止的跟踪都不會被記錄。
- 自定義代碼跟踪和自定義指標的名稱必須滿足以下要求:沒有前導或尾隨空格、沒有前導下劃線 (
如果您通過
@AddTrace
符號檢測自定義代碼跟踪,請檢查性能監控 Gradle 插件的設置:確保您正確添加了插件。具體來說,檢查以下內容:
- 您在模塊(應用程序級)
build.gradle
文件中添加了插件(
)。apply plugin: 'com.google.firebase.firebase-perf' - 您在項目級
build.gradle
文件中包含了插件的類路徑依賴項 (
)。classpath 'com.google.firebase:perf-plugin:1.4.2'
- 您在模塊(應用程序級)
-
instrumentationEnabled
在您的模塊(應用程序級)build.gradle
文件中 firebasePerformanceInstrumentationEnabled
在gradle.properties
文件中啟用
-
檢查日誌消息以確保性能監控正在記錄預期的自定義代碼跟踪。
如果性能監控正在記錄事件,但 24 小時後沒有顯示任何數據,請聯繫 Firebase 支持。
如果您丟失網絡請求數據,請嘗試以下故障排除步驟:
對於 Android 應用程序,性能監控 Gradle 插件支持自動監控 HTTP/S 網絡請求的檢測。檢查以下內容:
確保您正確添加了插件。具體來說,檢查以下內容:
- 您在模塊(應用程序級)
build.gradle
文件中添加了插件(
)。apply plugin: 'com.google.firebase.firebase-perf' - 您在項目級
build.gradle
文件中包含了插件的類路徑依賴項 (
)。classpath 'com.google.firebase:perf-plugin:1.4.2'
- 您在模塊(應用程序級)
-
instrumentationEnabled
在您的模塊(應用程序級)build.gradle
文件中 firebasePerformanceInstrumentationEnabled
在gradle.properties
文件中啟用
-
檢查網絡庫是否不兼容。性能監控自動收集使用以下網絡庫的網絡請求的指標:OkHttp 3.xx、Java 的 URLConnection 和 Apache HttpClient。
請注意,您可以添加對網絡請求的自定義監控。
請注意以下事項:
根據代碼的行為和代碼使用的網絡庫,性能監控可能僅報告已完成的網絡請求。這意味著可能不會報告保持打開狀態的 HTTP/S 連接。
性能監控與 DexGuard 和 Jack 不兼容。
- DexGuard 禁用對 HTTP/S 網絡請求的監控。
- Jack已被棄用,通常不應在您的應用程序中使用。
性能監控不會報告具有無效
Content-Type
標頭的網絡請求。但是,沒有Content-Type
標頭的網絡請求仍將被接受。
您還可以嘗試自定義 URL 模式!
常問問題
我們將“熱門問題”替換為“最近警報” ,作為我們最近引入警報的後續措施,當超過您設置的閾值時,警報會自動通知您。問題現已棄用並由警報取代。
性能卡頂部的應用程序選擇器會篩選“最近警報”下的警報條目。僅顯示所選應用程序的三個最新警報。
要了解有關警報的更多信息,請參閱設置性能問題警報。
性能監控支持針對超出定義閾值的指標發出警報。為了避免與這些性能指標的可配置閾值混淆,我們刪除了為問題配置閾值的功能。
我們用新設計的集中式用戶界面 (UI) 替換了“詳細信息”和“指標”頁面,以改進解決問題的方式。這個新的故障排除 UI 提供了與“詳細信息”和“指標”所提供的相同的核心功能。要了解有關故障排除的更多信息,請參閱查看特定跟踪的更多數據。
性能監控從應用程序的用戶設備收集性能數據。如果您的應用程序有許多用戶,或者應用程序生成大量性能活動,性能監控可能會將數據收集限製到一部分設備,以減少處理的事件數量。這些限制足夠高,因此即使事件較少,指標值仍然可以代表用戶的應用體驗。
為了管理我們收集的數據量,性能監控使用以下採樣選項:
設備上速率限制:為了防止設備發送突然爆發的跟踪,我們將從設備發送的代碼和網絡請求跟踪的數量限制為每 10 分鐘 300 個事件。這種方法可以保護設備免受可發送大量性能數據的循環儀器的影響,並防止單個設備扭曲性能測量結果。
動態採樣:性能監控每天在所有應用程序用戶中收集每個應用程序的代碼跟踪事件的限制約為 100M,網絡請求跟踪的限制為 100M。在設備上獲取動態採樣率(使用 Firebase 遠程配置)以確定隨機設備是否應捕獲和發送跟踪記錄。未選擇進行採樣的設備不會發送任何事件。動態採樣率是特定於應用程序的,並進行調整以確保收集的數據總量保持在限制以下。
用戶會話從用戶設備發送額外的詳細數據,需要更多資源來捕獲和發送數據。為了最大限度地減少用戶會話的影響,性能監控還可能限制會話數量。
服務器端速率限制:為了確保應用程序不超過採樣限制,性能監控可能會使用服務器端採樣來刪除從設備接收到的某些事件。儘管這種類型的限制不會改變我們指標的有效性,但它可能會導致輕微的模式變化,包括以下內容:
- 跟踪的數量可能與一段代碼的執行次數不同。
- 代碼中緊密耦合的跟踪可能各自具有不同數量的樣本。
我們用警報的引入取代了“問題”選項卡,當超出您設置的閾值時,警報會自動通知您。您不再需要手動檢查 Firebase 控制台來確定閾值的狀態。要了解警報,請參閱設置性能問題警報。
我們重新設計了 Firebase 控制台的性能監控部分,以便“儀表板”選項卡在一個空間中顯示您的關鍵指標和所有跟踪記錄。作為重新設計的一部分,我們刪除了“設備上”和“網絡”頁面。
儀表板選項卡底部的跟踪表具有與設備上和網絡選項卡顯示的所有相同信息,但增加了一些功能,包括按特定指標的百分比變化對跟踪進行排序的功能。要查看特定跟踪的所有指標和數據,請單擊跟踪表中的跟踪名稱。
在跟踪表的以下子選項卡中查看您的跟踪:
- 網絡請求跟踪(開箱即用和自定義)-網絡請求子選項卡
- 自定義代碼跟踪 -自定義跟踪子選項卡
- 應用程序啟動、應用程序在前台、應用程序在後台跟踪 -自定義跟踪子選項卡
- 屏幕渲染痕跡 -屏幕渲染子選項卡
- 頁面加載跟踪 -頁面加載子選項卡
有關跟踪表以及查看指標和數據的詳細信息,請訪問控制台概述頁面 ( iOS+ | Android | Web )。
緩慢渲染幀和凍結幀是在假定設備刷新率為 60Hz 的情況下計算的。如果設備刷新率低於 60Hz,則每幀的渲染時間將會變慢,因為每秒渲染的幀數較少。較慢的渲染時間可能會導致報告更多較慢或凍結的幀,因為更多的幀將渲染得較慢或凍結。但是,如果設備刷新率高於 60Hz,則每幀的渲染時間將會更快。這可能會導致報告的慢幀或凍結幀減少。這是性能監控 SDK 中的當前限制。
要查看應用程序活動之外的片段性能,請確保您的應用程序使用性能監控 Android SDK 版本 20.1.0 或更高版本。要了解更多信息,請參閱將性能監控添加到您的應用程序。
每個片段和活動跟踪都基於應用程序中定義的類名稱。每個屏幕跟踪都包含st前綴,後跟類的名稱。在 Firebase 控制台上,前綴已刪除。要了解更多信息,請參閱了解屏幕渲染性能數據(Apple 和 Android 應用程序) 。
性能監控對設備上收集的所有事件進行事件採樣。這種方法使我們能夠從用戶設備收集提供性能指標所需的最少事件。
性能監控允許您為您關心的指標設置警報。對於生成的屏幕渲染跟踪,您可以設置警報,以便在慢幀和凍結幀百分比超過您設置的閾值時通知您。
Android 性能監控使用字節碼檢測來提供一些開箱即用的功能,例如監控 HTTP/S 網絡請求。作為編譯的一部分,該過程需要迭代應用程序的所有類(包括依賴項),以檢測對於測量應用程序的網絡請求性能至關重要的代碼。
以下是構建時間增加的一些關鍵因素:
- 類或文件的數量
- 每個類的大小(代碼行)
- 您的機器配置
- 初始構建與後續構建(後續構建通常比初始構建更快)
為了優化您的構建時間,請考慮模塊化您的代碼。
從性能監控插件v1.3.3開始,我們專注於在增量構建處理和庫輸入緩存方面進行重大改進。要獲得最新的構建時間改進,請確保使用最新版本的插件(v1.4.2) 。
請注意,如果您想避免較長的構建時間,可以在本地禁用調試構建的性能監控插件。但是,不建議在生產構建中使用此方法,因為它可能會導致應用程序中的網絡請求的性能測量失敗。
Android 性能監控使用字節碼檢測來提供一些開箱即用的功能,例如監控 HTTP/S 網絡請求。作為編譯的一部分,該過程需要迭代應用程序的所有類(包括依賴項),以檢測對於測量應用程序的網絡請求性能至關重要的代碼。
如果您在與性能監控插件集成後遇到諸如JSR/RET are not supported with computeFrames option
錯誤或類似錯誤,這可能是因為您還依賴於與性能監控Gradle插件不兼容的庫。
為了解決這個問題,您可以按照以下步驟排除不兼容的類/庫:
- 更新到最新版本的性能監控 Gradle 插件(最低v1.4.0 )。
- 將您的 Android Gradle 插件版本更新到 v7.2.0 或更高版本。
- 將以下標誌添加到您的模塊(應用程序級)
build.gradle
文件中,以排除不兼容的類/庫進行檢測:android { // ... androidComponents { onVariants(selector().all(), { instrumentation.excludes.add("example.incompatible.library") }) } }
要了解有關 Android Gradle 插件的Instrumentation
API 的exclude
屬性的更多信息,請參閱Instrumentation 。
當您因不兼容的庫而遇到構建錯誤時,請提交 Github 問題,以便在性能監控插件中排除它們。
如果您為 Firebase 性能監控啟用了 BigQuery 集成,您的數據將在一天結束(太平洋時間)後 12 到 24 小時導出到 BigQuery。
例如,4 月 19 日的數據將於 4 月 20 日中午 12:00 至午夜(所有日期和時間均為太平洋時間)在 BigQuery 中提供。
Near real-time data processing and display
Firebase Performance Monitoring processes collected performance data as it comes in, which results in near real-time data display in the Firebase console. Processed data displays in the console within a few minutes of its collection, hence the term "near real-time".
To take advantage of near real-time data processing, make sure your app uses a real-time compatible SDK version .
To take advantage of near real-time data processing, you only need to make sure that your app uses a Performance Monitoring SDK version that's compatible with real-time data processing.
These are the real-time compatible SDK versions:
- iOS — v7.3.0 or later
- tvOS — v8.9.0 or later
- Android — v19.0.10 or later (or Firebase Android BoM v26.1.0 or later)
- Web — v7.14.0 or later
Note that we always recommend using the latest version of SDK, but any version listed above will enable Performance Monitoring to process your data in near real time.
These are the SDK versions compatible with real-time data processing:
- iOS — v7.3.0 or later
- tvOS — v8.9.0 or later
- Android — v19.0.10 or later (or Firebase Android BoM v26.1.0 or later)
- Web — v7.14.0 or later
Note that we always recommend using the latest version of SDK, but any version listed above will enable Performance Monitoring to process your data in near real time.
If your app doesn't use a real-time compatible SDK version, you will still see all your app's performance data in the Firebase console. However, the display of performance data will be delayed by roughly 36 hours from the time of its collection.
Yes! Regardless of which SDK version an app instance uses, you'll see performance data from all your users.
However, if you're looking at recent data (less than roughly 36 hours old), then the displayed data is from users of app instances using a real-time compatible SDK version. The non-recent data, though, includes performance data from all versions of your app.
Contacting Firebase Support
If you reach out to Firebase Support , always include your Firebase App ID. Find your Firebase App ID in the Your apps card of your Project settings .