全部產品
Search
文件中心

Application Real-Time Monitoring Service:診斷服務端報錯問題

更新時間:Sep 12, 2026

網頁拋錯是互連網應用最常見的問題之一,但其錯因分析是一個痛點。為應用安裝ARMS探針後,就能在不改動應用代碼的情況下,藉助ARMS應用監控的異常自動貼齊、收集、統計和溯源等功能,準確定位應用中所有異常並進行線上診斷。

問題描述

網頁拋錯,尤其是5xx錯誤是互連網應用最常見的問題之一。5xx錯誤通常發生於服務端。服務端是商務邏輯最複雜,也是整條網路請求鏈路中最容易出錯、出了錯之後最難診斷原因的地方。營運工程師或研發工程師往往需要登入機器查看日誌來定位問題。

樣本:常見的Java應用錯誤記錄檔


2018-03-19 20:34:22,890 ERROR [io.undertow.request] (default task-84) UT005023: Exception handling request to /plan-manage.htm:
java.lang.IllegalStateException: UT000010: Session not found wFcTlKtkzPiwMyNtBTFv48jU
	at io.undertow.server.session.InMemorySessionManager$SessionImpl.getAttribute(InMemorySessionManager.java:353) [undertow-core-1.1.0.Final.jar:1.1.0.Final]
	at io.undertow.servlet.spec.HttpSessionImpl.getAttribute(HttpSessionImpl.java:121) [undertow-servlet-1.1.0.Final.jar:1.1.0.Final]
	at org.springframework.security.web.context.HttpSessionSecurityContextRepository$SaveToSessionResponseWrapper.saveContext(HttpSessionSecurityContextRepository.java:323) [spring-security-web-3.2.5.RELEASE.jar:3.2.5.RELEASE]
	at org.springframework.security.web.context.HttpSessionSecurityContextRepository.saveContext(HttpSessionSecurityContextRepository.java:117) [spring-security-web-3.2.5.RELEASE.jar:3.2.5.RELEASE]
	at org.springframework.security.web.context.SecurityContextPersistenceFilter.doFilter(SecurityContextPersistenceFilter.java:93) [spring-security-web-3.2.5.RELEASE.jar:3.2.5.RELEASE]
	at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:342) [spring-security-web-3.2.5.RELEASE.jar:3.2.5.RELEASE]
	at org.springframework.security.web.FilterChainProxy.doFilterInternal(FilterChainProxy.java:192) [spring-security-web-3.2.5.RELEASE.jar:3.2.5.RELEASE]
	at org.springframework.security.web.FilterChainProxy.doFilter(FilterChainProxy.java:160) [spring-security-web-3.2.5.RELEASE.jar:3.2.5.RELEASE]
	at org.springframework.web.filter.DelegatingFilterProxy.invokeDelegate(DelegatingFilterProxy.java:344) [spring-web-4.0.6.RELEASE.jar:4.0.6.RELEASE]
	at org.springframework.web.filter.DelegatingFilterProxy.doFilter(DelegatingFilterProxy.java:261) [spring-web-4.0.6.RELEASE.jar:4.0.6.RELEASE]
	at io.undertow.servlet.core.ManagedFilter.doFilter(ManagedFilter.java:60) [undertow-servlet-1.1.0.Final.jar:1.1.0.Final]
	at io.undertow.servlet.handlers.FilterHandler$FilterChainImpl.doFilter(FilterHandler.java:132) [undertow-servlet-1.1.0.Final.jar:1.1.0.Final]
	at org.springframework.web.filter.CharacterEncodingFilter.doFilterInternal(CharacterEncodingFilter.java:88) [spring-web-4.0.6.RELEASE.jar:4.0.6.RELEASE]
	at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:107) [spring-web-4.0.6.RELEASE.jar:4.0.6.RELEASE]
	at io.undertow.servlet.core.ManagedFilter.doFilter(ManagedFilter.java:60) [undertow-servlet-1.1.0.Final.jar:1.1.0.Final]
	at io.undertow.servlet.handlers.FilterHandler$FilterChainImpl.doFilter(FilterHandler.java:132) [undertow-servlet-1.1.0.Final.jar:1.1.0.Final]
	at io.undertow.servlet.handlers.FilterHandler.handleRequest(FilterHandler.java:85) [undertow-servlet-1.1.0.Final.jar:1.1.0.Final]
	at io.undertow.servlet.handlers.security.ServletSecurityRoleHandler.handleRequest(ServletSecurityRoleHandler.java:61) [undertow-servlet-1.1.0.Final.jar:1.1.0.Final]
	at io.undertow.servlet.handlers.ServletDispatchingHandler.handleRequest(ServletDispatchingHandler.java:36) [undertow-servlet-1.1.0.Final.jar:1.1.0.Final]
	at org.wildfly.extension.undertow.security.SecurityContextAssociationHandler.handleRequest(SecurityContextAssociationHandler.java:78)
	at io.undertow.server.handlers.PredicateHandler.handleRequest(PredicateHandler.java:43) [undertow-core-1.1.0.Final.jar:1.1.0.Final]
	at io.undertow.servlet.handlers.security.SSLInformationAssociationHandler.handleRequest(SSLInformationAssociationHandler.java:131) [undertow-servlet-1.1.0.Final.jar:1.1.0.Final]
	at io.undertow.servlet.handlers.security.ServletAuthenticationCallHandler.handleRequest(ServletAuthenticationCallHandler.java:56) [undertow-servlet-1.1.0.Final.jar:1.1.0.Final]
	at io.undertow.server.handlers.PredicateHandler.handleRequest(PredicateHandler.java:43) [undertow-core-1.1.0.Final.jar:1.1.0.Final]
	at io.undertow.security.handlers.AbstractConfidentialityHandler.handleRequest(AbstractConfidentialityHandler.java:45) [undertow-core-1.1.0.Final.jar:1.1.0.Final]
	at io.undertow.servlet.handlers.security.ServletConfidentialityConstraintHandler.handleRequest(ServletConfidentialityConstraintHandler.java:63) [undertow-servlet-1.1.0.Final.jar:1.1.0.Final]
	at io.undertow.security.handlers.AuthenticationMechanismsHandler.handleRequest(AuthenticationMechanismsHandler.java:58) [undertow-core-1.1.0.Final.jar:1.1.0.Final]
	at io.undertow.servlet.handlers.security.CachedAuthenticatedSessionHandler.handleRequest(CachedAuthenticatedSessionHandler.java:70) [undertow-servlet-1.1.0.Final.jar:1.1.0.Final]
	at io.undertow.security.handlers.SecurityInitialHandler.handleRequest(SecurityInitialHandler.java:76) [undertow-core-1.1.0.Final.jar:1.1.0.Final]
	at io.undertow.server.handlers.PredicateHandler.handleRequest(PredicateHandler.java:43) [undertow-core-1.1.0.Final.jar:1.1.0.Final]
	at org.wildfly.extension.undertow.security.jacc.JACCContextIdHandler.handleRequest(JACCContextIdHandler.java:61)
	at io.undertow.server.handlers.PredicateHandler.handleRequest(PredicateHandler.java:43) [undertow-core-1.1.0.Final.jar:1.1.0.Final]
	at io.undertow.server.handlers.PredicateHandler.handleRequest(PredicateHandler.java:43) [undertow-core-1.1.0.Final.jar:1.1.0.Final]
	at io.undertow.servlet.handlers.ServletInitialHandler.handleFirstRequest(ServletInitialHandler.java:261) [undertow-servlet-1.1.0.Final.jar:1.1.0.Final]
	at io.undertow.servlet.handlers.ServletInitialHandler.dispatchRequest(ServletInitialHandler.java:247) [undertow-servlet-1.1.0.Final.jar:1.1.0.Final]
	at io.undertow.servlet.handlers.ServletInitialHandler.access$000(ServletInitialHandler.java:76) [undertow-servlet-1.1.0.Final.jar:1.1.0.Final]
	at io.undertow.servlet.handlers.ServletInitialHandler$1.handleRequest(ServletInitialHandler.java:166) [undertow-servlet-1.1.0.Final.jar:1.1.0.Final]
	at io.undertow.server.Connectors.executeRootHandler(Connectors.java:197) [undertow-core-1.1.0.Final.jar:1.1.0.Final]
	at io.undertow.server.HttpServerExchange$1.run(HttpServerExchange.java:759) [undertow-core-1.1.0.Final.jar:1.1.0.Final]
	at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145) [rt.jar:1.7.0_45]
	at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615) [rt.jar:1.7.0_45]
	at java.lang.Thread.run(Thread.java:744) [rt.jar:1.7.0_45]

