亚洲成年人黄色一级片,日本香港三级亚洲三级,黄色成人小视频,国产青草视频,国产一区二区久久精品,91在线免费公开视频,成年轻人网站色直接看

B/S結(jié)構(gòu)的性能監(jiān)控分析系統(tǒng)和方法與流程

文檔序號(hào):12624811閱讀:450來(lái)源:國(guó)知局
B/S結(jié)構(gòu)的性能監(jiān)控分析系統(tǒng)和方法與流程

本申請(qǐng)涉及計(jì)算機(jī)技術(shù)領(lǐng)域,尤其涉及一種B/S結(jié)構(gòu)的性能監(jiān)控分析系統(tǒng)和方法。



背景技術(shù):

現(xiàn)有技術(shù)中對(duì)于Java服務(wù)器的性能分析工具主要包括:客戶端方式、日志統(tǒng)計(jì)方式和命令行方式等三種類型。

其中,客戶端方式需要在Windows系統(tǒng)或者Linux系統(tǒng)上安裝客戶端,然后和服務(wù)器上的后臺(tái)服務(wù)進(jìn)行通訊,獲取所需的監(jiān)控分析數(shù)據(jù),這種方式的缺點(diǎn)主要包括:

(1)需要安裝客戶端,如果更換機(jī)器,還需要再重新安裝客戶端;

(2)操作獨(dú)占。用戶只能在這臺(tái)安裝了客戶端的機(jī)器上操作和查看,而且這臺(tái)機(jī)器不能再進(jìn)行其他操作;

(3)分析后的結(jié)果文件保存后,也需要客戶端來(lái)讀取和識(shí)別,無(wú)法共享;其他人想看仍然要安裝客戶端,同時(shí)把文件拷貝過(guò)來(lái)打開,非常不方便;

(4)分析數(shù)據(jù)和回傳數(shù)據(jù)的代理模塊引入在服務(wù)器進(jìn)程當(dāng)中,相互之間造成資源爭(zhēng)搶,同時(shí)對(duì)數(shù)據(jù)也會(huì)有干擾;

(5)分析屬于字節(jié)碼全量分析,開啟后對(duì)性能影響很大,不適合線上監(jiān)控和使用。

命令行方式雖然不需要安裝客戶端,但是需要在服務(wù)器端執(zhí)行,這種方式的缺點(diǎn)主要包括:

(1)需要服務(wù)器的權(quán)限才可以登錄執(zhí)行,存在安全問(wèn)題。

(2)需要提前知道要監(jiān)控的方法和類,指定類和方法進(jìn)行監(jiān)控和分析。

(3)無(wú)法進(jìn)行實(shí)時(shí)監(jiān)控,必須要等到監(jiān)控工作完成后才可以搜集數(shù)據(jù)和展示,不利于排查問(wèn)題。

(4)資源獨(dú)占。

(5)監(jiān)控基于日志文件,靈活性不強(qiáng)。

(6)全方法掃描,性能消耗大。

(7)監(jiān)控范圍有限,只能統(tǒng)計(jì)時(shí)間消耗,無(wú)法計(jì)算CPU消耗。

日志統(tǒng)計(jì)的方式就更加原始,其缺點(diǎn)主要包括:

(1)需要在代碼中明文埋點(diǎn)或者配置中增加參數(shù),侵入性強(qiáng)。

(2)分析的數(shù)據(jù)在日志中存放,無(wú)法持久化,不靈活。

(3)統(tǒng)計(jì)工具不完善,展示方式不友好,不利于分析。

(4)監(jiān)控范圍有限,只能統(tǒng)計(jì)時(shí)間消耗,無(wú)法計(jì)算CPU消耗。

所以,在使用以上工具分析性能瓶頸的時(shí)候,存在以下問(wèn)題:

(1)不實(shí)時(shí)。在方法中增加埋點(diǎn)代碼,用于記錄方法前后調(diào)用的時(shí)間信息、或放在內(nèi)存、或放在日志中保存,然后輸出,這種方法的缺點(diǎn)就是a.不能實(shí)時(shí)監(jiān)控;b.需要開發(fā)代碼,同時(shí)對(duì)所監(jiān)控的應(yīng)用代碼邏輯了解,成本高;c.每次訪問(wèn)都要走該代碼邏輯,耗時(shí),耗IO資源;d.監(jiān)控代碼和服務(wù)器代碼混合在一起,產(chǎn)生性能分析的混淆。

(2)侵入性。利用字節(jié)碼反編譯注入的方式。對(duì)代碼有侵入性,同時(shí)對(duì)資源消耗也很大,每次調(diào)用都會(huì)執(zhí)行,無(wú)法基于業(yè)務(wù)線程分析,會(huì)使其他線程的信息產(chǎn)生業(yè)務(wù)上的混淆,不支持采樣。

(3)不靈活,無(wú)共享??蛻舳塑浖?,需要安裝,分析的文件無(wú)法共享,打開文件需要安裝相應(yīng)的客戶端軟件,不靈活。

(4)操作獨(dú)占,無(wú)法共享操作資源。

(5)單方法,需要提前知道業(yè)務(wù)需要監(jiān)控的方法,然后作為參數(shù)傳入給工具,只能監(jiān)控該方法的調(diào)用,無(wú)法實(shí)現(xiàn)整個(gè)方法遞歸查詢。

