摘要:宏巍電商軟件是在阿里體系內(nèi)使用他們的,然后在上用多進(jìn)程做的集群,端和接口系統(tǒng)都是使用語言實(shí)現(xiàn)的。宏巍電商軟件架構(gòu)我們嘗試過很多方法來進(jìn)行線程狀態(tài)的監(jiān)控,比如開始時(shí)使用等工具來讀取的狀態(tài),同時(shí)也嘗試用過的,但都不能滿足電商產(chǎn)品性能監(jiān)控需求。
宏巍軟件 許向
大家好,我是上海宏巍信息技術(shù)有限公司(簡(jiǎn)稱:宏巍軟件)的許向,宏巍軟件成立于2005年,是一家以電商ERP軟件開發(fā)為主的高新技術(shù)科技型軟件公司,致力于為大型網(wǎng)商和電子商務(wù)企業(yè)提供專業(yè)、全面、量身訂制的企業(yè)ERP管理軟件和應(yīng)用解決方案。
宏巍電商ERP軟件是在阿里體系內(nèi)使用他們的SLB,然后在ECS上用haproxy JBOSS(多進(jìn)程)做的集群,ERP端和接口系統(tǒng)都是使用Java語言實(shí)現(xiàn)的。隨著近年來電商業(yè)務(wù)量的爆發(fā)式增長(zhǎng),Java在性能上的問題逐漸突出,ERP端有時(shí)候會(huì)無故的卡頓,接口系統(tǒng)跑著跑著沒了,或者進(jìn)程出現(xiàn)卡死情況。
宏巍電商ERP軟件架構(gòu)
我們嘗試過很多方法來進(jìn)行Java線程狀態(tài)的監(jiān)控,比如開始時(shí)使用jstat、jps等工具來讀取JVM的狀態(tài),同時(shí)也嘗試用過Zabbix的Java proxy,但都不能滿足電商ERP產(chǎn)品性能監(jiān)控需求。后來通過腳本來調(diào)用這些工具讀取狀態(tài)后,通過API回寫給Zabbix來記錄與報(bào)警,但仍然不能完全解決Java線程卡死的問題,因?yàn)檫@些數(shù)據(jù)只有常態(tài)的內(nèi)存狀態(tài),GC回收狀態(tài),線程到底在干什么,運(yùn)維壓根是不知道的。
于是我們嘗試用JProfile來對(duì)具體的情況進(jìn)行分析,但是JProfile非常耗資源,沒法在生產(chǎn)環(huán)境上進(jìn)行調(diào)試,這就導(dǎo)致了很多系統(tǒng)沒有數(shù)據(jù)通過就無法調(diào)試,而這種情況持續(xù)了很長(zhǎng)一段時(shí)間。最后我們的解決辦法就是寫一個(gè)監(jiān)控的爬蟲,跑在每臺(tái)機(jī)器上,發(fā)現(xiàn)鉤子爬不到了就觸發(fā)重啟Java進(jìn)程,并且進(jìn)行郵件告警。
后來遇到了云智慧應(yīng)用性能管理產(chǎn)品透視寶http://www.toushibao.com 的工程師 ,給我們定制了基于電商ERP任務(wù)系統(tǒng)的Java線程APM監(jiān)控,與原有定時(shí)任務(wù)所使用的Java Quartz實(shí)現(xiàn)無縫對(duì)接。
在JBoss啟動(dòng)過程中插入透視寶的Agent,并由業(yè)務(wù)啟動(dòng)腳本通過配置文件來判斷業(yè)務(wù)是不是要啟動(dòng)監(jiān)控,當(dāng)監(jiān)控啟動(dòng)以后,我們?cè)谕敢晫毜腄ashboard里就可以看到每個(gè)Java進(jìn)程的詳細(xì)運(yùn)行情況,從主進(jìn)程到其派生出來的子進(jìn)程,能準(zhǔn)確了解到底哪個(gè)環(huán)節(jié)的哪些方法慢,什么方法卡死了。
透視寶實(shí)現(xiàn)了對(duì)運(yùn)行時(shí)代碼、SQL執(zhí)行、API調(diào)用過程的性能數(shù)據(jù)采集與分析,深入到代碼層面定位性能瓶頸,分析性能下降的原因,幫助技術(shù)和運(yùn)維人員從大量的業(yè)務(wù)請(qǐng)求中抓取及分析真實(shí)用戶操作背后的代碼執(zhí)行邏輯關(guān)系與狀態(tài)如執(zhí)行時(shí)間最長(zhǎng)的方法、慢查詢。
與傳統(tǒng) ?Agent ?安裝與配置模式不同,透視寶提供的Smart ?Agent實(shí)現(xiàn)了真正一鍵安裝,針對(duì)不同操作系統(tǒng)版本及各種服務(wù),用戶無需面對(duì)各種復(fù)雜的下載和參數(shù)配置,Smart ?Agent會(huì)自動(dòng)發(fā)現(xiàn)本機(jī)所有的服務(wù)、應(yīng)用及運(yùn)行時(shí)代碼環(huán)境,用戶確認(rèn)后系統(tǒng)會(huì)自動(dòng)安裝對(duì)應(yīng)版本的監(jiān)控插件,整個(gè)過程全自動(dòng)化實(shí)現(xiàn),用戶不需要進(jìn)行任何手動(dòng)配置操作。針對(duì)復(fù)雜系統(tǒng)的維護(hù)與升級(jí),透視寶同樣提供方便的更新解決方案,可對(duì)Smart Agent的健康狀態(tài)進(jìn)行實(shí)時(shí)監(jiān)測(cè),當(dāng)系統(tǒng)環(huán)境發(fā)生變化時(shí),無需重新安裝與部署,可有效降低集群環(huán)境中系統(tǒng)的總體維護(hù)成本。
QA:
問:透視寶的Agent插入簡(jiǎn)單嗎?
答:
透視寶Agent插入非常簡(jiǎn)單,只要是支持的Java版本,無需手動(dòng)配置和下載就能自動(dòng)匹配對(duì)應(yīng)的探針文件,插入過程完全自動(dòng)化。
當(dāng)然你可以根據(jù)需要決定是否插入探針,這是我們?cè)谀_本里面做的開關(guān),供參考。
問:你的爬蟲爬取哪些內(nèi)容?
答:
我們的爬蟲會(huì)根據(jù)配置文件,爬自己的健康頁(yè)面,每臺(tái)機(jī)器上的集群配置文件是由我們的運(yùn)維系統(tǒng)創(chuàng)建并分發(fā)下去的,同時(shí)每臺(tái)機(jī)器上都會(huì)通過slat來同步腳本。
問:怎么實(shí)現(xiàn)Java Quartz定時(shí)的?剛看你說的爬的鉤子都是健康頁(yè)面,定時(shí)任務(wù)也算嗎?
答:定時(shí)任務(wù)監(jiān)控一直是我們很頭疼的一個(gè)問題,我們用了一個(gè)妥協(xié)的辦法,把Quartz跑到JBoss的serverlet里面去,在沒有透視寶之前我只能知道進(jìn)程沒了,或者進(jìn)程僵死了,如果Quartz的調(diào)度任務(wù)內(nèi)部代碼出現(xiàn)問題,我們是不知道的,因?yàn)檫@個(gè)時(shí)候返回都是正常的,我們只能通過轉(zhuǎn)化任務(wù)的池來比對(duì)判定。
問:利用python爬取健康頁(yè)面,有沒有具體策略?比如如何觸發(fā)報(bào)警,什么時(shí)候報(bào)警?
答:頁(yè)面鉤子,腳本通過Cron或者跑在后臺(tái),腳本都能支持。
問:報(bào)警后有沒有進(jìn)程恢復(fù)策略?
答:簡(jiǎn)單粗暴,干掉重啟。因?yàn)榍岸擞蠰B,當(dāng)?shù)粢慌_(tái)問題不大,我們有另外一套業(yè)務(wù)在測(cè)試TBSchedule,Taobao開源的一套任務(wù)系統(tǒng):https://github.com/taobao/TBS...,后來發(fā)現(xiàn)換了這個(gè)任務(wù)還是卡死,為了深挖代碼問題,就強(qiáng)推了一把透視寶。運(yùn)維現(xiàn)在用的是Tornado Flower Celery,用的很開心也很穩(wěn)定。我覺得關(guān)鍵不在于用什么框架,而是在于代碼性能到底怎么樣,所以要發(fā)現(xiàn)代碼問題,APM一定要上。
問:服務(wù)器上jvm堆外內(nèi)存是怎么監(jiān)控的?
答:目前堆外內(nèi)存并沒有監(jiān)控,因?yàn)槲覀冞\(yùn)維人少事情多,簡(jiǎn)單粗暴能處理掉問題就行了。
問:如果服務(wù)器jvm堆內(nèi)存很穩(wěn)定,可是內(nèi)存一點(diǎn)點(diǎn)上漲的話,這個(gè)會(huì)不會(huì)有問題呢?
答:這個(gè)要結(jié)合業(yè)務(wù)來看,如果與業(yè)務(wù)增長(zhǎng)曲線是同步的,也沒有太多問題。如果沒有業(yè)務(wù)增長(zhǎng),內(nèi)存卻還是在增加,然后full gc ,就要考慮代碼上有內(nèi)存泄露了。一般說linux內(nèi)存慢慢被占用很正常, full gc的話也不是很頻繁。很緩慢的增長(zhǎng),運(yùn)行幾天都可能不會(huì)發(fā)生,如果運(yùn)行太長(zhǎng)時(shí)間 jvm 突然間來一次full gc的話,那應(yīng)用就會(huì)突然卡住。
問:在服務(wù)集群部署的情況下,會(huì)不會(huì)運(yùn)行一段時(shí)間就自動(dòng)重啟應(yīng)用,釋放jvm占用的內(nèi)存?
答: 不會(huì),jvm本身會(huì)回收,只要找到自己業(yè)務(wù)合適的內(nèi)存配置就可以。
問:你們集群會(huì)不會(huì)定時(shí)重啟部分應(yīng)用呢?
答:我們集群并沒有定期重啟,但是我們發(fā)布很頻繁,一周有2個(gè)發(fā)布窗口,等于一周重啟了2次。
云智慧是業(yè)務(wù)運(yùn)維解決方案服務(wù)商,旗下產(chǎn)品監(jiān)控寶(www.jiankongbao.com)、透視寶(www.toushibao.com)、壓測(cè)寶(www.yacebao.com),已累計(jì)為電商、移動(dòng)互聯(lián)網(wǎng)、廣告?zhèn)髅健⒃诰€游戲、教育醫(yī)療、金融證券、政企等行業(yè)的幾十萬用戶提供了一站式的應(yīng)用性能監(jiān)控、管理及測(cè)試服務(wù)。
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://specialneedsforspecialkids.com/yun/65240.html
摘要:今天整理了一下近大半年以來的一些文章,和我的預(yù)期一樣,很多文章我都忘記自己曾經(jīng)寫過了,這個(gè)記錄的過程讓我也有了新的理解。希望大家,收藏,點(diǎn)贊,加轉(zhuǎn)發(fā)。 今天整理了一下近大半年以來的一些文章,和我的預(yù)期一樣,很多文章我都忘記自己曾經(jīng)寫過了,這個(gè)記錄的過程讓我也有了新的理解。希望大家,收藏,點(diǎn)贊,加轉(zhuǎn)發(fā)。 面試必備 面試必備:深入Spring MVC DispatchServlet 源碼...
摘要:今天整理了一下近大半年以來的一些文章,和我的預(yù)期一樣,很多文章我都忘記自己曾經(jīng)寫過了,這個(gè)記錄的過程讓我也有了新的理解。希望大家,收藏,點(diǎn)贊,加轉(zhuǎn)發(fā)。 今天整理了一下近大半年以來的一些文章,和我的預(yù)期一樣,很多文章我都忘記自己曾經(jīng)寫過了,這個(gè)記錄的過程讓我也有了新的理解。希望大家,收藏,點(diǎn)贊,加轉(zhuǎn)發(fā)。 面試必備 面試必備:深入Spring MVC DispatchServlet 源碼...
摘要:基礎(chǔ)知識(shí)復(fù)習(xí)后端掘金的作用表示靜態(tài)修飾符,使用修飾的變量,在中分配內(nèi)存后一直存在,直到程序退出才釋放空間。將對(duì)象編碼為字節(jié)流稱之為序列化,反之將字節(jié)流重建成對(duì)象稱之為反序列化。 Java 學(xué)習(xí)過程|完整思維導(dǎo)圖 - 后端 - 掘金JVM 1. 內(nèi)存模型( 內(nèi)存分為幾部分? 堆溢出、棧溢出原因及實(shí)例?線上如何排查?) 2. 類加載機(jī)制 3. 垃圾回收 Java基礎(chǔ) 什么是接口?什么是抽象...
閱讀 3296·2021-11-24 09:39
閱讀 2804·2021-10-12 10:20
閱讀 1906·2019-08-30 15:53
閱讀 3075·2019-08-30 14:14
閱讀 2600·2019-08-29 15:36
閱讀 1120·2019-08-29 14:11
閱讀 1955·2019-08-26 13:51
閱讀 3407·2019-08-26 13:23