對於邏輯不太複雜、上線時間不長的應用來說,登入機器查看日誌的方式能夠解決大部分網站拋錯的問題。但在以下情境中,傳統的問題診斷方式往往沒有用武之地。

  • 在一個分布式應用叢集中,需知道某一類錯誤的發生時間和頻率。

  • 某系統已運行了很長時間,但是不想關心遺留的異常,只想知道今天和昨天相比、發布後和發布前相比多了哪些異常。

  • 查看一個異常對應的Web請求和相關參數。

  • 客服人員提供了一個使用者下單失敗的訂單號,分析該使用者下單失敗的原因。

解決方案

為應用安裝ARMS探針後,即可在不改動應用代碼的情況下,利用ARMS應用監控的異常自動貼齊、收集、統計和溯源等能力,全面掌握應用的各種錯誤資訊。

步驟一:安裝ARMS探針

為應用安裝ARMS探針後,才能對應用進行全方位監控。請根據實際需求選擇一種方式來安裝探針。具體操作,請參見應用監控接入概述

步驟二:查看關於應用異常的統計資訊

為應用安裝ARMS探針後,ARMS會收集和展示選定時間內應用的總請求量、平均回應時間、錯誤數、即時執行個體數、FullGC次數、慢SQL次數、異常次數和慢調用次數,以及這些指標和上一天的環比、上周的同比升降幅度。請按以下步驟查看應用異常的統計資訊。

  1. 登入ARMS控制台,在左側導覽列選擇應用監控 > 應用列表

  2. 應用列表頁面頂部選擇目標地區,然後單擊目標應用程式名稱。

    說明

    語言列的表徵圖含義如下:

    Java表徵圖:接入應用監控的Java應用。

    image:接入應用監控的Golang應用。

    image:接入應用監控的Python應用。

    -:接入Managed Service for OpenTelemetry的應用。

  3. 應用概覽頁面的概覽分析頁簽下方,查看異常的總數、周同比和日同比資料。

  4. 滑動頁面至概覽分析頁簽底部的統計分析地區的異常類型,查看各類型異常出現的次數。

    各類型異常出現的次數

  5. 在左側導覽列,單擊應用詳情,然後在頁面右側單擊異常分析頁簽,查看異常統計圖、錯誤數、異常堆棧等。