(6)有干擾。分析數(shù)據(jù)和回傳數(shù)據(jù)的代理模塊引入在服務(wù)器進(jìn)程當(dāng)中,相互之間造成資源爭(zhēng)搶,同時(shí)對(duì)數(shù)據(jù)也會(huì)有干擾。



技術(shù)實(shí)現(xiàn)要素:

本申請(qǐng)的主要目的在于提供一種B/S結(jié)構(gòu)的性能監(jiān)控分析系統(tǒng)和方法,以克服現(xiàn)有技術(shù)中的上述問(wèn)題。

根據(jù)本申請(qǐng)實(shí)施例提供了一種B/S結(jié)構(gòu)的性能監(jiān)控分析系統(tǒng),其包括:控制模塊、性能數(shù)據(jù)客戶端節(jié)點(diǎn)模塊、性能監(jiān)控?cái)?shù)據(jù)收集模塊,

所述控制模塊,用于采用雙通道消息通訊方式向所述性能數(shù)據(jù)客戶端節(jié)點(diǎn)模塊發(fā)送控制消息;

所述性能數(shù)據(jù)客戶端節(jié)點(diǎn)模塊,設(shè)置于服務(wù)器中,用于根據(jù)接收到的控制指令采集服務(wù)器的性能數(shù)據(jù);

所述性能監(jiān)控?cái)?shù)據(jù)收集模塊,用于開啟分析進(jìn)程,對(duì)采集到的服務(wù)器的性能數(shù)據(jù)進(jìn)行分析。

根據(jù)本申請(qǐng)實(shí)施例還提供一種B/S結(jié)構(gòu)的性能監(jiān)控分析方法,其包括:

采用雙通道消息通訊方式發(fā)送控制消息;

根據(jù)接收到的控制指令采集服務(wù)器的性能數(shù)據(jù);

開啟分析進(jìn)程,對(duì)采集到的服務(wù)器的性能數(shù)據(jù)進(jìn)行分析。

與現(xiàn)有技術(shù)相比,根據(jù)本申請(qǐng)的技術(shù)方案,通過(guò)雙通道消息控制方式實(shí)現(xiàn)了多種網(wǎng)絡(luò)環(huán)境下的監(jiān)控操作和數(shù)據(jù)采集,并且數(shù)據(jù)采集進(jìn)程和服務(wù)器進(jìn)程相對(duì)獨(dú)立,相互之間不受影響,通過(guò)本申請(qǐng)能夠快速、實(shí)時(shí)、高效的定位出服務(wù)器瓶頸所在,且持久化保存,為優(yōu)化提供數(shù)據(jù)依據(jù)和對(duì)比。

附圖說(shuō)明

此處所說(shuō)明的附圖用來(lái)提供對(duì)本申請(qǐng)的進(jìn)一步理解,構(gòu)成本申請(qǐng)的一部分,本申請(qǐng)的示意性實(shí)施例及其說(shuō)明用于解釋本申請(qǐng),并不構(gòu)成對(duì)本申請(qǐng)的不當(dāng)限定。在附圖中:

圖1是根據(jù)本申請(qǐng)一個(gè)實(shí)施例的性能監(jiān)控分析系統(tǒng)的結(jié)構(gòu)框圖;

圖2是根據(jù)本申請(qǐng)另一實(shí)施例的性能監(jiān)控分析系統(tǒng)的結(jié)構(gòu)框圖;

圖3是根據(jù)本申請(qǐng)實(shí)施例的CPU數(shù)據(jù)分析以及生成CPU快照信息的流程圖;

圖4是根據(jù)本申請(qǐng)實(shí)施例的生成線程快照和開啟內(nèi)存分析的流程圖;

圖5是根據(jù)本申請(qǐng)實(shí)施例的性能監(jiān)控分析方法的流程圖;

圖6A-圖6D是根據(jù)本申請(qǐng)實(shí)施例的CPU數(shù)據(jù)采集和線程采集過(guò)程的流程圖;

圖7A和圖7B是根據(jù)本申請(qǐng)實(shí)施例的詳細(xì)描述內(nèi)存采集過(guò)程的流程圖。

具體實(shí)施方式

為使本申請(qǐng)的目的、技術(shù)方案和優(yōu)點(diǎn)更加清楚,下面將結(jié)合本申請(qǐng)具體實(shí)施例及相應(yīng)的附圖對(duì)本申請(qǐng)技術(shù)方案進(jìn)行清楚、完整地描述。顯然,所描述的實(shí)施例僅是本申請(qǐng)一部分實(shí)施例,而不是全部的實(shí)施例?;诒旧暾?qǐng)中的實(shí)施例,本領(lǐng)域普通技術(shù)人員在沒(méi)有做出創(chuàng)造性勞動(dòng)前提下所獲得的所有其他實(shí)施例,都屬于本申請(qǐng)保護(hù)的范圍。

根據(jù)本申請(qǐng)實(shí)施例,提供一種B/S結(jié)構(gòu)的性能監(jiān)控分析系統(tǒng)。該系統(tǒng)是一種分布式的性能自動(dòng)化測(cè)試平臺(tái)(Performance Automation Test Platform,簡(jiǎn)稱PAP),該測(cè)試平臺(tái)基于B/S結(jié)構(gòu)(Browser/Server,瀏覽器/服務(wù)器模式),用戶可以通過(guò)Web的方式,在任何時(shí)間和任何地點(diǎn)通過(guò)系統(tǒng)平臺(tái)管理性能測(cè)試環(huán)境,配置性能監(jiān)控,設(shè)置性能測(cè)試場(chǎng)景和測(cè)試任務(wù),對(duì)目標(biāo)實(shí)施壓力測(cè)試。該平臺(tái)能夠自動(dòng)分發(fā)測(cè)試任務(wù)和監(jiān)控命令,并自動(dòng)獲取監(jiān)控結(jié)果、測(cè)試結(jié)果,展示出來(lái),為用戶提供性能數(shù)據(jù)采集和分析依據(jù)。

