国产精品1024永久观看,大尺度欧美暖暖视频在线观看,亚洲宅男精品一区在线观看,欧美日韩一区二区三区视频,2021中文字幕在线观看

  • <option id="fbvk0"></option>
    1. <rt id="fbvk0"><tr id="fbvk0"></tr></rt>
      <center id="fbvk0"><optgroup id="fbvk0"></optgroup></center>
      <center id="fbvk0"></center>

      <li id="fbvk0"><abbr id="fbvk0"><dl id="fbvk0"></dl></abbr></li>

      一種性能缺陷檢測方法、裝置和系統(tǒng)的制作方法

      文檔序號:6437941閱讀:257來源:國知局
      專利名稱:一種性能缺陷檢測方法、裝置和系統(tǒng)的制作方法
      技術(shù)領(lǐng)域
      本申請涉及Java性能測試領(lǐng)域,特別涉及一種性能缺陷檢測方法、裝置和系統(tǒng)。
      背景技術(shù)
      Java是一種可以撰寫跨平臺應(yīng)用軟件的面向?qū)ο蟮某绦蛟O(shè)計語言。Java語言的一個非常重要的特點就是與平臺的無關(guān)性。而使用Java虛擬機是實現(xiàn)這一特點的關(guān)鍵。一般的高級語言如果要在不同的平臺上運行至少需要編譯成不同的目標(biāo)代碼。Java虛擬機(Java Virtual Machine, JVM)是通過在實際的計算機上仿真模擬各種計算機的功能來實現(xiàn)的運行Java程序的虛擬計算機。JVM在實現(xiàn)時可以包括一套字節(jié)碼指令集、一組寄存器、一個棧、一個垃圾回收堆和一個存儲方法域。Java虛擬機在運行Java程序時,Java程序的源代碼即使在不同平臺上運行也不需要重新編譯,因為JVM屏蔽了具體操作系統(tǒng)平臺相關(guān)的信息,使Java源代碼只需轉(zhuǎn)換為在Java虛擬機上能夠運行的目標(biāo)代碼(字節(jié)碼)就可以在多種平臺上直接運行。如果Java程序的源代碼出現(xiàn)性能缺陷,那么該Java程序在實際環(huán)境中運行時就會導(dǎo)致運行程序的計算機系統(tǒng)性能較低,甚至?xí)斐捎嬎銠C系統(tǒng)的癱瘓。因此,對于Java程序的源代碼進行性能缺陷檢測就十分必要,只有在Java程序?qū)嶋H運行之前就能夠?qū)Υ嬖谛阅苋毕莸腏ava源代碼進行調(diào)整,才能保證計算機系統(tǒng)的性能,也能進一步避免計算機系統(tǒng)在運行Java程序過程中出現(xiàn)的癱瘓問題。但是發(fā)明人經(jīng)過研究發(fā)現(xiàn),現(xiàn)有技術(shù)中還未存在利用虛擬機有效的對Java程序的源代碼的性能缺陷進行準(zhǔn)確檢測的方法。

      發(fā)明內(nèi)容
      本申請所要解決的技術(shù)問題是提供一種性能缺陷檢測方法,用以利用虛擬機對Java程序的源代碼的性能缺陷進行準(zhǔn)確檢測,從而保證Java程序在實際環(huán)境中運行時的計算機系統(tǒng)性能,進一步的避免計算機系統(tǒng)再運行Java程序過程中出現(xiàn)癱瘓問題。本申請還提供了一種性能缺陷檢測裝置,用以保證上述方法在實際中的實現(xiàn)及應(yīng)用。為了解決上述問題,本申請公開了一種性能缺陷檢測方法,包括:在Java虛擬機JVM運行Java程序的過程中,獲取所述Java程序的性能缺陷檢測數(shù)據(jù),所述性能缺陷檢測數(shù)據(jù)包括:JVM的內(nèi)存數(shù)據(jù)、所述Java程序的線程狀態(tài)數(shù)據(jù)和Java程序線程對客戶端發(fā)送請求的響應(yīng)數(shù)據(jù);依據(jù)預(yù)設(shè)的性能缺陷分析規(guī)則和所述性能缺陷檢測數(shù)據(jù),檢測所述Java程序在運行過程中的性能缺陷。 優(yōu)選的,所述JVM的內(nèi)存數(shù)據(jù)包括:JVM堆內(nèi)存中新生代Young區(qū)的內(nèi)存使用大小、內(nèi)存總?cè)萘?,以及Young區(qū)的垃圾回收Young GC次數(shù)和每次回收的執(zhí)行時間;則依據(jù)預(yù)設(shè)的性能缺陷分析規(guī)則和所述性能缺陷檢測數(shù)據(jù),檢測所述Java程序在運行過程中的性能缺陷包括:計算Young區(qū)的內(nèi)存使用大小與Young區(qū)的內(nèi)存總?cè)萘康谋戎?;獲取各個所述執(zhí)行時間段內(nèi)Young GC時間軸曲線上符合比值條件的曲線點,所述符合比值條件的曲線點為Young區(qū)的內(nèi)存使用大小與Young區(qū)的內(nèi)存總?cè)萘康谋戎底钚〉那€點;對所述符合比值條件的曲線點進行曲線連接,并判斷所述符合比值條件曲線點在重新連接的曲線上斜率大于0的個數(shù)是否超過n,如果是,則確定所述Java程序的性能缺陷為內(nèi)存泄露;其中n為不小于3的正整數(shù)。優(yōu)選的,所述JVM的內(nèi)存數(shù)據(jù)包括JVM堆內(nèi)存中老生代Old區(qū)的內(nèi)存使用大小、內(nèi)存總?cè)萘浚约袄仙鶲ld區(qū)的垃圾回收Old GC次數(shù)和每次回收的執(zhí)行時間;則依據(jù)預(yù)設(shè)的性能缺陷分析規(guī)則和所述性能缺陷檢測數(shù)據(jù),檢測所述Java程序在運行過程中的性能缺陷包括:計算Old區(qū)的內(nèi)存使用大小與Old區(qū)的內(nèi)存總?cè)萘康谋戎?;獲取各個所述執(zhí)行時間段內(nèi)Young GC時間軸曲線上符合比值條件的曲線點,所述符合比值條件的曲線點為Old區(qū)的內(nèi)存使用大小與Old區(qū)的內(nèi)存總?cè)萘康谋戎底钚〉那€
      占.
      對所述符合比值條件的曲線點進行曲線連接,并判斷所述符合比值條件曲線點在重新連接的曲線上斜率大于0的個數(shù)是否超過n,如果是,則確定所述Java程序的性能缺陷為內(nèi)存泄露;其中n為不小于3的正整數(shù)。優(yōu)選的,所述Java程序的線程狀態(tài)數(shù)據(jù)包括Java程序運行過程中各個線程的創(chuàng)建、運行、掛起和結(jié)束過程的狀態(tài)數(shù)據(jù);則依據(jù)預(yù)設(shè)的性能缺陷分析規(guī)則和所述性能缺陷檢測數(shù)據(jù),檢測所述Java程序在運行過程中的性能缺陷包括:對Java程序各個線程運行過程中所擁有及所需要的線程狀態(tài)數(shù)據(jù)進行統(tǒng)計比對;當(dāng)任意兩個線程之間存在線程狀態(tài)數(shù)據(jù)等待時,確定所述Java程序的性能缺陷為線程死鎖。優(yōu)選的,所述Java程序線程對客戶端發(fā)送請求的響應(yīng)數(shù)據(jù)包括:Java程序線程對客戶端發(fā)送請求的響應(yīng)總個數(shù)、響應(yīng)斷言錯誤個數(shù)及Java程序線程對客戶端發(fā)送請求的非正常響應(yīng)個數(shù);則依據(jù)預(yù)設(shè)的性能缺陷分析規(guī)則和所述性能缺陷檢測數(shù)據(jù),檢測所述Java程序在運行過程中的性能缺陷包括:判斷所述Java程序在虛擬機運行中業(yè)務(wù)請求響應(yīng)錯誤率的值是否大于0,如果是,則確定所述Java程序的性能缺陷為線程不安全;其中,所述業(yè)務(wù)請求響應(yīng)錯誤率為:所述響應(yīng)斷言錯誤個數(shù)與所述非正常響應(yīng)個數(shù)的差再除以響應(yīng)總個數(shù)所得到的商。優(yōu)選的,還包括:依據(jù)檢測到的性能缺陷對所述Java程序的源代碼進行調(diào)整。本申請公開了一種性能缺陷檢測裝置,包括:數(shù)據(jù)獲取模塊和檢測模塊;
      其中:所述數(shù)據(jù)獲取模塊用于在Java虛擬機JVM運行Java程序的過程中,獲取所述Java程序的性能缺陷檢測數(shù)據(jù),所述性能缺陷檢測數(shù)據(jù)包括:JVM的內(nèi)存數(shù)據(jù)、所述Java程序的線程狀態(tài)數(shù)據(jù)和Java程序線程對客戶端發(fā)送請求的響應(yīng)數(shù)據(jù);所述檢測模塊用于依據(jù)預(yù)設(shè)的性能缺陷分析規(guī)則和所述性能缺陷檢測數(shù)據(jù),檢測所述Java程序在運行過程的性能缺陷。優(yōu)選的,所述檢測模塊包括:第一內(nèi)存泄露檢測子模塊;所述第一內(nèi)存泄露檢測子模塊用于在所述數(shù)據(jù)獲取模塊獲取的JVM內(nèi)存數(shù)據(jù)為JVM堆內(nèi)存中新生代Young區(qū)的內(nèi)存使用大小、內(nèi)存總?cè)萘?,以及Young區(qū)的垃圾回收YoungGC次數(shù)和每次回收的執(zhí)行時間時;計算Young區(qū)的內(nèi)存使用大小與Young區(qū)的內(nèi)存總?cè)萘康谋戎担猾@取各個所述執(zhí)行時間段內(nèi)Young GC時間軸曲線上符合比值條件的曲線點,所述符合比值條件的曲線點為Young區(qū)的內(nèi)存使用大小與Young區(qū)的內(nèi)存總?cè)萘康谋戎底钚〉那€點;對所述符合比值條件的曲線點進行曲線連接,并判斷所述符合比值條件曲線點在重新連接的曲線上斜率大于O的個數(shù)是否超過n,如果是,則確定所述Java程序的性能缺陷為內(nèi)存泄露;其中η為不小于3的正整數(shù)。優(yōu)選的,所述檢測模塊包括:第二內(nèi)存泄露檢測子模塊;所述第二內(nèi)存泄露檢測子模塊用于在所述數(shù)據(jù)獲取模塊獲取的JVM內(nèi)存數(shù)據(jù)為JVM堆內(nèi)存中老生代Old區(qū)的內(nèi)存使用大小、內(nèi)存總?cè)萘?,以及老生代Old區(qū)的垃圾回收OldGC次數(shù)和每次回收的執(zhí)行時間時;計算Old區(qū)的內(nèi)存使用大小與Old區(qū)的內(nèi)存總?cè)萘康谋戎?;獲取各個所述執(zhí)行時間段內(nèi)Young GC時間軸曲線上符合比值條件的曲線點,所述符合比值條件的曲線點為Old區(qū)的內(nèi)存使用大小與Old區(qū)的內(nèi)存總?cè)萘康谋戎底钚〉那€
      占.
      對所述符合比值條件的曲線點進行曲線連接,并判斷所述符合比值條件曲線點在重新連接的曲線上斜率大于O的個數(shù)是否超過η,如果是,則確定所述Java程序的性能缺陷為內(nèi)存泄露;其中η為不小于3的正整數(shù)。優(yōu)選的,所述檢測模塊包括:線程死鎖檢測子模塊;所述線程死鎖檢測子模塊用于對Java程序各個線程運行過程中所擁有及所需要的線程狀態(tài)數(shù)據(jù)進行統(tǒng)計比對;當(dāng)任意兩個線程之間存在線程狀態(tài)數(shù)據(jù)等待時,確定所述Java程序的性能缺陷為線程死鎖。優(yōu)選的,所述檢測模塊包括:線程安全檢測子模塊;所述線程安全檢測子模塊用于在所述數(shù)據(jù)獲取模塊獲取的Java程序線程對客戶端發(fā)送請求的響應(yīng)數(shù)據(jù)為Java程序線程對客戶端發(fā)送請求的響應(yīng)總個數(shù)、響應(yīng)斷言錯誤個數(shù)及Java程序線程對客戶端發(fā)送請求的非正常響應(yīng)個數(shù)時;判斷所述Java程序在虛擬機運行中業(yè)務(wù)請求響應(yīng)錯誤率的值是否大于0,如果是,則確定所述Java程序的性能缺陷為線程不安全;其中,所述業(yè)務(wù)請求響應(yīng)錯誤率為:所述響應(yīng)斷言錯誤個數(shù)與所述非正常響應(yīng)個數(shù)的差再除以響應(yīng)總個數(shù)所得到的商。優(yōu)選的,還包括:調(diào)整模塊;所述調(diào)整模塊用于依據(jù)檢測到性能缺陷對所述Java程序的源代碼進行調(diào)整本申請還提供了一種性能缺陷檢測系統(tǒng),所述系統(tǒng)的控制器中設(shè)置有性能缺陷檢測裝置。與現(xiàn)有技術(shù)相比,本申請包括以下優(yōu)點:在本申請中,在Java虛擬機JVM運行Java程序的過程中,首先獲取Java程序的性能缺陷數(shù)據(jù),所述性能缺陷數(shù)據(jù)包括=JVM的內(nèi)存數(shù)據(jù)、Java程序的線程狀態(tài)數(shù)據(jù)和Java程序線程對客戶端發(fā)送請求的響應(yīng)數(shù)據(jù);然后依據(jù)預(yù)設(shè)的性能缺陷分析規(guī)則和所述獲取的性能缺陷檢測數(shù)據(jù),檢測所述Java程序在運行過程中的性能缺陷。 整個性能缺陷檢測過程中,將Java程序在Java虛擬機JVM上運行過程中,所涉及到的Java程序運行占用的JVM的內(nèi)存數(shù)據(jù)、Java程序各個線程的線程狀態(tài)數(shù)據(jù)以及Java程序線程對客戶端發(fā)送請求的響應(yīng)數(shù)據(jù)以預(yù)設(shè)采集周期進行采集,并通過預(yù)設(shè)的性能缺陷分析規(guī)則對上述獲取的性能缺陷檢測數(shù)據(jù)進行分析,當(dāng)獲取的性能缺陷檢測數(shù)據(jù)不符合預(yù)設(shè)的性能缺陷分析規(guī)則時,確定獲取的性能缺陷檢測數(shù)據(jù)所對應(yīng)的性能缺陷;從而能夠在Java程序在實際環(huán)境中運行之前準(zhǔn)確的確定Java程序源代碼中存在的性能缺陷,進而及時對存在性能缺陷的源代碼進行調(diào)整,保證了實際運行Java程序的計算機系統(tǒng)的性能,進一步避免了計算機系統(tǒng)在運行Java程序過程中由于性能缺陷而可能出現(xiàn)的系統(tǒng)癱瘓問題。優(yōu)選的,本申請中,依據(jù)預(yù)設(shè)的性能缺陷分析規(guī)則對獲取的性能缺陷檢測數(shù)據(jù)進行性能缺陷檢測,當(dāng)檢測出性能缺陷時,即可針對所述性能缺陷多對應(yīng)的性能缺陷檢測數(shù)據(jù)對Java程序中的源代碼進行調(diào)整,使調(diào)整過程更加的準(zhǔn)確快捷。當(dāng)然,實施本申請的任一產(chǎn)品并不一定需要同時達到以上所述的所有優(yōu)點。


      為了更清楚地說明本申請實施例中的技術(shù)方案,下面將對實施例描述中所需要使用的附圖作簡單地介紹,顯而易見地,下面描述中的附圖僅僅是本申請的一些實施例,對于本領(lǐng)域普通技術(shù)人員來講,在不付出創(chuàng)造性勞動性的前提下,還可以根據(jù)這些附圖獲得其他的附圖。圖1是本申請的一種性能缺陷檢測方法實施例1的流程圖;圖2是本申請中一種性能缺陷檢測方法實施例1的一具體流程圖;圖3是本申請中一種性能缺陷檢測方法實施例1的一具體示例圖;圖4是本申請的一種性能缺陷檢測方法實施例1的一具體示例圖;圖5是本申請的一種性能缺陷檢測方法實施例1的一具體示例圖;圖6是本申請的一種性能缺陷檢測方法實施例1的一具體流程圖7是本申請的一種性能缺陷檢測方法實施例1的一具體流程圖;圖8是本申請的一種性能缺陷檢測方法實施例1的一具體流程圖;圖9是本申請的一種性能缺陷檢測方法實施例2的流程圖;圖10是本申請的一種性能缺陷檢測裝置實施例1的結(jié)構(gòu)框圖;圖11是本申請的一種性能缺陷檢測裝置實施例2的結(jié)構(gòu)框圖;圖12是本申請的一種性能缺陷檢測裝置實施例3的結(jié)構(gòu)框圖;圖13是本申請的一種性能缺陷檢測系統(tǒng)的結(jié)構(gòu)框圖。
      具體實施例方式下面將結(jié)合本申請實施例中的附圖,對本申請實施例中的技術(shù)方案進行清楚、完整地描述,顯然,所描述的實施例僅僅是本申請一部分實施例,而不是全部的實施例。基于本申請中的實施例,本領(lǐng)域普通技術(shù)人員在沒有做出創(chuàng)造性勞動前提下所獲得的所有其他實施例,都屬于本申請保護的范圍。本申請可用于眾多通用或?qū)S玫挠嬎阊b置環(huán)境或配置中。例如:個人計算機、服務(wù)器計算機、手持設(shè)備或便攜式設(shè)備、平板型設(shè)備、多處理器裝置、包括以上任何裝置或設(shè)備的分布式計算環(huán)境等等。本申請可以在由計算機執(zhí)行的計算機可執(zhí)行指令的一般上下文中描述,例如程序模塊。一般地,程序模塊包括執(zhí)行特定任務(wù)或?qū)崿F(xiàn)特定抽象數(shù)據(jù)類型的例程、程序、對象、組件、數(shù)據(jù)結(jié)構(gòu)等等。也可以在分布式計算環(huán)境中實踐本申請,在這些分布式計算環(huán)境中,由通過通信網(wǎng)絡(luò)而被連接的遠程處理設(shè)備來執(zhí)行任務(wù)。在分布式計算環(huán)境中,程序模塊可以位于包括存儲設(shè)備在內(nèi)的本地和遠程計算機存儲介質(zhì)中。本申請的主要思想之一可以包括,首先,在Java虛擬機JVM運行Java程序的過程中,獲取所述Java程序的性能缺陷檢測數(shù)據(jù),所述性能缺陷檢測數(shù)據(jù)包括:JVM的內(nèi)存數(shù)據(jù)、所述Java程序的線程狀態(tài)數(shù)據(jù)和Java程序線程對客戶端發(fā)送請求的響應(yīng)數(shù)據(jù);然后,依據(jù)預(yù)設(shè)的性能缺陷分析規(guī)則和所述性能缺陷檢測數(shù)據(jù),檢測所述Java程序在運行過程中的性能缺陷。從而能夠在Java程序在實際環(huán)境中運行之前,在虛擬機中確定Java程序源代碼中存在的性能缺陷,及時對存在性能缺陷的源代碼進行調(diào)整,保證了實際運行Java程序的計算機系統(tǒng)的性能,避免了計算機系統(tǒng)實際運行Java程序過程中由于Java程序源代碼中存在性能缺陷而可能出現(xiàn)的系統(tǒng)癱瘓問題。參考圖1,示出了本申請一種性能缺陷檢測方法實施例1的流程圖,可以包括以下步驟:步驟101:在Java虛擬機JVM運行Java程序的過程中,獲取所述Java程序的性能缺陷檢測數(shù)據(jù),所述性能缺陷檢測數(shù)據(jù)包括:JVM的內(nèi)存數(shù)據(jù)、所述Java程序的線程狀態(tài)數(shù)據(jù)和Java程序線程對客戶端發(fā)送請求的響應(yīng)數(shù)據(jù);Java程序在Java虛擬機JVM上的運行過程中,會綜合涉及程序本身及Java虛擬機JVM的各項性能數(shù)據(jù),本申請中在進行性能缺陷檢測過程中,獲取Java程序在運行過程中占用的java虛擬機JVM的內(nèi)存數(shù)據(jù),Java程序運行過程中各個線程的狀態(tài)數(shù)據(jù)和Java程序線程對客戶端發(fā)送請求的響應(yīng)數(shù)據(jù);其中:獲取的Java虛擬機JVM的內(nèi)存數(shù)據(jù)包括:
      JVM堆內(nèi)存中新生代Young區(qū)的內(nèi)存使用大小、內(nèi)存總?cè)萘?,以及Young區(qū)的垃圾回收Young GC次數(shù)和每次回收的執(zhí)行時間;以及,JVM堆內(nèi)存中老生代Old區(qū)的內(nèi)存使用大小、內(nèi)存總?cè)萘浚约袄仙鶲ld區(qū)的垃圾回收Old GC次數(shù)和每次回收的執(zhí)行時間;獲取的Java程序運行過程中各個線程的狀態(tài)數(shù)據(jù)包括:Java程序運行過程中各個線程的創(chuàng)建、運行、掛起和結(jié)束過程的狀態(tài)數(shù)據(jù);以及Java程序運行過程中Java線程棧的信息數(shù)據(jù);獲取的Java程序線程對客戶端發(fā)送請求的響應(yīng)數(shù)據(jù)包括:Java程序線程對客戶端發(fā)送請求的響應(yīng)總個數(shù)、響應(yīng)斷言錯誤個數(shù)及Java程序線程對客戶端發(fā)送請求的非正常響應(yīng)個數(shù);本申請實施例在性能缺陷檢測過程中,同時對以上各種性能檢測數(shù)據(jù)進行獲取,以便在性能缺陷檢測過程中更好的對Java程序運行過程中可能出現(xiàn)的性能缺陷進行檢測確定,能夠更好的模擬Java程序在計算機系統(tǒng)中運行的實際運行環(huán)境。步驟102:依據(jù)預(yù)設(shè)的性能缺陷分析規(guī)則和所述性能缺陷檢測數(shù)據(jù),檢測所述Java程序在運行過程中的性能缺陷;本申請實施例中對獲取的性能缺陷檢測數(shù)據(jù)依據(jù)預(yù)設(shè)的性能缺陷分析規(guī)則進行分析,從而針對具體獲得的性能缺陷數(shù)據(jù)檢測出所述性能缺陷數(shù)據(jù)對應(yīng)的性能缺陷。參考圖2,圖2示出了本申請中依據(jù)預(yù)設(shè)性能缺陷分析規(guī)則對獲取的Java虛擬機JVM的內(nèi)存數(shù)據(jù)進行性能缺陷檢測的過程;其中所述JVM的內(nèi)存數(shù)據(jù)包括:JVM堆內(nèi)存中新生代Young區(qū)的內(nèi)存使用大小、內(nèi)存總?cè)萘?,以及Young區(qū)的垃圾回收Young GC次數(shù)和每次回收的執(zhí)行時間;所述檢測過程可以包括:步驟S201:計算Young區(qū)的內(nèi)存使用大小與Young區(qū)的內(nèi)存總?cè)萘康谋戎?;步驟S202:獲取各個所述執(zhí)行時間段內(nèi)Young GC時間軸曲線上符合比值條件的曲線點,所述符合比值條件的曲線點為Young區(qū)的內(nèi)存使用大小與Young區(qū)的內(nèi)存總?cè)萘康谋戎底钚〉那€點;步驟S203:對所述符合比值條件的曲線點進行曲線連接;步驟S204:判斷所述符合比值條件曲線點在重新連接的曲線斜率大于O的個數(shù)是否超過η ;其中η為不小于3的正整數(shù),如果是,執(zhí)行步驟S205 ;步驟S205:確定所述Java程序的性能缺陷為內(nèi)存泄露。需要對以上步驟S201 S205進行說明的是,Java虛擬機JVM運行Java程序時,由于Java虛擬機JVM的內(nèi)存是有限的,為了保證Java程序的正常運行,所以當(dāng)Java虛擬機JVM檢測到內(nèi)存資源緊張時,就會自動的去清理Java程序運行過程中無用對象所占用的內(nèi)存空間。為了更好的描述Java虛擬機JVM對無用內(nèi)存對象的回收過程,可以參考圖3所示的新生代Young區(qū)的內(nèi)存使用示意圖,其中,坐標(biāo)軸M為時間軸,坐標(biāo)軸N表示新生代Young區(qū)的內(nèi)存使用大小與Young區(qū)的內(nèi)存總?cè)萘康谋戎担蛔鴺?biāo)軸中的曲線為新生代Young區(qū)的內(nèi)存使用大小與新生代Young區(qū)的內(nèi)存總?cè)萘康谋戎礟在時間軸上的曲線;T1 T2之間的時間段為一次新生代Young區(qū)的垃圾回收的執(zhí)行時間,在Tl T2時間段內(nèi),T2為一次垃圾回收的結(jié)束時間點,在T2時間點處對應(yīng)的曲線點R處的比值P為TI T2時間段內(nèi)的最小值,相同的圖1中的S點與T點的比值P在其對應(yīng)的垃圾回收時間段內(nèi)也是最小的;在正常的垃圾回收過程中,R、S、T三點可用一直線H連接,直線H的斜率為O。本申請實施例中,當(dāng)發(fā)生內(nèi)存泄露時,參考圖4所示的新生代Young區(qū)的內(nèi)存使用的一具體示例圖,在每次執(zhí)行垃圾回收后,無用對象所占用的內(nèi)存空間不能得到完全釋放,如圖4中的符合比值條件的點為A、B、C、D、E,對A、B、C、D、E進行曲線連接,并計算A、B、C、D、E在曲線上的切線斜率,如圖4中所示,B、C、D、E的曲線斜率均大于0,且斜率大于O的點已經(jīng)超過3個,此時即可確定Java程序的性能缺陷為內(nèi)存泄露。需要說明的是,圖4所示的實例為一特殊實例,在每次垃圾回收過程中,無用對象所占用的內(nèi)存空間每次均得不到完全釋放;為了更好的對本申請性能缺陷檢測方法進行描述,參考圖5所示的新生代Young區(qū)的內(nèi)存使用的一具體示例圖;在每次垃圾回收過程中,符合條件的點包括A、B、C、D、E、F,對A、B、C、D、E、F進行曲線重新連接,A點和C點是在同一水平線上,B、D、E、F的重新連接的曲線斜率大于O點,且大于O的點超過3個,此時即可確定Java程序的性能缺陷為內(nèi)存泄露。在執(zhí)行垃圾回收GC的過程中,每次GC后剩余的內(nèi)存都會變少,最終一定會變?yōu)镺 ;本申請中,在開始數(shù)據(jù)收集后,第一次GC后收集的數(shù)據(jù),因數(shù)據(jù)收集的初始狀態(tài)不可知,所以第一次GC后收集的數(shù)據(jù)不被采用,而判斷斜率至少需要2次以上的數(shù)據(jù),所以本申請中η的值至少為3 ;次數(shù)η的存在是因為在Java應(yīng)用程序中存在偶發(fā)的變化,為了降低數(shù)據(jù)偶然超限而發(fā)生誤報,增加η值來提高檢測的精確度。參考圖6,圖6示出了本申請中依據(jù)預(yù)設(shè)性能缺陷分析規(guī)則對獲取的Java虛擬機JVM的內(nèi)存數(shù)據(jù)進行性能檢測的過程;其中所述JVM的內(nèi)存數(shù)據(jù)包括:JVM堆內(nèi)存中老生代Old區(qū)的內(nèi)存使用大小、內(nèi)存總?cè)萘?,以及老生代Old區(qū)的垃圾回收Old GC次數(shù)和每次回收的執(zhí)行時間;對應(yīng)的檢測過程可以包括:步驟S301:計算Old區(qū)的內(nèi)存使用大小與Old區(qū)的內(nèi)存總?cè)萘康谋戎担徊襟ES302:獲取各個所述執(zhí)行時間段內(nèi)Old GC時間軸曲線上符合比值條件的曲線點,所述符合比值條件的曲線點為Old區(qū)的內(nèi)存使用大小與Old區(qū)的內(nèi)存總?cè)萘康谋戎底钚〉那€點;步驟S303:對所述符合比值條件的曲線點進行曲線連接;步驟S304:判斷所述符合比值條件曲線點在重新連接的曲線上斜率大于O的個數(shù)是否超過η,η為不小于3的正整數(shù),如果是,執(zhí)行步驟S305 ;步驟S305:確定所述Java程序的性能缺陷為內(nèi)存泄露。需要對以上步驟S301 S305進行說明的是,本申請實施例中對于新生代Young區(qū)的性能數(shù)據(jù)及老生代Old區(qū)的性能數(shù)據(jù)所依據(jù)檢測規(guī)則的原理是相同的,對于Old區(qū)的內(nèi)存泄露檢測過程與Young區(qū)相同,可參照上述對Young區(qū)的性能檢測過程及圖示,此處不再詳細描述。參考圖7,圖7是示出了本申請實施例中依據(jù)預(yù)設(shè)性能缺陷分析規(guī)則對獲取的Java程序的線程狀態(tài)數(shù)據(jù)進行性能檢測的過程,所述獲取的Java程序運行過程中各個線程的狀態(tài)數(shù)據(jù)包括=Java程序運行過程中各個線程的創(chuàng)建、運行、掛起和結(jié)束過程的狀態(tài)數(shù)據(jù);那么相對應(yīng)的檢測過程包括:
      步驟S401:對Java程序各個線程運行過程中所擁有及所需要的線程狀態(tài)數(shù)據(jù)進行統(tǒng)計比對;步驟S402:當(dāng)任意兩個線程之間存在線程狀態(tài)數(shù)據(jù)等待時,確定所述Java程序的性能缺陷為線程死鎖;例如:“線程I ”與“線程2”是Java程序運行過程中的兩個線程,在某一時刻運行過程中,“線程I ”與“線程2”處于以下狀態(tài):"線程2":at java 程序 $2.run (test Jstack.java:29)-waiting to 1ck<0x8c087670>(a java.lang.0bject)-1ocked〈0x8c087678>(a java.lang.0bject)"線程I":j&vci Ffi $ 1.run (testjstcick.j&vci: 15)-waiting to 1ck〈0x8c087678>(a java.lang.0bject)-1ocked〈0x8c087670>(a java.lang.0bject)此時“線程I”與“線程2”均在等待數(shù)據(jù)〈0X8c087670>,而無法繼續(xù)進行,即發(fā)生線程死鎖。參考圖8,圖8示出了本申請實施例中依據(jù)預(yù)設(shè)性能缺陷分析規(guī)則對獲取的Java程序線程對客戶端發(fā)送請求的響應(yīng)數(shù)據(jù)進行性能檢測的過程,所述獲取的Java程序線程對客戶端發(fā)送請求的響應(yīng)數(shù)據(jù)包括=Java程序線程對客戶端發(fā)送請求的響應(yīng)總個數(shù)、響應(yīng)斷言錯誤個數(shù)及Java程序線程對客戶端發(fā)送請求的非正常響應(yīng)個數(shù);那么相對應(yīng)的檢測過程包括:步驟S501:判斷所述Java程序在虛擬機運行中業(yè)務(wù)請求響應(yīng)錯誤率的值是否大于O ;如果是,執(zhí)行步驟S502 ;步驟S502:確定所述Java程序的性能缺陷為線程不安全。需要對步驟S501 S502進行說明的是,本申請中業(yè)務(wù)響應(yīng)請求響應(yīng)錯誤率為:所述響應(yīng)斷言錯誤個數(shù)與所述非正常響應(yīng)個數(shù)的差再除以響應(yīng)總個數(shù)所得到的商。Java程序線程對客戶端發(fā)送請求的響應(yīng)過程中,針對http網(wǎng)站狀態(tài)請求,只對含有標(biāo)識“20x”的請求能夠進行正常響應(yīng),其中的“20x”代表200、201、202等狀態(tài)碼;對于非“20x”的數(shù)據(jù)請求不能進行正常響應(yīng);響應(yīng)斷言錯誤個數(shù)中包含有對非“20x”的數(shù)據(jù)請求的響應(yīng),而對“非20x”數(shù)據(jù)請求的不正常響應(yīng)屬于Java程序線程的正常特性,因此業(yè)務(wù)響應(yīng)請求響應(yīng)錯誤率為所述響應(yīng)斷言錯誤個數(shù)與所述響應(yīng)狀態(tài)非“20x”的差再除以響應(yīng)總個數(shù)所得到的商。參考圖9,示出了本申請一種性能缺陷檢測方法實施例2的流程圖,在圖1的基礎(chǔ)上,可以包括以下步驟:步驟S103:依據(jù)檢測到的性能缺陷對所述Java程序的源代碼進行調(diào)整;依據(jù)預(yù)設(shè)的性能缺陷分析規(guī)則和獲取的性能缺陷數(shù)據(jù)確定性能缺陷后,對Java程序的相關(guān)源代碼進行調(diào)整;本申請實施例中,獲取Java程序在Java虛擬機JVM中運行時所應(yīng)用到的各類性能數(shù)據(jù),針對不同的性能數(shù)據(jù)采用不同的分析規(guī)則,針對每一類性能數(shù)據(jù)得到與其對應(yīng)的可能出現(xiàn)的性能缺陷,然后相應(yīng)的修改每個類性能數(shù)據(jù)在Java程序中所對應(yīng)的源代碼,使Java程序能夠更加完善,更好的在實際計算機系統(tǒng)中進行運行。以下給出本申請實施例中對Java程序的相關(guān)源代碼進行調(diào)整的一具體實例:代碼片段如下:
      權(quán)利要求
      1.一種性能缺陷檢測方法,其特征在于,該方法包括: 在Java虛擬機JVM運行Java程序的過程中,獲取所述Java程序的性能缺陷檢測數(shù)據(jù),所述性能缺陷檢測數(shù)據(jù)包括JVM的內(nèi)存數(shù)據(jù)、所述Java程序的線程狀態(tài)數(shù)據(jù)和Java程序線程對客戶端發(fā)送請求的響應(yīng)數(shù)據(jù); 依據(jù)預(yù)設(shè)的性能缺陷分析規(guī)則和所述性能缺陷檢測數(shù)據(jù),檢測所述Java程序在運行過程中的性能缺陷。
      2.根據(jù)權(quán)利要求1所述的方法,其特征在于,所述JVM的內(nèi)存數(shù)據(jù)包括:JVM堆內(nèi)存中新生代Young區(qū)的內(nèi)存使用大小、內(nèi)存總?cè)萘?,以及Young區(qū)的垃圾回收Young GC次數(shù)和每次回收的執(zhí)行時間; 則依據(jù)預(yù)設(shè)的性能缺陷分析規(guī)則和所述性能缺陷檢測數(shù)據(jù),檢測所述Java程序在運行過程中的性能缺陷包括: 計算Young區(qū)的內(nèi)存使用大小與Young區(qū)的內(nèi)存總?cè)萘康谋戎担? 獲取各個所述執(zhí)行時間段內(nèi)Young GC時間軸曲線上符合比值條件的曲線點,所述符合比值條件的曲線點為Young區(qū)的內(nèi)存使用大小與Young區(qū)的內(nèi)存總?cè)萘康谋戎底钚〉那€占.對所述符合比值條件的曲線點進行曲線連接,并判斷所述符合比值條件曲線點在重新連接的曲線上斜率大于0的個數(shù)是否超過n,如果是,則確定所述Java程序的性能缺陷為內(nèi)存泄露;其中n為不小于3的正整數(shù)。
      3.根據(jù)權(quán)利要求1所述的方法,其特征在于,所述JVM的內(nèi)存數(shù)據(jù)包括:JVM堆內(nèi)存中老生代Old區(qū)的內(nèi)存使用大小、內(nèi)存總?cè)萘?,以及老生代Old區(qū)的垃圾回收Old GC次數(shù)和每次回收的執(zhí)行時間; 則依據(jù)預(yù)設(shè)的性能缺陷分析規(guī)`則和所述性能缺陷檢測數(shù)據(jù),檢測所述Java程序在運行過程中的性能缺陷包括: 計算Old區(qū)的內(nèi)存使用大小與Old區(qū)的內(nèi)存總?cè)萘康谋戎担猾@取各個所述執(zhí)行時間段內(nèi)Young GC時間軸曲線上符合比值條件的曲線點,所述符合比值條件的曲線點為Old區(qū)的內(nèi)存使用大小與Old區(qū)的內(nèi)存總?cè)萘康谋戎底钚〉那€點;對所述符合比值條件的曲線點進行曲線連接,并判斷所述符合比值條件曲線點在重新連接的曲線上斜率大于0的個數(shù)是否超過n,如果是,則確定所述Java程序的性能缺陷為內(nèi)存泄露;其中n為不小于3的正整數(shù)。
      4.根據(jù)權(quán)利要求1所述的方法,其特征在于,所述Java程序的線程狀態(tài)數(shù)據(jù)包括:Java程序運行過程中各個線程的創(chuàng)建、運行、掛起和結(jié)束過程的狀態(tài)數(shù)據(jù); 則依據(jù)預(yù)設(shè)的性能缺陷分析規(guī)則和所述性能缺陷檢測數(shù)據(jù),檢測所述Java程序在運行過程中的性能缺陷包括: 對Java程序各個線程運行過程中所擁有及所需要的線程狀態(tài)數(shù)據(jù)進行統(tǒng)計比對;當(dāng)任意兩個線程之間存在線程狀態(tài)數(shù)據(jù)等待時,確定所述Java程序的性能缺陷為線程死鎖。
      5.根據(jù)權(quán)利要求1所述的方法,其特征在于,所述Java程序線程對客戶端發(fā)送請求的響應(yīng)數(shù)據(jù)包括: Java程序線程對客戶端發(fā)送請求的響應(yīng)總個數(shù)、響應(yīng)斷言錯誤個數(shù)及Java程序線程對客戶端發(fā)送請求的非正常響應(yīng)個數(shù); 則依據(jù)預(yù)設(shè)的性能缺陷分析規(guī)則和所述性能缺陷檢測數(shù)據(jù),檢測所述Java程序在運行過程中的性能缺陷包括: 判斷所述Java程序在虛擬機運行中業(yè)務(wù)請求響應(yīng)錯誤率的值是否大于O,如果是,則確定所述Java程序的性能缺陷為線程不安全;其中,所述業(yè)務(wù)請求響應(yīng)錯誤率為:所述響應(yīng)斷言錯誤個數(shù)與所述非正常響應(yīng)個數(shù)的差再除以響應(yīng)總個數(shù)所得到的商。
      6.根據(jù)權(quán)利要求2 5所述的方法,其特征在于,還包括: 依據(jù)檢測到的性能缺陷對所述Java程序的源代碼進行調(diào)整。
      7.一種性能缺陷檢測裝置,其特征在于,該裝置包括:數(shù)據(jù)獲取模塊和檢測模塊; 其中: 所述數(shù)據(jù)獲取模塊用于在Java虛擬機JVM運行Java程序的過程中,獲取所述Java程序的性能缺陷檢測數(shù)據(jù),所述性能缺陷檢測數(shù)據(jù)包括: JVM的內(nèi)存數(shù)據(jù)、所述Java程序的線程狀態(tài)數(shù)據(jù)和Java程序線程對客戶端發(fā)送請求的響應(yīng)數(shù)據(jù); 所述檢測模塊用于依據(jù)預(yù)設(shè)的性能缺陷分析規(guī)則和所述性能缺陷檢測數(shù)據(jù),檢測所述Java程序在運行過程的性能缺陷。
      8.根據(jù)權(quán)利要求7所述的裝置,其特征在于,所述檢測模塊包括:第一內(nèi)存泄露檢測子模塊; 所述第一內(nèi)存泄露檢測子模塊用于在所述數(shù)據(jù)獲取模塊獲取的JVM內(nèi)存數(shù)據(jù)為JVM堆內(nèi)存中新生代Young區(qū)的內(nèi)存使用大小、內(nèi)存總?cè)萘浚约癥oung區(qū)的垃圾回收Young GC次數(shù)和每次回收的執(zhí)行時間時; 計算Young區(qū)的內(nèi)存使用大小與Young區(qū)的內(nèi)存總?cè)萘康谋戎担? 獲取各個所述執(zhí)行時間段內(nèi)Young GC時間軸曲線上符合比值條件的曲線點,所述符合比值條件的曲線點為Young區(qū)的內(nèi)存使用大小與Young區(qū)的內(nèi)存總?cè)萘康谋戎底钚〉那€占.對所述符合比值條件的曲線點進行曲線連接,并判斷所述符合比值條件曲線點在重新連接的曲線上斜率大于O的個數(shù)是否超過n,如果是,則確定所述Java程序的性能缺陷為內(nèi)存泄露;其中η為不小于3的正整數(shù)。
      9.根據(jù)權(quán)利要求7所述的裝置,其特征在于,所述檢測模塊包括: 第二內(nèi)存泄露檢測子模塊; 所述第二內(nèi)存泄露檢測子模塊用于在所述數(shù)據(jù)獲取模塊獲取的JVM內(nèi)存數(shù)據(jù)為JVM堆內(nèi)存中老生代Old區(qū)的內(nèi)存使用大小、內(nèi)存總?cè)萘?,以及老生代Old區(qū)的垃圾回收Old GC次數(shù)和每次回收的執(zhí)行時間時; 計算Old區(qū)的內(nèi)存使用大小與Old區(qū)的內(nèi)存總?cè)萘康谋戎?;獲取各個所述執(zhí)行時間段內(nèi)Young GC時間軸曲線上符合比值條件的曲線點,所述符合比值條件的曲線點為Old區(qū)的內(nèi)存使用大小與Old區(qū)的內(nèi)存總?cè)萘康谋戎底钚〉那€點;對所述符合比值條件的曲線點進行曲線連接,并判斷所述符合比值條件曲線點在重新連接的曲線上斜率大于O的個數(shù)是否超過η,如果是,則確定所述Java程序的性能缺陷為內(nèi)存泄露;其中η為不小于3的正整數(shù)。
      10.根據(jù)權(quán)利要求7所述的裝置,其特征在于,所述檢測模塊包括: 線程死鎖檢測子模塊; 所述線程死鎖檢測子模塊用于對Java程序各個線程運行過程中所擁有及所需要的線程狀態(tài)數(shù)據(jù)進行統(tǒng)計比對; 當(dāng)任意兩個線程之間存在線程狀態(tài)數(shù)據(jù)等待時,確定所述Java程序的性能缺陷為線程死鎖。
      11.根據(jù)權(quán)利要求1所述的裝置,其特征在于,所述檢測模塊包括: 線程安全檢測子模塊; 所述線程安全檢測子模塊用于在所述數(shù)據(jù)獲取模塊獲取的Java程序線程對客戶端發(fā)送請求的響應(yīng)數(shù)據(jù)為Java程序線程對客戶端發(fā)送請求的響應(yīng)總個數(shù)、響應(yīng)斷言錯誤個數(shù)及Java程序線程對客戶端發(fā)送請求的非正常響應(yīng)個數(shù)時; 判斷所述Java程序在虛擬機運行中業(yè)務(wù)請求響應(yīng)錯誤率的值是否大于0,如果是,則確定所述Java程序的性能缺陷為線程不安全;其中,所述業(yè)務(wù)請求響應(yīng)錯誤率為:所述響應(yīng)斷言錯誤個數(shù)與所述非正常響應(yīng)個數(shù)的差再除以響應(yīng)總個數(shù)所得到的商。
      12.根據(jù)權(quán)利要求8 11所述的裝置,其特征在于,還包括:調(diào)整模塊; 所述調(diào)整模塊用于依據(jù)檢測到性能缺陷對所述Java程序的源代碼進行調(diào)整。
      13.一種性能缺陷檢測系統(tǒng),其特征在于,所述系統(tǒng)的控制器中設(shè)置有所述權(quán)利要求7 12所述的性能缺陷檢測裝置。
      全文摘要
      本申請?zhí)峁┝艘环N性能缺陷檢測方法、裝置和系統(tǒng),所述方法包括在Java虛擬機JVM運行Java程序的過程中,獲取所述Java程序的性能缺陷檢測數(shù)據(jù);依據(jù)預(yù)設(shè)的性能缺陷分析規(guī)則和所述性能缺陷檢測數(shù)據(jù),檢測所述Java程序在運行過程中的性能缺陷。從而能夠在Java程序在實際環(huán)境中運行之前準(zhǔn)確的確定Java程序源代碼中存在的性能缺陷,進而及時對存在性能缺陷的源代碼進行調(diào)整,保證了實際運行Java程序的計算機系統(tǒng)的性能,進一步避免了計算機系統(tǒng)在運行Java程序過程中由于性能缺陷而可能出現(xiàn)的系統(tǒng)癱瘓問題。
      文檔編號G06F11/36GK103106134SQ20111035586
      公開日2013年5月15日 申請日期2011年11月10日 優(yōu)先權(quán)日2011年11月10日
      發(fā)明者王成軍 申請人:阿里巴巴集團控股有限公司
      網(wǎng)友詢問留言 已有0條留言
      • 還沒有人留言評論。精彩留言會獲得點贊!
      1