步驟三:診斷異常出現的原因

掌握應用異常的統計資訊還不足以診斷異常出現的原因。雖然日誌中異常堆棧包含調用的程式碼片段,但並不包含這次調用的完整上下遊資訊和請求參數。ARMS探針採用了位元組碼增強技術,讓您能夠以很小的效能消耗捕獲異常上下遊的完整調用快照,進而找出導致異常出現的具體原因。

  1. 異常分析頁簽下,找到要診斷的異常類型,在其右側操作列,單擊调用链查询

    调用链查询頁簽下顯示與該異常類型相關的調用鏈路資訊。

  2. 调用链查询頁簽下,單擊某個錯誤調用的TraceId。

    說明

    如何尋找目標調用鏈路,請參見調用鏈路查詢

    介面快照頁簽

  3. 在彈出的頁面,查看異常的調用鏈路資訊,在詳情列,單擊放大鏡表徵圖,查看調用的方法棧,從而獲得異常的上下文資訊。

    方法棧資訊顯示調用鏈路總耗時 58947ms,關鍵調用包括:

    • Tomcat Servlet Process(58947ms)

    • sun.net.www.protocol.http.HttpURLConnection.getInputStream()(行號 1476,21ms,異常資訊:java.io.IOException: Server

    • org.apache.http.impl.client.CloseableHttpClient.execute(...)(行號 81,104ms)

    • org.apache.http.protocol.HttpRequestExecutor.execute(...)(行號 118,93ms)

    • com.alibaba.arms.console.service.impl.ArmsContextServiceImpl.clear()(行號 79,0ms)

    操作至此,您已發現了應用異常的原因,這將有效地協助您進行下一步的代碼最佳化工作。您還可以返回调用链查询頁簽,查看列表中其他異常,逐一解決。