圖1是根據(jù)本申請(qǐng)一個(gè)實(shí)施例的B/S結(jié)構(gòu)的性能監(jiān)控分析系統(tǒng)的結(jié)構(gòu)框圖,如圖1所示,所述性能監(jiān)控分析系統(tǒng)包括:控制模塊(Control)10、性能數(shù)據(jù)客戶端節(jié)點(diǎn)模塊(perf-agent)20、性能監(jiān)控?cái)?shù)據(jù)收集模塊(Monitor)30,下面詳細(xì)描述各模塊的結(jié)構(gòu)和功能。

所述控制模塊10,用于采用雙通道消息通訊方式向所述性能數(shù)據(jù)客戶端節(jié)點(diǎn)模塊20發(fā)送控制消息。在本申請(qǐng)實(shí)施例中,所述雙通道消息通訊方式包括:套接字(Socket)消息通訊方式和消息隊(duì)列(Message Queue,簡(jiǎn)稱 MQ)通訊方式,其中,Socket消息通訊方式的工作過(guò)程包括:

(1)性能數(shù)據(jù)客戶端節(jié)點(diǎn)模塊發(fā)起一個(gè)Socket監(jiān)聽線程,監(jiān)聽預(yù)定格式的開啟消息和結(jié)束消息;

(2)控制模塊發(fā)送一個(gè)預(yù)定格式的命令串,命令串的格式可以是“命令@WorkspaceKey”;

(3)性能數(shù)據(jù)客戶端節(jié)點(diǎn)模塊接收到開啟消息(命令串的格式可以是start@Key)時(shí),創(chuàng)建一個(gè)Key的采集任務(wù),進(jìn)行任務(wù)采集;

(4)性能數(shù)據(jù)客戶端節(jié)點(diǎn)模塊接收到結(jié)束消息(命令串的格式可以是stop@Key)時(shí),提取出Key的采集任務(wù),停止該任務(wù)。

MQ消息通訊方式的工作過(guò)程包括:

(1)性能數(shù)據(jù)客戶端節(jié)點(diǎn)模塊發(fā)起一個(gè)MQ監(jiān)聽線程,監(jiān)聽消息隊(duì)列;

(2)控制模塊發(fā)送消息給MQ。MQ支持Java對(duì)象的傳輸,消息對(duì)象包括“命令、WorkspaceKey”;

(3)性能數(shù)據(jù)客戶端節(jié)點(diǎn)模塊接收到開啟消息時(shí),創(chuàng)建一個(gè)key的采集任務(wù),進(jìn)行任務(wù)采集;

(4)性能數(shù)據(jù)客戶端節(jié)點(diǎn)模塊接收到結(jié)束消息時(shí),提取出key的采集任務(wù),停止該任務(wù)。

在實(shí)際應(yīng)用中,需要根據(jù)不同的網(wǎng)絡(luò)環(huán)境采用對(duì)應(yīng)的消息通訊方式,Socket消息通訊方式傳輸速度快、穩(wěn)定、開發(fā)成本低,適合于局域網(wǎng)環(huán)境;而MQ消息通訊方式的覆蓋方位廣、限制少、容災(zāi)配置、且支持離線存儲(chǔ),適用于廣域網(wǎng)和復(fù)雜的網(wǎng)絡(luò)環(huán)境。

所述性能數(shù)據(jù)客戶端節(jié)點(diǎn)模塊20,用于根據(jù)接收到的控制指令采集服務(wù)器的性能數(shù)據(jù)。具體地,性能數(shù)據(jù)客戶端節(jié)點(diǎn)模塊20接收到的控制指令包括但不限于:CPU數(shù)據(jù)采集、生成CPU快照信息、生成線程快照信息和內(nèi)存數(shù)據(jù)采集等,下面根據(jù)接收到的控制指令的類型詳細(xì)描述性能數(shù)據(jù)客戶端節(jié)點(diǎn)模塊20的處理過(guò)程:

接收到CPU數(shù)據(jù)采集的控制消息后,創(chuàng)建數(shù)據(jù)采集線程和數(shù)據(jù)回傳線程,通過(guò)所述數(shù)據(jù)采集線程采集服務(wù)器的性能數(shù)據(jù),并通過(guò)所述數(shù)據(jù)回傳線 程將采集到的性能數(shù)據(jù)傳送至所述性能監(jiān)控?cái)?shù)據(jù)收集模塊;所述數(shù)據(jù)采集線程啟動(dòng)后,每隔預(yù)定時(shí)間觸發(fā)預(yù)先創(chuàng)建的數(shù)據(jù)采集器,所述數(shù)據(jù)采集器通過(guò)調(diào)用Java虛擬機(jī)線程系統(tǒng)的管理接口獲取到線程信息,并根據(jù)所述線程信息得到線程數(shù)據(jù),所述線程數(shù)據(jù)包括線程中的方法堆棧調(diào)用時(shí)間和CPU消耗時(shí)間;所述數(shù)據(jù)回傳線程啟動(dòng)后創(chuàng)建數(shù)據(jù)回傳器,每隔預(yù)定時(shí)間將所述線程數(shù)據(jù)回傳給所述性能監(jiān)控?cái)?shù)據(jù)收集模塊。

