ARMS的探針和其他主流APM產品的探針一樣,都是基於ASM等架構對位元組碼進行插樁,以實現監控資訊自動採集。同時安裝兩個APM探針相當於對您的代碼插樁兩次,由於不同廠家的插樁代碼實現不同,代碼衝突可能造成各類問題(例如應用啟動緩慢以及監控資訊丟失),因此建議您不要同時安裝多個APM探針。
在替換監控方案的遷移過渡期(例如從使用其他APM產品,全面轉向ARMS應用監控)可能會存在應用同時安裝兩個APM的需求,因此ARMS做了大量的探針相容性測試,儘可能的提升遷移過渡期的探針相容性。但在探針共存的情況下,依然存在ARMS探針和其他APM探針同時增強某個外掛程式造成的局部衝突可能性。在這種情況下,您可以在ARMS的應用自訂配置中單獨關閉這個外掛程式的開關,以規避衝突。
即使沒有局部衝突,同時安裝多個探針也會導致應用效能受到影響。請確保遷移過渡期結束後,只保留ARMS的探針。
SkyWalking的Cache機制會導致探針相容性問題,導致ARMS的Arthas等能力無法使用,如果您從SkyWalking遷移到ARMS應用監控,在過渡期建議在Java啟動命令中增加如下參數關閉Skywalking的Cache機制。更多資訊,請參見SkyWalking官方文檔。
-Dskywalking.agent.is_cache_enhanced_class=true -Dskywalking.agent.class_cache_mode=MEMORY
如果您同時安裝了兩個APM探針,在應用啟動或者應用運行期間存在問題,例如啟動過程報錯、業務請求報錯等情況,您可以優先考慮調整探針掛載順序進行重啟。推薦的探針掛載順序調整方式如下:
手動接入方式調整啟動參數
如果您是Container ServiceACK環境自動安裝探針的方式,可以嘗試使用手動安裝探針方式;如果您已經是手動安裝探針方式,可以調整接入指令碼中開源Skywalking探針與ARMS探針的掛載順序,保證ARMS探針在後。
Spring Boot情境樣本:
-javaagent:/home/admin/apache-skywalking-apm-bin/agent/skywalking-agent.jar -javaagent:/{user.workspace}/ArmsAgent/aliyun-java-agent.jar
自動接入方式添加JVM參數
如果您是Container ServiceACK環境自動安裝探針的方式,改用手動安裝探針方式修改接入指令碼的工作量較大,可以使用在容器環境中添加JVM參數的方式。
登入Container Service管理主控台,在目的地組群的無狀態頁面,單擊接入ARMS應用右側的編輯。
在環境變數中添加SkyWalking探針參數,然後單擊儲存。
針對其他開源APM探針,例如TTL-Agent、Pinpoint、OTel Agent等,如果在同時安裝兩個探針的情況下,應用啟動或運行時存在問題,也可以通過上述調整探針掛載順序的方式嘗試進行解決。具體的探針順序調整方式與上述步驟保持一致,僅需要將探針包名與探針掛載路徑替換為您實際使用的探針與檔案路徑即可。例如使用TransmittableThreadLocal探針的情境,掛載順序調整方式如下:
手動接入方式調整啟動參數
如果您是通過Container ServiceACK環境自動安裝探針的方式,可以嘗試使用手動安裝探針方式;如果您已經是手動安裝探針方式,可以調整接入指令碼中開源TTL探針與ARMS探針的掛載順序,保證ARMS探針在後。
Spring Boot情境樣本:
-javaagent:/home/admin/transmittable-thread-local-2.14.2.jar -javaagent:/{user.workspace}/ArmsAgent/aliyun-java-agent.jar
自動接入方式添加JVM參數
如果您是Container ServiceACK環境自動安裝探針的方式,改用手動安裝探針方式修改接入指令碼的工作量較大,可以使用在容器環境中添加JVM參數的方式。
登入Container Service管理主控台,在目的地組群的無狀態頁面,單擊接入ARMS應用右側的編輯。
在環境變數中添加TTL探針參數,然後單擊儲存。
如果使用位元組碼加密工具對位元組碼進行加密,則探針要求如下,否則接入ARMS探針後可能導致啟動失敗。
確保自訂的Agent在最開始運行, ARMS探針在後面運行。
需要使用4.x以上版本的ARMS探針,以保證應用能夠正常接入。