標籤:電子商務 解決方案 有限公司 資訊技術 高新技術
宏巍軟體 許向
大家好,我是上海宏巍資訊技術有限公司(簡稱:宏巍軟體)的許向,宏巍軟體成立於2005年,是一家以電商ERP軟體開發為主的高新技術科技型軟體公司,致力於為大型網商和電子商務企業提供專業、全面、量身訂製的企業ERP管理軟體和應用解決方案。
650) this.width=650;" height="283" src="http://static.oschina.net/uploads/space/2016/1103/143541_FS24_1792703.png" width="479" style="border:none;margin:auto;height:auto;" />
宏巍電商ERP軟體是在阿里體系內使用他們的SLB,然後在ECS上用haproxy JBOSS(多進程)做的叢集,ERP端和介面系統都是使用Java語言實現的。隨著近年來電商業務量的爆髮式增長,Java在效能上的問題逐漸突出,ERP端有時候會無故的卡頓,介面系統跑著跑著沒了,或者進程出現卡死情況。
650) this.width=650;" height="551" src="http://static.oschina.net/uploads/space/2016/1103/143710_meV4_1792703.png" width="800" style="border:none;margin:auto;height:auto;" />
宏巍電商ERP軟體架構
我們嘗試過很多方法來進行Java線程狀態的監控,比如開始時使用jstat、jps等工具來讀取JVM的狀態,同時也嘗試用過Zabbix的Java proxy,但都不能滿足電商ERP產品效能監控需求。後來通過指令碼來調用這些工具讀取狀態後,通過API回寫給Zabbix來記錄與警示,但仍然不能完全解決Java線程卡死的問題,因為這些資料只有常態的記憶體狀態,GC回收狀態,線程到底在幹什麼,營運壓根是不知道的。
於是我們嘗試用JProfile來對具體的情況進行分析,但是JProfile非常耗資源,沒法在生產環境上進行調試,這就導致了很多系統沒有資料通過就無法調試,而這種情況持續了很長一段時間。最後我們的解決辦法就是寫一個監控的爬蟲,跑在每台機器上,發現鉤子爬不到了就觸發重啟Java進程,並且進行郵件警示。
後來遇到了雲智慧應用效能管理產品透視寶http://www.toushibao.com 的工程師 ,給我們定製了基於電商ERP任務系統的Java線程APM監控,與原有定時任務所使用的Java Quartz實現無縫對接。
650) this.width=650;" height="209" src="http://static.oschina.net/uploads/space/2016/1103/143748_SOre_1792703.png" width="533" style="border:none;margin:auto;height:auto;" />
在JBoss啟動過程中插入透視寶的Agent,並由業務啟動指令碼通過設定檔來判斷業務是不是要啟動監控,當監控啟動以後,我們在透視寶的Dashboard裡就可以看到每個Java進程的詳細運行情況,從主進程到其派生出來的子進程,能準確瞭解到底哪個環節的哪些方法慢,什麼方法卡死了。
650) this.width=650;" height="416" src="http://static.oschina.net/uploads/space/2016/1103/143808_hwPN_1792703.png" width="800" style="border:none;margin:auto;height:auto;" />
透視寶實現了對運行時代碼、SQL執行、API調用過程的效能資料採集與分析,深入到代碼層面定位效能瓶頸,分析效能下降的原因,協助技術和營運人員從大量的業務請求中抓取及分析真實使用者操作背後的代碼執行邏輯關係與狀態如執行時間最長的方法、慢查詢。
與傳統 Agent 安裝與配置模式不同,透視寶提供的Smart Agent實現了真正一鍵安裝,針對不同作業系統版本及各種服務,使用者無需面對各種複雜的下載和參數配置,Smart Agent會自動探索本機所有的服務、應用及運行時代碼環境,使用者確認後系統會自動安裝對應版本的監控外掛程式,整個過程全自動化實現,使用者不需要進行任何手動設定操作。針對複雜系統的維護與升級,透視寶同樣提供方便的更新解決方案,可對Smart Agent的健康狀態進行即時監測,當系統內容發生變化時,無需重新安裝與部署,可有效降低叢集環境中系統的總體維護成本。
QA:
問:透視寶的Agent插入簡單嗎?
答:
650) this.width=650;" height="447" src="http://static.oschina.net/uploads/space/2016/1103/143844_Jlev_1792703.png" width="800" style="border:none;margin:auto;height:auto;" />
透視寶Agent插入非常簡單,只要是支援的Java版本,無需手動設定和下載就能自動匹配對應的探針檔案,插入過程完全自動化。
650) this.width=650;" height="359" src="http://static.oschina.net/uploads/space/2016/1103/143915_FAWZ_1792703.png" width="800" style="border:none;margin:auto;height:auto;" />
當然你可以根據需要決定是否插入探針,這是我們在指令碼裡面做的開關,供參考。
問:你的爬蟲爬取哪些內容?
答:
650) this.width=650;" height="383" src="http://static.oschina.net/uploads/space/2016/1103/143935_IugL_1792703.png" width="800" style="border:none;margin:auto;height:auto;" />
650) this.width=650;" height="230" src="http://static.oschina.net/uploads/space/2016/1103/143949_Dh5T_1792703.png" width="997" style="border:none;margin:auto;height:auto;" />
我們的爬蟲會根據設定檔,爬自己的健康頁面,每台機器上的叢集設定檔是由我們的營運系統建立並分發下去的,同時每台機器上都會通過slat來同步指令碼。
問:怎麼實現Java Quartz定時的?剛看你說的爬的鉤子都是健康頁面,定時任務也算嗎?
答:定時任務監控一直是我們很頭疼的一個問題,我們用了一個妥協的辦法,把Quartz跑到JBoss的serverlet裡面去,在沒有透視寶之前我只能知道進程沒了,或者進程僵死了,如果Quartz的調度任務內部代碼出現問題,我們是不知道的,因為這個時候返回都是正常的,我們只能通過轉化任務的池來比對判定。
問:利用python爬取健康頁面,有沒有具體策略?比如如何觸發警示,什麼時候警示?
答:頁面鉤子,指令碼通過Cron或者跑在後台,指令碼都能支援。
問:警示後有沒有進程恢複策略?
答:簡單粗暴,幹掉重啟。因為前端有LB,當掉一台問題不大,我們有另外一套業務在測試TBSchedule,Taobao開源的一套任務系統:https://github.com/taobao/TBSchedule,後來發現換了這個任務還是卡死,為了深挖代碼問題,就強推了一把透視寶。營運現在用的是Tornado Flower Celery,用的很開心也很穩定。我覺得關鍵不在於用什麼架構,而是在於代碼效能到底怎麼樣,所以要發現代碼問題,APM一定要上。
問:伺服器上jvm堆外記憶體是怎麼監控的?
答:目前堆外記憶體並沒有監控,因為我們營運人少事情多,簡單粗暴能處理掉問題就行了。
問:如果伺服器jvm堆記憶體很穩定,可是記憶體一點點上漲的話,這個會不會有問題呢?
答:這個要結合業務來看,如果與業務增長曲線是同步的,也沒有太多問題。如果沒有業務增長,記憶體卻還是在增加,然後full gc ,就要考慮代碼上有記憶體泄露了。一般說linux記憶體慢慢被佔用很正常, full gc的話也不是很頻繁。很緩慢的增長,運行幾天都可能不會發生,如果運行太長時間 jvm 突然間來一次full gc的話,那應用就會突然卡住。
問:在服務叢集部署的情況下,會不會運行一段時間就自動重啟應用,釋放jvm佔用的記憶體?
答: 不會,jvm本身會回收,只要找到自己業務合適的記憶體配置就可以。
問:你們叢集會不會定時重啟部分應用呢?
答:我們叢集並沒有定期重啟,但是我們發布很頻繁,一周有2個發布視窗,等於一周重啟了2次。
650) this.width=650;" height="430" src="http://static.oschina.net/uploads/space/2016/1103/144447_zhXN_1792703.png" width="430" style="border:none;margin:auto;height:auto;" />
雲智慧是業務營運解決方案服務商,旗下產品監控寶(www.jiankongbao.com)、透視寶(www.toushibao.com)、壓測寶(www.yacebao.com),已累計為電商、移動互連網、廣告傳媒、線上遊戲、教育醫學、金融證券、政企等行業的幾十萬使用者提供了一站式的應用效能監控、管理及測試服務。
乾貨|宏巍軟體之Java線程監控之旅