接收到生成CPU快照信息的控制消息后,根據(jù)所述數(shù)據(jù)采集器中的線程信息生成CPU快照文件,將所述CPU快照文件存儲(chǔ)至預(yù)先建立的分布式文件存儲(chǔ)裝置中。

接收到生成線程快照信息的控制消息后,根據(jù)所述數(shù)據(jù)采集器中的線程信息生成線程快照文件,將所述線程快照文件存儲(chǔ)至分布式文件存儲(chǔ)裝置中。

接收到內(nèi)存數(shù)據(jù)采集的控制消息后,創(chuàng)建內(nèi)存采集線程和內(nèi)存回傳線程;所述內(nèi)存采集線程啟動(dòng)后,每隔預(yù)定時(shí)間觸發(fā)預(yù)先創(chuàng)建的數(shù)據(jù)采集器,所述數(shù)據(jù)采集器通過(guò)應(yīng)用程序編程接口獲取服務(wù)器的內(nèi)存信息;所述內(nèi)存回傳線程啟動(dòng)后創(chuàng)建數(shù)據(jù)回傳器,每隔預(yù)定時(shí)間將所述內(nèi)存信息回傳給所述性能監(jiān)控?cái)?shù)據(jù)收集模塊。

在本申請(qǐng)的一個(gè)實(shí)施例中,所述性能數(shù)據(jù)客戶端節(jié)點(diǎn)模塊20設(shè)置于被監(jiān)控的Java服務(wù)器中,以便于監(jiān)控分析Java服務(wù)器的性能數(shù)據(jù)。

所述性能監(jiān)控?cái)?shù)據(jù)收集模塊30,用于收集Java服務(wù)器的性能數(shù)據(jù)并存儲(chǔ)。

如圖2所示,所述系統(tǒng)還包括:分布式文件存儲(chǔ)裝置40,用于存儲(chǔ)所述CPU快照文件和/或所述線程快照文件,并將存儲(chǔ)的文件名和鏈接地址返回給所述控制模塊。

分布式文件存儲(chǔ)裝置40是一個(gè)高可擴(kuò)展、高可用、高性能、面向互聯(lián)網(wǎng)服務(wù)的分布式文件系統(tǒng),主要針對(duì)海量的非結(jié)構(gòu)化數(shù)據(jù),它構(gòu)筑在普通的Linux機(jī)器集群上,可提供高可靠和高并發(fā)的存儲(chǔ)訪問(wèn)。在本申請(qǐng)的一個(gè)實(shí)施例中,分布式文件存儲(chǔ)裝置40可以是淘寶文件系統(tǒng)(Taobao FileSystem,簡(jiǎn)稱TFS)。

所述控制模塊10還用于,通過(guò)所述分布式文件存儲(chǔ)裝置40獲取所述CPU快照文件和/或所述線程快照文件并進(jìn)行顯示。

根據(jù)本申請(qǐng)的實(shí)施例,通過(guò)在壓測(cè)的同時(shí)實(shí)時(shí)采樣輸出線程信息、CPU方法和內(nèi)存消耗堆棧,可以把線程的所有方法輸出出來(lái),并給出自用時(shí)間的消耗和CPU時(shí)間的消耗、以及調(diào)用次數(shù)、內(nèi)存使用信息。由于采用了更快更輕量級(jí)的技術(shù),收集進(jìn)程和服務(wù)器進(jìn)程相互獨(dú)立,互不影響,減少了性能分析對(duì)應(yīng)用程序造成的影響,提高了性能分析的精度。

下面結(jié)合圖3和圖4詳細(xì)描述本申請(qǐng)實(shí)施例。圖3是根據(jù)本申請(qǐng)實(shí)施例的CPU數(shù)據(jù)分析以及生成CPU快照信息的流程圖,如圖3所示,包括以下步驟:

步驟S302,用戶在平臺(tái)上點(diǎn)擊開始按鈕,控制模塊發(fā)送CPU性能分析的啟動(dòng)消息給性能數(shù)據(jù)客戶端節(jié)點(diǎn)模塊;

步驟S304,性能數(shù)據(jù)客戶端節(jié)點(diǎn)模塊開啟一個(gè)獨(dú)立的CPU分析進(jìn)程,對(duì)服務(wù)器進(jìn)行分析;具體地,CPU分析進(jìn)程會(huì)通過(guò)Java的JMX管理接口,鏈接到Java服務(wù)器的Java虛擬機(jī)上,然后使用MXBeans類(用于監(jiān)視和管理Java虛擬機(jī)以及Java虛擬機(jī)在其上運(yùn)行的操作系統(tǒng))來(lái)獲取各種線程和方法的信息。在CPU分析中,用到threadInfoProvider這個(gè)類,性能數(shù)據(jù)客戶端節(jié)點(diǎn)模塊每次刷新時(shí),都會(huì)獲取所有的線程信息。ThreadInfo中,包含了線程名/方法名、線程/方法狀態(tài)等信息。所有的線程/方法都會(huì)用它的名字作為key存放在一個(gè)哈希表中。如果線程/方法的狀態(tài)是running(運(yùn)行)的,那么就把這段時(shí)間累加到哈希表中的對(duì)應(yīng)的這個(gè)線程/方法上面去。比如每隔5秒刷新一次,刷新時(shí),發(fā)現(xiàn)線程A的狀態(tài)是running,那么哈希表中,key為A的那條數(shù)據(jù)的值就加上5秒;同時(shí),也通過(guò)這個(gè)ThreadInfo和狀態(tài)信息來(lái)計(jì)算當(dāng)前系統(tǒng)中各種狀態(tài)下的線程數(shù)量;

