Java應(yīng)用實例監(jiān)控
為Java應(yīng)用安裝探針后,ARMS即可開始監(jiān)控Java應(yīng)用,您可以在實例監(jiān)控頁面了解應(yīng)用的基礎(chǔ)監(jiān)控、實例GC和JVM內(nèi)存等信息。
前提條件
ARMS應(yīng)用監(jiān)控面向已開通新版計費的用戶提供全新的監(jiān)控詳情頁面,新版計費詳情,請參見產(chǎn)品計費(新版)。
對于未開通新版計費的用戶,如需查看新版監(jiān)控詳情頁面,可在應(yīng)用列表頁面單擊切換新版。
已為應(yīng)用安裝探針,具體操作,請參見應(yīng)用監(jiān)控接入概述。
查看實例監(jiān)控
登錄ARMS控制臺,在左側(cè)導(dǎo)航欄選擇 。
在應(yīng)用列表頁面頂部選擇目標(biāo)地域,然后單擊目標(biāo)應(yīng)用名稱。
說明語言列的圖標(biāo)含義如下:
:接入應(yīng)用監(jiān)控的Java應(yīng)用。
:接入應(yīng)用監(jiān)控的Golang應(yīng)用。
:接入應(yīng)用監(jiān)控的Python應(yīng)用。
-:接入可觀測鏈路 OpenTelemetry 版的應(yīng)用。
在上方導(dǎo)航欄單擊實例監(jiān)控。
頁面說明
實例監(jiān)控頁面會根據(jù)應(yīng)用接入的信息自動適配展示大盤,并針對ECS環(huán)境和容器環(huán)境做區(qū)別展示。
在容器場景下,如果已經(jīng)接入可觀測監(jiān)控 Prometheus 版,則優(yōu)先以可觀測監(jiān)控 Prometheus 版數(shù)據(jù)作為容器信息的展示。容器環(huán)境接入可觀測監(jiān)控 Prometheus 版的操作,請參見容器可觀測。
容器環(huán)境如果未接入可觀測監(jiān)控 Prometheus 版,需要確保應(yīng)用監(jiān)控探針版本在4.1.0或以上,對應(yīng)數(shù)據(jù)展示容器的基礎(chǔ)信息。應(yīng)用監(jiān)控探針說明,請參見探針(Java Agent)版本說明。
ECS環(huán)境
在快捷篩選區(qū)域(圖示①),您可以按主機地址對圖表、實例列表進行篩選。
在趨勢圖區(qū)域(圖示②),您可以查看實例的基礎(chǔ)監(jiān)控、實例GC和JVM內(nèi)存的時序曲線。
基礎(chǔ)監(jiān)控:應(yīng)用在指定時間范圍內(nèi)CPU、內(nèi)存和磁盤使用率趨勢圖。通過圖標(biāo)名稱右側(cè)的下拉框可以切換展示各使用率的平均值和最大值。
實例GC:應(yīng)用在指定時間范圍內(nèi)Full GC和Young GC的趨勢圖。通過圖表名稱右側(cè)的下拉框可以切換展示GC的次數(shù)和平均耗時。
JVM內(nèi)存:應(yīng)用在指定時間范圍內(nèi)堆內(nèi)存已使用和最大值趨勢圖。通過圖標(biāo)名稱右側(cè)的下拉框可以切換展示非堆內(nèi)存已使用和最大值趨勢圖。
說明ARMS應(yīng)用監(jiān)控采集的數(shù)據(jù)來自JMX,其中非堆內(nèi)存所包含的內(nèi)存區(qū)域比Java進程中實際的非堆內(nèi)存區(qū)域少,因此可能會出現(xiàn)監(jiān)控中堆內(nèi)存+非堆內(nèi)存總和與通過
top
命令看到的RES大小存在一定差值,相關(guān)細節(jié)請參見JVM監(jiān)控內(nèi)存詳情說明。
單擊圖標(biāo),可以在彈出的對話框中查看該指標(biāo)在某個時間段的統(tǒng)計情況或?qū)Ρ炔煌掌谠谕粫r間段的統(tǒng)計情況,通過選擇圖標(biāo)可以切換柱狀圖、趨勢圖進行展示。
在實例列表區(qū)域(圖示③),您可以查看實例IP、CPU利用率、內(nèi)存利用率、磁盤利用率、負載、Full GC次數(shù)、Young GC次數(shù)、堆內(nèi)存使用量、非堆內(nèi)存使用量、RED三指標(biāo)(請求數(shù)、錯誤數(shù)、平均耗時)等信息。
在實例列表,您可以執(zhí)行以下操作:
單擊實例IP,可以查看實例詳情,更多信息,請參見實例詳情。
單擊操作列的調(diào)用鏈,可以查看該實例的鏈路詳情。更多信息,請參見調(diào)用鏈分析。
容器環(huán)境(Prometheus版)
在快捷篩選區(qū)域(圖示①),您可以按集群和主機地址對圖表、實例列表進行篩選。
在趨勢圖區(qū)域(圖示②),您可以查看實例的基礎(chǔ)監(jiān)控、實例GC和JVM內(nèi)存的時序曲線。
基礎(chǔ)監(jiān)控:應(yīng)用在指定時間范圍內(nèi)CPU用量和內(nèi)存用量趨勢圖。
實例GC:應(yīng)用在指定時間范圍內(nèi)Full GC和Young GC的趨勢圖。通過圖表名稱右側(cè)的下拉框可以切換展示GC的次數(shù)和平均耗時。
JVM內(nèi)存:應(yīng)用在指定時間范圍內(nèi)堆內(nèi)存已使用和最大值趨勢圖。通過圖標(biāo)名稱右側(cè)的下拉框可以切換展示非堆內(nèi)存已使用和最大值趨勢圖。
說明ARMS應(yīng)用監(jiān)控采集的數(shù)據(jù)來自JMX,其中非堆內(nèi)存所包含的內(nèi)存區(qū)域比Java進程中實際的非堆內(nèi)存區(qū)域少,因此可能會出現(xiàn)監(jiān)控中堆內(nèi)存+非堆內(nèi)存總和與通過
top
命令看到的RES大小存在一定差值,相關(guān)細節(jié)請參見JVM監(jiān)控內(nèi)存詳情說明。
單擊圖標(biāo),可以在彈出的對話框中查看該指標(biāo)在某個時間段的統(tǒng)計情況或?qū)Ρ炔煌掌谠谕粫r間段的統(tǒng)計情況,通過選擇圖標(biāo)可以切換柱狀圖、趨勢圖進行展示。
在實例列表區(qū)域(圖示③),您可以查看實例IP、CPU用量、CPU請求、CPU限制、CPU利用率(未設(shè)置CPU限制時,此項展示為-)、內(nèi)存用量、內(nèi)存請求、內(nèi)存限制、內(nèi)存利用率(未設(shè)置內(nèi)存限制時,此項展示為-)、磁盤用量、磁盤限制、磁盤利用率(未設(shè)置磁盤限制時,此項展示為-)、負載、Full GC 次數(shù)、Young GC 次數(shù)、堆內(nèi)存使用量、非堆內(nèi)存使用量、RED三指標(biāo)(請求數(shù)、錯誤數(shù)、平均耗時)等。
在實例列表,您可以執(zhí)行以下操作:
單擊實例IP或操作列的詳情,可以查看實例詳情,更多信息,請參見實例詳情。
單擊操作列的調(diào)用鏈,可以查看該實例的鏈路詳情。更多信息,請參見調(diào)用鏈分析。
容器環(huán)境(ARMS自采集版)
在快捷篩選區(qū)域(圖示①),您可以按主機地址對圖表、實例列表進行篩選。
在趨勢圖區(qū)域(圖示②),您可以查看實例的基礎(chǔ)監(jiān)控、實例GC和JVM內(nèi)存的時序曲線。
基礎(chǔ)監(jiān)控:應(yīng)用在指定時間范圍內(nèi)CPU用量和內(nèi)存用量趨勢圖。
實例GC:應(yīng)用在指定時間范圍內(nèi)Full GC和Young GC的趨勢圖。通過圖表名稱右側(cè)的下拉框可以切換展示GC的次數(shù)和平均耗時。
JVM內(nèi)存:應(yīng)用在指定時間范圍內(nèi)堆內(nèi)存已使用和最大值趨勢圖。通過圖標(biāo)名稱右側(cè)的下拉框可以切換展示非堆內(nèi)存已使用和最大值趨勢圖。
說明ARMS應(yīng)用監(jiān)控采集的數(shù)據(jù)來自JMX,其中非堆內(nèi)存所包含的內(nèi)存區(qū)域比Java進程中實際的非堆內(nèi)存區(qū)域少,因此可能會出現(xiàn)監(jiān)控中堆內(nèi)存+非堆內(nèi)存總和與通過
top
命令看到的RES大小存在一定差值,相關(guān)細節(jié)請參見JVM監(jiān)控內(nèi)存詳情說明。
單擊圖標(biāo),可以在彈出的對話框中查看該指標(biāo)在某個時間段的統(tǒng)計情況或?qū)Ρ炔煌掌谠谕粫r間段的統(tǒng)計情況,通過選擇圖標(biāo)可以切換柱狀圖、趨勢圖進行展示。
在實例列表區(qū)域(圖示③),您可以查看實例IP、CPU用量、內(nèi)存用量、負載、Full GC 次數(shù)、Young GC 次數(shù)、堆內(nèi)存使用量、非堆內(nèi)存使用量、RED三指標(biāo)(請求數(shù)、錯誤數(shù)、平均耗時)等。
在實例列表,您可以執(zhí)行以下操作:
單擊實例IP或操作列的詳情,可以查看實例詳情,更多信息,請參見實例詳情。
單擊操作列的調(diào)用鏈,可以查看該實例的鏈路詳情。更多信息,請參見調(diào)用鏈分析。
實例詳情
概覽
概覽頁簽可以查看目標(biāo)接口的請求數(shù)、錯誤數(shù)、平均耗時和慢調(diào)用信息。
JVM監(jiān)控
JVM監(jiān)控頁簽可以查看對應(yīng)實例的GC、內(nèi)存、線程、文件等信息。
池化監(jiān)控
池化監(jiān)控頁簽可以查看應(yīng)用所使用的線程池或連接池的各項指標(biāo),包括核心線程數(shù)量、當(dāng)前線程數(shù)量、最大線程數(shù)量、活躍線程數(shù)量、任務(wù)隊列容量。
線程池支持的框架
4.1.x及以上探針版本
支持框架:
java.util.ThreadPoolExecutor:一般用于Tomcat8~9.1、Dubbo、HSF、Vertx以及用戶自定義線程池。
org.apache.tomcat.util.threads.ThreadPoolExecutor:一般用于Tomcat9.1+。
org.eclipse.jetty.util.thread.QueuedThreadPool:一般用于Jetty。
org.xnio.XnioWorker:一般用于Undertow。
采集的指標(biāo)如下:
指標(biāo)名 | 支持框架 | 指標(biāo)描述 |
arms_thread_pool_core_pool_size |
| 核心線程數(shù),一般是靜態(tài)配置,不會改變。 |
arms_thread_pool_max_pool_size |
| 最大空閑連接數(shù),一般是靜態(tài)配置,不會改變。 |
arms_thread_pool_active_thread_count |
| 活躍線程數(shù),即當(dāng)前正在執(zhí)行任務(wù)的線程。 |
arms_thread_pool_current_thread_count |
| 當(dāng)前線程數(shù),包含活躍線程數(shù)和當(dāng)前正在等待任務(wù)的線程數(shù)。 |
arms_thread_pool_max_thread_count |
| 線程池歷史最大線程數(shù)。 |
arms_thread_pool_scheduled_task_count |
| 線程池調(diào)度任務(wù)數(shù)。 |
arms_thread_pool_completed_task_count |
| 線程池執(zhí)行完成任務(wù)數(shù)。 |
arms_thread_pool_rejected_task_count |
| 線程池拒絕任務(wù)數(shù)。 |
arms_thread_pool_queue_size |
| 線程池任務(wù)隊列大小。 |
4.1.x以下探針版本
線程池監(jiān)控支持Tomcat、HSF、Dubbo、Vert.x和Undertow框架,其中,3.1.x及以下版本探針支持Undertow1.x~Undertow2.0.x版本線程池監(jiān)控,3.2.x及以上版本探針支持Undertow所有版本線程池監(jiān)控。
采集的指標(biāo)如下:
指標(biāo)名稱 | 指標(biāo) |
線程池核心線程數(shù) | arms_threadpool_core_size |
線程池最大線程數(shù) | arms_threadpool_max_size |
線程池活躍線程數(shù) | arms_threadpool_active_size |
線程池隊列大小 | arms_threadpool_queue_size |
線程池當(dāng)前大小 | arms_threadpool_current_size |
線程池監(jiān)控支持SchedulerX框架,采集的指標(biāo)如下:
指標(biāo)名稱 | 指標(biāo) |
線程池活躍線程數(shù) | arms_threadpool_active_size |
連接池支持的框架
4.1.x及以上探針版本
支持框架:DBCP(>2.0)、Vibur DBCP(>11.0)、c3p0(>0.9.2)、Druid、HikariCP(>3.0)、Jedis(>3.0)、Lettuce(>5.0)、Redisson(>3.0)。
采集的指標(biāo)如下:
指標(biāo)名 | 支持框架 | 指標(biāo)描述 |
arms_connection_pool_connection_count | DBCP、c3p0、Vibur DBCP、Druid、Hikaricp、Jedis、Lettuce、Redisson | 連接數(shù),可通過State區(qū)分Active和Idle連接數(shù)。 |
arms_connection_pool_connection_min_idle_count | DBCP、Jedis、Druid、HikariCP、Lettuce | 最小空閑連接數(shù),一般是靜態(tài)配置,不會改變。 |
arms_connection_pool_connection_max_idle_count | DBCP、Jedis、Druid、Lettuce、 | 最大空閑連接數(shù),一般是靜態(tài)配置,不會改變。 |
arms_connection_pool_connection_max_count | DBCP、Druid、Vibur DBCP、HikariCP | 最大連接數(shù),一般是靜態(tài)配置,不會改變。 |
arms_connection_pool_pending_request_count | c3p0、HikariCP、Jedis | 阻塞的連接請求數(shù)。 |
4.1.x以下探針版本
連接池監(jiān)控支持okHttp2、okHttp3框架,采集的指標(biāo)如下:
指標(biāo)名稱 | 指標(biāo) |
連接池活躍連接數(shù) | arms_threadpool_active_size |
連接池當(dāng)前連接數(shù) | arms_threadpool_current_size |
連接池監(jiān)控支持Apache HTTPClient框架,采集的指標(biāo)如下:
指標(biāo)名稱 | 指標(biāo) |
連接池當(dāng)前連接數(shù) | arms_threadpool_current_size |
連接池最大連接數(shù) | arms_threadpool_max_size |
連接池等待隊列數(shù) | arms_threadpool_queue_size |
連接池監(jiān)控支持Druid框架,采集的指標(biāo)如下:
指標(biāo)名稱 | 指標(biāo) |
連接池活躍連接數(shù) | arms_threadpool_active_size |
連接池最大連接數(shù) | arms_threadpool_max_size |
連接池監(jiān)控支持Hikaricp框架,采集的指標(biāo)如下:
指標(biāo)名稱 | 指標(biāo) |
連接池活躍連接數(shù) | arms_threadpool_active_size |
連接池最大連接數(shù) | arms_threadpool_max_size |
主機監(jiān)控
主機監(jiān)控頁簽可以查看CPU、內(nèi)存、Disk(磁盤)、Load(負載)、網(wǎng)絡(luò)流量和網(wǎng)絡(luò)數(shù)據(jù)包的各項指標(biāo)。
容器監(jiān)控
容器環(huán)境(Prometheus版)
接入可觀測監(jiān)控 Prometheus 版的操作請參見Prometheus實例 for 容器服務(wù)。
容器監(jiān)控頁簽可以查看容器視角的CPU、內(nèi)存、Disk(磁盤)、Load(負載)、網(wǎng)絡(luò)流量和網(wǎng)絡(luò)數(shù)據(jù)包的各項指標(biāo)。
容器環(huán)境(ARMS自采集版)
未接入可觀測監(jiān)控 Prometheus 版的情況下,需要確保ARMS探針版本在4.1.0或以上。探針版本說明請參見探針(Java Agent)版本說明。
容器監(jiān)控頁簽可以查看容器視角的CPU、內(nèi)存、網(wǎng)絡(luò)流量的時序曲線。
調(diào)用鏈分析
調(diào)用鏈分析功能基于已存儲的全量鏈路明細數(shù)據(jù),通過自由組合篩選條件與聚合維度進行實時分析,可以滿足不同場景的自定義診斷需求。更多信息,請參見調(diào)用鏈分析。
相關(guān)文檔
應(yīng)用監(jiān)控詳細的指標(biāo)信息,請參見應(yīng)用監(jiān)控指標(biāo)說明。
常見問題
應(yīng)用級別的數(shù)據(jù)與單機的數(shù)據(jù)是什么關(guān)系
RED(請求數(shù)、錯誤數(shù)、延遲)指標(biāo):
請求數(shù)、慢調(diào)用次數(shù)、HTTP狀態(tài)碼次數(shù):應(yīng)用級別的數(shù)據(jù)是單機級別數(shù)據(jù)的匯總。
響應(yīng)時間:應(yīng)用級別的數(shù)據(jù)是單機級別數(shù)據(jù)的平均值。
JVM指標(biāo):
GC次數(shù)、GC耗時:應(yīng)用級別的數(shù)據(jù)是單機級別數(shù)據(jù)的匯總。
堆內(nèi)存數(shù)據(jù)、線程數(shù):應(yīng)用級別的數(shù)據(jù)是單機級別數(shù)據(jù)取最大值。
線程池/連接池指標(biāo)
所有指標(biāo):應(yīng)用級別的數(shù)據(jù)是單機級別數(shù)據(jù)的平均值。
系統(tǒng)指標(biāo)
所有指標(biāo):應(yīng)用級別的數(shù)據(jù)是單機級別數(shù)據(jù)取最大值。
SQL/NSQL調(diào)用:同RED指標(biāo),對于次數(shù)類指標(biāo),應(yīng)用級別的數(shù)據(jù)是單機級別數(shù)據(jù)的匯總;對于其余指標(biāo),應(yīng)用級別的數(shù)據(jù)是單機級別數(shù)據(jù)的平均值。
異常指標(biāo):應(yīng)用級別的數(shù)據(jù)是單機級別數(shù)據(jù)的匯總。
不同實例之間流量不均勻
在3.x版本探針中,如果打開了內(nèi)存優(yōu)化開關(guān),可能會導(dǎo)致部分指標(biāo)統(tǒng)計丟失。該問題已在4.x版本探針中修復(fù)。
Undertow一次請求被統(tǒng)計成了兩次
3.2.x版本之前探針埋點方法在使用DeferredResult場景下一次調(diào)用中會被執(zhí)行兩次。該問題已在3.2.x及以上版本中修復(fù)。
容器監(jiān)控中CPU/內(nèi)存配額與Pod實際設(shè)置不一致
請檢查您的Pod中是否定義了多個Container,該指標(biāo)會統(tǒng)計所有Container加起來的總配額。
系統(tǒng)指標(biāo)部分缺失、不準(zhǔn)或者CPU使用率展示為100%
4.x之前版本探針不支持Windows環(huán)境下系統(tǒng)指標(biāo)采集,4.x及以后版本探針已經(jīng)修復(fù)。
為什么應(yīng)用剛啟動會FullGC
一般是因為用戶沒有配置元空間大小,默認的元空間大小約為20 MB,應(yīng)用在剛啟動的時候可能會進行元空間的擴容從而觸發(fā)FullGC,可通過-XX:MetaspaceSize
參數(shù)和XX:MaxMetaspaceSize
參數(shù)設(shè)置初始元空間和最大元空間大小。
VM Stack指標(biāo)是如何計算的
該指標(biāo)是通過線程數(shù)×1 MB得到的,其中1 MB是線程堆棧默認大小。如果通過-Xss
參數(shù)重新指定了線程堆棧大小,則該數(shù)據(jù)與實際情況會有差異。
JVM指標(biāo)獲取原理
ARMS展示的JVM指標(biāo)均是通過標(biāo)準(zhǔn)的JDK接口獲取的,對應(yīng)接口如下:
內(nèi)存相關(guān)指標(biāo):
ManagementFactory.getMemoryPoolMXBeans
java.lang.management.MemoryPoolMXBean#getUsage
GC相關(guān)指標(biāo):
ManagementFactory.getGarbageCollectorMXBeans
java.lang.management.GarbageCollectorMXBean#getCollectionCount
java.lang.management.GarbageCollectorMXBean#getCollectionTime
為什么JVM最大堆內(nèi)存值為-1
-1代表未設(shè)置最大堆內(nèi)存大小。
為什么JVM堆內(nèi)存使用總量不等于設(shè)置的堆內(nèi)存最大值
根據(jù)JVM內(nèi)存分配機制,-Xms
參數(shù)指定初始堆內(nèi)存分配,當(dāng)空余堆內(nèi)存不足后擴容,直到達到-Xmx
參數(shù)設(shè)置的最大值,總量與最大量不一致說明還沒觸發(fā)擴容,使用量是當(dāng)前實際用量。
JVM GC的頻率逐漸加快
可能是使用了JDK 8默認的GC算法ParallelGC,該算法默認開啟了-XX:+UseAdaptiveSizePolicy
,其作用是自動調(diào)整堆的大小,包括新生代大小、SurvivorRatio等參數(shù),為了滿足GC的停頓時間,當(dāng)YounGC比較頻繁時,可能會動態(tài)縮小Survivor區(qū)的大小,這時候Survivor區(qū)的對象很容易晉升到Old區(qū),導(dǎo)致Old區(qū)空間漲幅過快,從而觸發(fā)Full GC的頻率也加快。更多信息,請參見Java官方文檔。
線程池、連接池監(jiān)控沒有數(shù)據(jù)
在自定義配置頁面的高級設(shè)置區(qū)域確認是否已經(jīng)開啟線程池、連接池監(jiān)控開關(guān)。
檢查框架是否在支持的范圍內(nèi),具體內(nèi)容,請參見線程池和連接池監(jiān)控。
HikariCP連接池獲取的最大連接數(shù)與實際不符
3.2.x版本之前的探針獲取最大連接數(shù)代碼有誤,3.2.x及以上版本已經(jīng)修復(fù)。
池化監(jiān)控指標(biāo)展示數(shù)值是小數(shù)
探針每隔15s采集一次,因此一分鐘會采集4個點的數(shù)據(jù),控制臺會根據(jù)采集信息展示一個時間段的平均值。例如:一分鐘采集的4個數(shù)據(jù)點為0、 0、 1、 0,理論上平均值為0.25。
線程池/連接池明明被打滿了,但為什么監(jiān)控上沒有體現(xiàn)出來
如果您的日志或其他記錄中確實看到線程池/連接池被打滿,但是ARMS控制臺卻看不到相關(guān)指標(biāo)的增長,有可能是由于指標(biāo)采樣時間點與打滿的時間點錯開導(dǎo)致的。目前ARMS自動采集線程池/連接池狀態(tài)指標(biāo)的時間間隔為15s,發(fā)生在這個時間段內(nèi)的瞬時沖高可能不會被采集到。
線程池監(jiān)控最大線程數(shù)不符合預(yù)期或者最大線程數(shù)為21億
ARMS最大線程池是直接調(diào)用線程池對象的獲取最大線程數(shù)方法得到的,一般不會出錯。如果不符合用戶預(yù)期可能是用戶設(shè)置的最大線程數(shù)未生效。
如果最大線程數(shù)為21億一般是調(diào)度線程池,在調(diào)度線程池中,默認設(shè)置的最大線程數(shù)是Integer.MAX_VALUE
,如下圖所示。