步驟S306,性能數(shù)據(jù)客戶端節(jié)點(diǎn)模塊按照設(shè)定頻率收集到CPU分析數(shù)據(jù)后自動(dòng)回傳給性能監(jiān)控?cái)?shù)據(jù)收集模塊;

步驟S308,性能監(jiān)控?cái)?shù)據(jù)收集模塊將收集到的數(shù)據(jù)存儲(chǔ)至分布式文件存儲(chǔ)裝置;

步驟S310,控制模塊直接獲取分布式文件存儲(chǔ)裝置中存儲(chǔ)的CPU分析數(shù)據(jù);

步驟S312,控制模塊對(duì)CPU分析數(shù)據(jù)處理后展現(xiàn)在頁(yè)面,用戶可以通過(guò)系統(tǒng)平臺(tái)直接查看實(shí)時(shí)的收集數(shù)據(jù),包括線程和CPU的方法消耗的統(tǒng)計(jì)匯總信息;

步驟S314-S316,用戶可以發(fā)送停止命令,控制模塊發(fā)送停止CPU分析消息給性能數(shù)據(jù)客戶端節(jié)點(diǎn)模塊,性能數(shù)據(jù)客戶端節(jié)點(diǎn)模塊停止分析進(jìn)程;

步驟S318,控制模塊發(fā)起生成CPU快照信息的命令給性能數(shù)據(jù)客戶端節(jié)點(diǎn)模塊;

步驟S320-S324,性能數(shù)據(jù)客戶端節(jié)點(diǎn)模塊收到命令后,獲取當(dāng)前采集器中的線程信息,然后根據(jù)線程信息生成CPU快照文件,將CPU快照文件上傳至分布式文件存儲(chǔ)裝置,并將生成的CPU快照文件的文件名和鏈接地址返回給控制模塊;

步驟S326,控制模塊根據(jù)返回的文件名和鏈接地址獲取存儲(chǔ)的CPU快照文件;

步驟S328,控制模塊對(duì)CPU快照信息處理后展現(xiàn)在頁(yè)面,用戶可以通過(guò)系統(tǒng)平臺(tái)查看到收集的CPU快照信息,通過(guò)該信息可以找到詳細(xì)的方法消耗,定位存在問(wèn)題的服務(wù)器位置。

圖4是根據(jù)本申請(qǐng)實(shí)施例的生成線程快照和開啟內(nèi)存分析的流程圖,如圖4所示,包括以下步驟:

步驟S402,控制模塊發(fā)送開啟線程快照采集信息的命令給性能數(shù)據(jù)客戶端節(jié)點(diǎn)模塊;

步驟S404-S408,性能數(shù)據(jù)客戶端節(jié)點(diǎn)模塊收到采集線程快照命令后從ThreadMXBean中Dump出線程信息,同時(shí)生成一份線程快照文件,將線程快照文件上傳至分布式文件存儲(chǔ)裝置,并且把生成的線程快照文件的文件名和鏈接地址返回給控制模塊;

步驟S410,控制模塊根據(jù)返回的文件名和鏈接地址獲取存儲(chǔ)的線程快照文件;

步驟S412,控制模塊對(duì)線程快照信息處理后展現(xiàn)在頁(yè)面,用戶可以通過(guò)系統(tǒng)平臺(tái)查看詳細(xì)的線程快照信息,通過(guò)信息可以找所有線程的名稱、狀態(tài)和方法堆棧,分析線程問(wèn)題;

步驟S414,控制模塊還可以向性能數(shù)據(jù)客戶端節(jié)點(diǎn)模塊發(fā)送開啟內(nèi)存分析的消息命令;

步驟S416-S418,性能數(shù)據(jù)客戶端節(jié)點(diǎn)模塊收到采集內(nèi)存信息的命令后,開啟內(nèi)存分析過(guò)程,同時(shí)回傳內(nèi)存分析數(shù)據(jù)給性能監(jiān)控?cái)?shù)據(jù)收集模塊。具體地,使用JDK(Java語(yǔ)言的軟件開發(fā)工具包)中的Attach API(Sun JVM Attach API是Sun JVM中的一套非標(biāo)準(zhǔn)的可以連接到Java虛擬機(jī)上的API接口工具包)讀取內(nèi)存使用信息,并保存在一個(gè)變量中。每次刷新時(shí),都會(huì)讀取最新的內(nèi)存使用信息,并更新這個(gè)變量,進(jìn)行數(shù)據(jù)統(tǒng)計(jì)和分析。

步驟S420,性能監(jiān)控?cái)?shù)據(jù)收集模塊接收到內(nèi)存分析數(shù)據(jù)后入庫(kù)持久化保存;

步驟S422,控制模塊通過(guò)性能監(jiān)控?cái)?shù)據(jù)收集模塊獲取分布式文件存儲(chǔ)裝置中存儲(chǔ)的內(nèi)存分析數(shù)據(jù);

步驟S424,控制模塊對(duì)內(nèi)存分析數(shù)據(jù)處理后展現(xiàn)在頁(yè)面,用戶可以通過(guò)系統(tǒng)平臺(tái)直接查看收集的內(nèi)存分析數(shù)據(jù);

步驟S426-S428,用戶可以發(fā)送停止命令,控制模塊發(fā)送停止內(nèi)存分析消息給性能數(shù)據(jù)客戶端節(jié)點(diǎn)模塊,性能數(shù)據(jù)客戶端節(jié)點(diǎn)模塊停止內(nèi)存分析過(guò)程。

根據(jù)本申請(qǐng)實(shí)施例還提供一種B/S結(jié)構(gòu)的性能監(jiān)控分析方法。

圖5示出根據(jù)本申請(qǐng)一個(gè)實(shí)施例的B/S結(jié)構(gòu)的性能監(jiān)控分析方法的流程圖,參考圖5,所述方法包括:

步驟S502,采用雙通道消息通訊方式發(fā)送控制消息;

步驟S504,根據(jù)接收到的控制指令采集服務(wù)器的性能數(shù)據(jù);

步驟S506,開啟分析進(jìn)程,對(duì)采集到的服務(wù)器的性能數(shù)據(jù)進(jìn)行分析。

下面結(jié)合圖6A-圖6D詳細(xì)描述CPU數(shù)據(jù)采集和線程采集過(guò)程。圖6A是根據(jù)本申請(qǐng)實(shí)施例的CPU數(shù)據(jù)采集的流程圖,如圖6A所示,包括以下步驟:

步驟S602,接收到開啟CPU數(shù)據(jù)采集命令后,創(chuàng)建開啟數(shù)據(jù)采集的線程;

步驟S604-606,數(shù)據(jù)采集線程啟動(dòng)后創(chuàng)建一刷新器,該刷新器每隔預(yù)定的配置時(shí)間刷新,刷新時(shí)觸發(fā)預(yù)先創(chuàng)建的數(shù)據(jù)采集器;

步驟S608-610,數(shù)據(jù)采集器通過(guò)調(diào)用Java虛擬機(jī)線程系統(tǒng)的管理接口獲取到線程信息,并根據(jù)所述線程信息得到線程數(shù)據(jù),所述線程數(shù)據(jù)包括線程中的方法堆棧調(diào)用時(shí)間和CPU消耗時(shí)間。具體地,通過(guò)調(diào)用Dump命令從ThreadMXBean中獲取出線程信息,并對(duì)線程執(zhí)行時(shí)間進(jìn)行累加。

接收到停止命令后,停止開啟的數(shù)據(jù)采集線程。

參考圖6B,是根據(jù)本申請(qǐng)實(shí)施例的數(shù)據(jù)回傳過(guò)程的流程圖,如圖6B所示,包括以下步驟:

步驟S612,接收到開啟CPU數(shù)據(jù)采集命令后,創(chuàng)建開啟數(shù)據(jù)采集的線程同時(shí)創(chuàng)建數(shù)據(jù)回傳線程;

步驟S614,數(shù)據(jù)回傳線程啟動(dòng)后創(chuàng)建一數(shù)據(jù)回傳器;

步驟S616-618,每隔預(yù)定的配置時(shí)間分析和組裝采集線程當(dāng)中的線程數(shù)據(jù),同時(shí)將這些線程數(shù)據(jù)統(tǒng)計(jì)后回傳給系統(tǒng)監(jiān)控平臺(tái)。

具體地,所述線程數(shù)據(jù)主要包括線程的狀態(tài)信息和方法堆棧信息。狀態(tài)信息可以顯示當(dāng)前java服務(wù)器中所有線程的運(yùn)行狀態(tài),包括Runnable運(yùn)行狀態(tài)(線程正在運(yùn)行,或者準(zhǔn)備好獲取CPU時(shí)間后運(yùn)行)、Waiting on condition(線程休眠,等待某個(gè)條件的發(fā)生)以及Waiting for monitor entry和in Object.wait()(線程在等待獲取一個(gè)對(duì)象的鎖,其他線程可能持有這個(gè)同步鎖)等狀態(tài)信息;方法堆棧信息是一個(gè)運(yùn)行中的Java應(yīng)用程序的所有線程的一個(gè)快照。它會(huì)顯示一些像當(dāng)前的堆棧跟蹤、狀態(tài)以及線程名稱之類的信息。接收到停止命令后,停止數(shù)據(jù)回傳。

參考圖6C,是根據(jù)本申請(qǐng)實(shí)施例的生成CPU快照信息的流程圖,如圖6C所示,包括以下步驟:

步驟S622,接收到生成CPU快照信息的命令;

步驟S624,判斷數(shù)據(jù)采集線程是否處于開啟狀態(tài),如果是則通過(guò)創(chuàng)建的線程采集器中的線程信息生成CPU快照文件;

步驟S626,將所述CPU快照文件上傳(存儲(chǔ))至預(yù)先建立的分布式文件存儲(chǔ)裝置(TFS)中;同時(shí)TFS將存儲(chǔ)的CPU快照文件的文件名和鏈接地址返回給系統(tǒng)平臺(tái),用戶可以通過(guò)文件名和地址查看該CPU快照信息。

參考圖6D,是根據(jù)本申請(qǐng)實(shí)施例的生成線程快照信息的流程圖,如圖6D所示,包括以下步驟:

步驟S632,接收到生成線程快照信息的命令;

步驟S634,判斷數(shù)據(jù)采集線程是否處于開啟狀態(tài),如果是則通過(guò)創(chuàng)建的線程采集器中的線程信息生成線程快照文件;

步驟S636,將所述線程快照文件上傳(存儲(chǔ))至分布式文件存儲(chǔ)裝置(TFS)中;同時(shí)分布式文件存儲(chǔ)裝置將存儲(chǔ)的線程快照文件的文件名和鏈接地址返回給系統(tǒng)平臺(tái),用戶可以通過(guò)文件名和地址查看該線程快照信息。

下面結(jié)合圖7詳細(xì)描述內(nèi)存采集過(guò)程。

參考圖7A,是根據(jù)本申請(qǐng)實(shí)施例的內(nèi)存數(shù)據(jù)采集的流程圖,如圖7A所示,包括以下步驟:

步驟S702,接收到內(nèi)存數(shù)據(jù)采集開啟命令后,開啟一內(nèi)存數(shù)據(jù)采集線程;

步驟S704-706,內(nèi)存采集線程啟動(dòng)后創(chuàng)建一刷新器,該刷新器每隔預(yù)定的配置時(shí)間刷新,刷新時(shí)觸發(fā)預(yù)先創(chuàng)建的數(shù)據(jù)采集器;

步驟S708-710,所述數(shù)據(jù)采集器通過(guò)應(yīng)用程序編程接口(API)獲取Java服務(wù)器的內(nèi)存信息;

接收到停止命令后,停止開啟的內(nèi)存采集線程。

參考圖7B,是根據(jù)本申請(qǐng)實(shí)施例的內(nèi)存數(shù)據(jù)回傳的流程圖,如圖7B所 示,包括以下步驟:

步驟S712,接收到開啟CPU數(shù)據(jù)采集命令后,創(chuàng)建開啟內(nèi)存數(shù)據(jù)采集的線程同時(shí)創(chuàng)建內(nèi)存數(shù)據(jù)回傳線程;

步驟S714,內(nèi)存數(shù)據(jù)回傳線程啟動(dòng)后創(chuàng)建一數(shù)據(jù)回傳器;

步驟S716-718,每隔預(yù)定時(shí)間將所述內(nèi)存信息回傳給所述性能監(jiān)控?cái)?shù)據(jù)收集模塊。接收到停止命令后,停止內(nèi)存數(shù)據(jù)回傳。

下面結(jié)合表1描述本申請(qǐng)實(shí)施例的性能分析過(guò)程。

表1

通過(guò)以上開啟的分析過(guò)程,可以將服務(wù)器執(zhí)行的線程信息和CPU消耗信息根據(jù)采樣的方式輸出出來(lái):在CPU分析中,將所有的線程/方法的名字作為key存放在一個(gè)哈希表中,如果線程/方法的狀態(tài)是running(運(yùn)行)的,那么就把這段時(shí)間累加到哈希表中的對(duì)應(yīng)的這個(gè)線程/方法上面去。比如每隔5秒刷新一次,刷新時(shí),發(fā)現(xiàn)線程A的狀態(tài)是running,那么哈希表中,key為A的那條數(shù)據(jù)的值就加上5秒。

根據(jù)表1所示,根據(jù)Dump出來(lái)的線程信息只有B為running(運(yùn)行)狀態(tài),其他線程都是wait(等待)狀態(tài),那么就可以分析出線程在等待什么、是否有鎖等待等等,從而分析出性能瓶頸所在。

通過(guò)更新出的線程信息,發(fā)現(xiàn)在A、B、C三個(gè)線程中B的執(zhí)行時(shí)間最長(zhǎng),同時(shí)B的CPU消耗時(shí)間也最大,從而分析出B是需要優(yōu)化的線程。

同時(shí)也可以根據(jù)快照信息,將B線程的所有方法遞歸進(jìn)去查詢,最后發(fā)現(xiàn)是哪個(gè)方法占用B的時(shí)間(20秒)最長(zhǎng),同時(shí)也可以分析出來(lái)是哪個(gè)方法占用B的CPU時(shí)間(15秒)最多;一般消耗時(shí)間最長(zhǎng)的,不一定消耗CPU,如遠(yuǎn)程調(diào)用,所以從消耗時(shí)間和CPU時(shí)間上共同尋找出問(wèn)題所在,重點(diǎn)優(yōu)化。

本申請(qǐng)的方法的操作步驟與裝置的結(jié)構(gòu)特征對(duì)應(yīng),可以相互參照,不再一一贅述。

綜上所述,本申請(qǐng)具備以下優(yōu)點(diǎn):

(1)B/S結(jié)構(gòu)。用戶可以在任何時(shí)間任何地點(diǎn),打開平臺(tái),執(zhí)行、停止和查看監(jiān)控?cái)?shù)據(jù)。

(2)無(wú)侵入式的。服務(wù)器不需要埋點(diǎn),不需要寫代碼,利用JMX的統(tǒng)一管理框架。

(3)全方法堆棧的。從調(diào)用方法開始,一直到最后的遠(yuǎn)程調(diào)用或數(shù)據(jù)庫(kù)調(diào)用,全部呈現(xiàn)在用戶面前,這樣做的好處是:a.用戶事先不需要知道調(diào)用的方法,不需要輸入任何信息,方法自動(dòng)會(huì)呈現(xiàn)在用戶面前;b.可以通過(guò)這個(gè)堆棧分析用戶的調(diào)用路徑是否正確,是否存在不該走的方法,是否走的緩存等。

(4)數(shù)據(jù)持久化保存在數(shù)據(jù)庫(kù)和云端,和每次壓測(cè)結(jié)果放在一起,用戶 可以隨時(shí)打開,也可以給開發(fā)或者其他測(cè)試者查看使用和分享。

(5)采樣分析對(duì)進(jìn)程資源消耗非常低(大約1%),可用于線上分析。同時(shí)采用的開啟和關(guān)閉都可以在系統(tǒng)平臺(tái)上實(shí)時(shí)操作。

(6)過(guò)濾器設(shè)置。采樣的同時(shí)也可以根據(jù)用戶定義的包或者方法規(guī)則,過(guò)濾出用戶需要監(jiān)控的內(nèi)容,減小額外開銷。

(7)性能數(shù)據(jù)客戶端節(jié)點(diǎn)進(jìn)程和服務(wù)器進(jìn)程獨(dú)立,相互之間不影響。

(8)消息控制采用雙通道。一方面通過(guò)Socket監(jiān)聽,另一方面可以通過(guò)MQ消息監(jiān)聽,這樣可以實(shí)現(xiàn)跨各種網(wǎng)絡(luò)環(huán)境的監(jiān)控操作和數(shù)據(jù)采集。

本領(lǐng)域技術(shù)人員應(yīng)明白,本申請(qǐng)的實(shí)施例可提供為方法、系統(tǒng)或計(jì)算機(jī)程序產(chǎn)品。因此,本申請(qǐng)可采用完全硬件實(shí)施例、完全軟件實(shí)施例或結(jié)合軟件和硬件方面的實(shí)施例的形式。而且,本申請(qǐng)可采用在一個(gè)或多個(gè)其中包含有計(jì)算機(jī)可用程序代碼的計(jì)算機(jī)可用存儲(chǔ)介質(zhì)(包括但不限于磁盤存儲(chǔ)器、CD-ROM、光學(xué)存儲(chǔ)器等)上實(shí)施的計(jì)算機(jī)程序產(chǎn)品的形式。

在一個(gè)典型的配置中,計(jì)算設(shè)備包括一個(gè)或多個(gè)處理器(CPU)、輸入/輸出接口、網(wǎng)絡(luò)接口和內(nèi)存。

內(nèi)存可能包括計(jì)算機(jī)可讀介質(zhì)中的非永久性存儲(chǔ)器,隨機(jī)存取存儲(chǔ)器(RAM)和/或非易失性內(nèi)存等形式,如只讀存儲(chǔ)器(ROM)或閃存(flash RAM)。內(nèi)存是計(jì)算機(jī)可讀介質(zhì)的示例。

計(jì)算機(jī)可讀介質(zhì)包括永久性和非永久性、可移動(dòng)和非可移動(dòng)媒體可以由任何方法或技術(shù)來(lái)實(shí)現(xiàn)信息存儲(chǔ)。信息可以是計(jì)算機(jī)可讀指令、數(shù)據(jù)結(jié)構(gòu)、程序的模塊或其他數(shù)據(jù)。計(jì)算機(jī)的存儲(chǔ)介質(zhì)的例子包括,但不限于相變內(nèi)存(PRAM)、靜態(tài)隨機(jī)存取存儲(chǔ)器(SRAM)、動(dòng)態(tài)隨機(jī)存取存儲(chǔ)器(DRAM)、其他類型的隨機(jī)存取存儲(chǔ)器(RAM)、只讀存儲(chǔ)器(ROM)、電可擦除可編程只讀存儲(chǔ)器(EEPROM)、快閃記憶體或其他內(nèi)存技術(shù)、只讀光盤只讀存儲(chǔ)器(CD-ROM)、數(shù)字多功能光盤(DVD)或其他光學(xué)存儲(chǔ)、磁盒式磁帶,磁帶磁磁盤存儲(chǔ)或其他磁性存儲(chǔ)設(shè)備或任何其他非傳輸介質(zhì),可用于存儲(chǔ)可以被計(jì)算設(shè)備訪問(wèn)的信息。按照本文中的界定,計(jì)算機(jī)可讀介質(zhì)不包括暫存電腦可 讀媒體(transitory media),如調(diào)制的數(shù)據(jù)信號(hào)和載波。

還需要說(shuō)明的是,術(shù)語(yǔ)“包括”、“包含”或者其任何其他變體意在涵蓋非排他性的包含,從而使得包括一系列要素的過(guò)程、方法、商品或者設(shè)備不僅包括那些要素,而且還包括沒(méi)有明確列出的其他要素,或者是還包括為這種過(guò)程、方法、商品或者設(shè)備所固有的要素。在沒(méi)有更多限制的情況下,由語(yǔ)句“包括一個(gè)……”限定的要素,并不排除在包括所述要素的過(guò)程、方法、商品或者設(shè)備中還存在另外的相同要素。

以上所述僅為本申請(qǐng)的實(shí)施例而已,并不用于限制本申請(qǐng)。對(duì)于本領(lǐng)域技術(shù)人員來(lái)說(shuō),本申請(qǐng)可以有各種更改和變化。凡在本申請(qǐng)的精神和原理之內(nèi)所作的任何修改、等同替換、改進(jìn)等,均應(yīng)包含在本申請(qǐng)的權(quán)利要求范圍之內(nèi)。

當(dāng)前第1頁(yè)1 2 3 
網(wǎng)友詢問(wèn)留言 已有0條留言
  • 還沒(méi)有人留言評(píng)論。精彩留言會(huì)獲得點(diǎn)贊!
1