本發(fā)明涉及計算機技術領域,尤其涉及一種用于監(jiān)測程序運行時耗時數(shù)據的方法及系統(tǒng)。
背景技術:
程序在開發(fā)過程中或在應用過程中,需要對程序的性能進行測量監(jiān)控,特別是程序的運行速度也就是耗時數(shù)據進行監(jiān)控。
現(xiàn)有的技術方案在監(jiān)控程序運行狀態(tài)時,一般將程序運行時數(shù)據無差別地展示或記錄下來,然后通過實時展示或報表的形式展示出來,若發(fā)現(xiàn)數(shù)據異常時需要人工進行篩選數(shù)據,并將多次數(shù)據整合處理,這一過程由于運行時信息過于繁雜往往難于操作,若修改程序后需要再次展示數(shù)據則需要重復上述操作,操作流程比較重。
技術實現(xiàn)要素:
有鑒于此,本發(fā)明提供了一種用于監(jiān)測程序運行時耗時數(shù)據的方法,包括:
獲取插樁點的位置信息和插樁代碼,根據所述插樁點的位置信息和插樁代碼對被測程序進行插樁;所述插樁點至少為兩個;
運行所述插樁后的被測程序,當所述插樁后的被測程序中的所述插樁點被觸發(fā)時,執(zhí)行與觸發(fā)的所述插樁點對應的所述插樁代碼,獲取執(zhí)行所述插樁代碼輸出的樁點數(shù)據;所述樁點數(shù)據包括:時間戳、事件標簽和堆棧信息;
根據所述樁點數(shù)據,生成被測程序在運行至所述至少兩個插樁點之間的耗時數(shù)據。
進一步地,所述插樁點為系統(tǒng)自動設置的插樁點;或者,所述插樁點為用戶自定義設置的插樁點。
進一步地,所述根據所述樁點數(shù)據,生成被測程序在運行至所述至少兩個插樁點之間的耗時數(shù)據,包括:
將所述樁點數(shù)據發(fā)送給服務器;
服務器根據接收到的樁點數(shù)據,生成被測程序在運行至所述至少兩個插樁點之間的耗時數(shù)據。
進一步地,所述將所述樁點數(shù)據發(fā)送給服務器,包括:
在所述樁點數(shù)據滿足預設的時間閾值后,將所述樁點數(shù)據發(fā)送給服務器;或者,
在所述樁點數(shù)據滿足預設的數(shù)據量閾值后,將所述樁點數(shù)據發(fā)送給服務器。
進一步地,所述根據所述樁點數(shù)據,生成被測程序在運行至所述至少兩個插樁點之間的耗時數(shù)據之后,還包括:
獲取用戶輸入的篩選條件,根據所述篩選條件對接收到的樁點數(shù)據篩選、整合;所述篩選條件包括事件標簽和日期。
進一步地,所述獲取執(zhí)行所述插樁代碼輸出的樁點數(shù)據之后,還包括:對接收到的樁點數(shù)據進行存儲。
進一步地,所述根據所述樁點數(shù)據,生成被測程序在運行至所述至少兩個插樁點之間的耗時數(shù)據之后,還包括:對接收到的樁點數(shù)據進行分析處理,并生成圖形化數(shù)據輸出。
進一步地,所述獲取的執(zhí)行所述插樁代碼輸出的樁點數(shù)據為被測程序多次運行時的樁點數(shù)據;
對接收到的樁點數(shù)據進行分析處理,并生成圖形化數(shù)據輸出,包括:
對被測程序每次運行時的樁點數(shù)據進行整合,生成被測程序每次運行時的耗時數(shù)據;
對所述耗時數(shù)據進行分析,刪除臟數(shù)據;
根據被測程序多次運行時的耗時數(shù)據生成被測程序耗時數(shù)據的圖形化數(shù)據。
根據本發(fā)明的另一發(fā)明,提供了一種用于監(jiān)測程序運行時耗時數(shù)據的系統(tǒng),包括:
插樁模塊,用于獲取插樁點的位置信息和插樁代碼,根據所述插樁點的位置信息和插樁代碼對被測程序進行插樁;所述插樁點至少為兩個;
樁點數(shù)據獲取模塊,用于運行所述插樁后的被測程序,當所述插樁后的被測程序中的所述插樁點被觸發(fā)時,執(zhí)行與觸發(fā)的所述插樁點對應的所述插樁代碼,獲取執(zhí)行所述插樁代碼輸出的樁點數(shù)據;所述樁點數(shù)據包括:時間戳、事件標簽和堆棧信息;
耗時數(shù)據生成模塊,用于根據所述樁點數(shù)據,生成被測程序在運行至所述至少兩個插樁點之間的耗時數(shù)據。
進一步地,所述插樁模塊包括:
自動插樁單元,用于獲取自動設置的插樁點;
自定義插樁單元,用于獲取用戶自定義設置的插樁點。
進一步地,所述系統(tǒng)包括服務器,所述耗時數(shù)據生成模塊包括:
發(fā)送單元,用于將所述樁點數(shù)據發(fā)送給服務器;
處理單元,用于服務器根據接收到的樁點數(shù)據,生成被測程序在運行至所述至少兩個插樁點之間的耗時數(shù)據。
進一步地,所述發(fā)送單元包括:
第一發(fā)送子單元,用于在所述樁點數(shù)據滿足預設的時間閾值后,將所述樁點數(shù)據發(fā)送給服務器;
第二發(fā)送子單元,用于在所述樁點數(shù)據滿足預設的數(shù)據量閾值后,將所述樁點數(shù)據發(fā)送給服務器。
進一步地,還包括:
篩選模塊,用于獲取用戶輸入的篩選條件,根據所述篩選條件對接收到的樁點數(shù)據篩選、整合;所述篩選條件包括事件標簽和日期。
進一步地,還包括:
存儲模塊,用于對接收到的樁點數(shù)據進行存儲。
進一步地,還包括:
圖形化輸出模塊,用于對接收到的樁點數(shù)據進行分析處理,并生成圖形化數(shù)據輸出。
進一步地,所述圖形化輸出模塊包括:
單次數(shù)據整合單元,用于對被測程序每次運行時的樁點數(shù)據進行整合,生成被測程序每次運行時的耗時數(shù)據;
數(shù)據清理單元,用于對所述耗時數(shù)據進行分析,刪除臟數(shù)據;
圖形化單元,用于根據被測程序多次運行時的耗時數(shù)據生成被測程序耗時數(shù)據的圖形化數(shù)據。
本發(fā)明提供的方案可以實現(xiàn)通過獲取至少兩個插樁點的位置信息和插樁代碼,根據所述插樁點的位置信息和插樁代碼對被測程序進行插樁;運行所述插樁后的被測程序,當所述插樁后的被測程序中的所述插樁點被觸發(fā)時,執(zhí)行與觸發(fā)的所述插樁點對應的所述插樁代碼,獲取執(zhí)行所述插樁代碼輸出的樁點數(shù)據;所述樁點數(shù)據包括:時間戳、事件標簽和堆棧信息;以及根據所述樁點數(shù)據,生成被測程序在運行至所述至少兩個插樁點之間的耗時數(shù)據;有效地幫助開發(fā)者定位到程序運行過程中耗時的關鍵節(jié)點與程序各個階段的耗時分布,并且這些信息都是跟隨系統(tǒng)運行即時產生的,非常有利于開發(fā)者在程序優(yōu)化過程中做數(shù)據比對。本系統(tǒng)為程序優(yōu)化提供了一個非常便捷的發(fā)現(xiàn)問題的手段,與證明優(yōu)化成果的途徑,極大地壓縮了開發(fā)成本,便利了程序優(yōu)化過程。
附圖說明
為了更清楚地說明本發(fā)明實施例或現(xiàn)有技術中的技術方案和優(yōu)點,下面將對實施例或現(xiàn)有技術描述中所需要使用的附圖作簡單的介紹,顯而易見地,下面描述中的附圖僅僅是本發(fā)明的一些實施例,對于本領域普通技術人員來講,在不付出創(chuàng)造性勞動的前提下,還可以根據這些附圖獲得其它附圖。
圖1是根據本發(fā)明實施例提供的方法的計算機終端的硬件結構框圖;
圖2是根據本發(fā)明實施例1提供的用于監(jiān)測程序運行時耗時數(shù)據的方法的流程圖;
圖3是實施例1中步驟203的流程圖;
圖4是實施例1中對樁點數(shù)據進行整合后的數(shù)據報表示例;
圖5是實施例1中多次運行被測程序時輸出的圖形化數(shù)據的示意圖;
圖6是實施例2提供的另一種用于監(jiān)測程序運行時耗時數(shù)據的方法的流程圖;
圖7是實施例3提供的用于監(jiān)測程序運行時耗時數(shù)據的系統(tǒng)的結構框圖;
圖8是實施例4提供的另一種用于監(jiān)測程序運行時耗時數(shù)據的系統(tǒng)的結構框圖;
圖9是根據本發(fā)明實施例的計算機終端的結構框圖。
具體實施方式
為了使本技術領域的人員更好地理解本發(fā)明方案,下面將結合本發(fā)明實施例中的附圖,對本發(fā)明實施例中的技術方案進行清楚、完整地描述,顯然,所描述的實施例僅僅是本發(fā)明一部分的實施例,而不是全部的實施例?;诒景l(fā)明中的實施例,本領域普通技術人員在沒有做出創(chuàng)造性勞動前提下所獲得的所有其他實施例,都應當屬于本發(fā)明保護的范圍。
需要說明的是,本發(fā)明的說明書和權利要求書及上述附圖中的術語“第一”、“第二”等是用于區(qū)別類似的對象,而不必用于描述特定的順序或先后次序。應該理解這樣使用的數(shù)據在適當情況下可以互換,以便這里描述的本發(fā)明的實施例能夠以除了在這里圖示或描述的那些以外的順序實施。此外,術語“包括”和“具有”以及他們的任何變形,意圖在于覆蓋不排他的包含,例如,包含了一系列步驟或單元的過程、方法、系統(tǒng)、產品或設備不必限于清楚地列出的那些步驟或單元,而是可包括沒有清楚地列出的或對于這些過程、方法、產品或設備固有的其它步驟或單元。
實施例1
根據本發(fā)明實施例,提供了一種用于監(jiān)測程序運行時耗時數(shù)據的方法的實施例,需要說明的是,在附圖的流程圖示出的步驟可以在諸如一組計算機可執(zhí)行指令的計算機系統(tǒng)中執(zhí)行,并且,雖然在流程圖中示出了邏輯順序,但是在某些情況下,可以以不同于此處的順序執(zhí)行所示出或描述的步驟。
本申請實施例一所提供的方法實施例可以在移動終端、計算機終端或者類似的運算裝置中執(zhí)行。以運行在計算機終端上為例,圖1是根據本發(fā)明實施例的用于監(jiān)測程序運行時耗時數(shù)據的方法的計算機終端的硬件結構框圖。如圖1所示,計算機終端100可以包括一個或多個(圖中僅示出一個)處理器102(處理器102可以包括但不限于微處理器MCU或可編程邏輯器件FPGA等的處理裝置)、用于存儲數(shù)據的存儲器104、以及用于通信功能的傳輸裝置106。本領域普通技術人員可以理解,圖1所示的結構僅為示意,其并不對上述電子裝置的結構造成限定。例如,計算機終端100還可包括比圖1中所示更多或者更少的組件,或者具有與圖1所示不同的配置。
存儲器104可用于存儲應用程序的程序程序以及模塊,如本發(fā)明實施例中的用于監(jiān)測程序運行時耗時數(shù)據的方法對應的程序指令/模塊,處理器102通過運行存儲在存儲器104內的程序程序以及模塊,從而執(zhí)行各種功能應用以及數(shù)據處理,即實現(xiàn)上述的用于監(jiān)測程序運行時耗時數(shù)據的方法。存儲器104可包括高速隨機存儲器,還可包括非易失性存儲器,如一個或者多個磁性存儲裝置、閃存、或者其他非易失性固態(tài)存儲器。在一些實例中,存儲器104可進一步包括相對于處理器102遠程設置的存儲器,這些遠程存儲器可以通過網絡連接至計算機終端10。上述網絡的實例包括但不限于互聯(lián)網、企業(yè)內部網、局域網、移動通信網及其組合。
傳輸裝置106用于經由一個網絡接收或者發(fā)送數(shù)據。上述的網絡具體實例可包括計算機終端100的通信供應商提供的無線網絡。在一個實例中,傳輸裝置106包括一個網絡適配器(Network Interface Controller,簡稱為NIC),其可通過基站與其他網絡設備相連從而可與互聯(lián)網進行通訊。在一個實例中,傳輸裝置106可以為射頻(Radio Frequency,簡稱為RF)模塊,其用于通過無線方式與互聯(lián)網進行通訊。
在上述運行環(huán)境下,本申請?zhí)峁┝巳鐖D2所示的用于監(jiān)測程序運行時耗時數(shù)據的方法。該方法可以應用于智能終端設備中,由智能終端設備中的處理器執(zhí)行,智能終端設備可以是智能手機、平板電腦等。智能終端設備中安裝有至少一個應用程序,本發(fā)明實施例并不限定應用程序的種類,可以為系統(tǒng)類應用程序,也可以為程序類應用程序。
圖2是根據本發(fā)明實施例的用于監(jiān)測程序運行時耗時數(shù)據的方法的流程圖。如圖2所示,該方法的一種可選的方案包括如下步驟:
步驟201、獲取插樁點的位置信息和插樁代碼,根據所述插樁點的位置信息和插樁代碼對被測程序進行插樁;所述插樁點至少為兩個。
程序插樁是借助往被測程序中插入操作,來實現(xiàn)測試目的的方法。程序插樁的基本原理是在不破壞被測試程序原有邏輯完整性的前提下,在程序的相應位置上插入一些探針。這些探針本質上就是進行信息采集的代碼段,可以是賦值語句或采集覆蓋信息的函數(shù)調用。通過探針的執(zhí)行并輸出程序的運行特征數(shù)據?;趯@些特征數(shù)據的分析,揭示程序的內部行為和特征。
所謂插樁點,是指要插入插樁代碼的代碼點,可設為在調用系統(tǒng)函數(shù)或自定義函數(shù)時或者執(zhí)行某類操作時插入預設的插樁代碼。
為了測試程序在運行過程中每個事件節(jié)點之間的耗時信息,本申請的插樁點至少為兩個,這樣,根據插樁點輸出的數(shù)據,就能夠得到這兩個插樁點之間的程序耗時數(shù)據。為了更好地了解程序在每個階段的運行速度和耗時信息,插樁點與程序的事件節(jié)點或關鍵節(jié)點對應設置,插樁點的位置信息與程序的事件節(jié)點位置對應。當然,在一個程序中,往往會存在多個事件節(jié)點,因此,對應于每個事件節(jié)點設置一個插樁點,就可以得到這個程序在運行過程中各個事件節(jié)點之間的耗時數(shù)據。
對被測程序插樁的過程可以直接在被測程序中加載插樁代碼或宏命令;也可以首先獲取配置文件,所述配置文件中包含插樁點和對應的插樁代碼,據所述配置文件,在被測程序的插樁點處插入對應的所述插樁代碼,生成插樁后的被測程序。通過采用宏命令插樁,能夠提高方法的簡潔性和程序的可讀性。
步驟202、運行所述插樁后的被測程序,當所述插樁后的被測程序中的所述插樁點被觸發(fā)時,執(zhí)行與觸發(fā)的所述插樁點對應的所述插樁代碼,獲取執(zhí)行所述插樁代碼輸出的樁點數(shù)據;所述樁點數(shù)據包括:時間戳、事件標簽和堆棧信息。
在本申請上述的步驟202中,樁點數(shù)據中的時間戳用來標記程序運行至插樁點時的時間戳;事件標簽用來對插樁點所屬的事件進行標記;堆棧信息用來記錄被測程序在插樁點的上下文信息,比如函數(shù)的調用關系,線程信息等。
步驟203、根據所述樁點數(shù)據,生成被測程序在運行至所述至少兩個插樁點之間的耗時數(shù)據。
在獲取了樁點數(shù)據后,就能夠對樁點數(shù)據進行整合、分析,從而生成插樁點之間的程序耗時數(shù)據。
具體來說,根據事件標簽對同屬于一個事件的樁點數(shù)據進行整合,每個樁點數(shù)據都具有時間戳,從而保證了樁點數(shù)據的唯一性,不能與其他樁點的數(shù)據混淆。另外,由于每個樁點數(shù)據都具有時間戳,根據時間戳就能計算出兩個樁點之間的程序耗時數(shù)據,進而得到整個事件每個階段的耗時數(shù)據。此外,本申請的樁點數(shù)據包括了堆棧信息,可以根據堆棧信息連接每一步的堆棧信息及其耗時。
下面以被測程序為某動漫程序的加載過程為例,對本申請的方案進行說明:
動漫程序加載作為一個事件,首先為其設置一個事件標簽,例如標簽:comic_indexOpen;
其次,獲取插樁點的位置信息和插樁代碼,根據所述插樁點的位置信息和插樁代碼對被測程序進行插樁。由于動漫程序加載過程中,從捕獲用戶點擊按鈕到頁面完全加載,存在至少以下幾個事件節(jié)點:點擊按鈕、初始化完成、數(shù)據加載完成、View頁面視圖加載完成??梢詫诿總€事件節(jié)點分別設置一個插樁點。
再次,運行所述插樁后的被測程序,當所述插樁后的被測程序中的所述插樁點被觸發(fā)時,執(zhí)行與觸發(fā)的所述插樁點對應的所述插樁代碼,獲取執(zhí)行所述插樁代碼輸出的樁點數(shù)據;所述樁點數(shù)據包括:時間戳、事件標簽和堆棧信息;
最后,根據所述樁點數(shù)據,生成被測程序在運行至所述插樁點之間的耗時數(shù)據。例如,本例中,從點擊按鈕到初始化完成的耗時數(shù)據,從初始化完成到數(shù)據加載完成的耗時數(shù)據,從數(shù)據加載完成到View頁面視圖加載完成的耗時數(shù)據。從這一系列的耗時數(shù)據中,可以清楚地得到那一部分耗時最長,進而對優(yōu)化程序和分析程序缺陷提供幫助。
本發(fā)明實施例可以采用多種方式獲取插樁點的信息和插樁代碼、獲取插樁點之間的程序耗時數(shù)據,上述用于監(jiān)測程序運行時耗時數(shù)據的方法僅為本發(fā)明的優(yōu)選實施例,并不代表本發(fā)明實施例的用于監(jiān)測程序運行時耗時數(shù)據的方法僅包括上述實施方式。為了提高獲取監(jiān)測程序運行時耗時數(shù)據的準確性,本發(fā)明實施例還可以包括其他方式,此處不再一一舉例說明。
通過上述步驟201至步驟203,本發(fā)明提供的方案可以實現(xiàn)通過獲取至少兩個插樁點的位置信息和插樁代碼,根據所述插樁點的位置信息和插樁代碼對被測程序進行插樁;運行所述插樁后的被測程序,當所述插樁后的被測程序中的所述插樁點被觸發(fā)時,執(zhí)行與觸發(fā)的所述插樁點對應的所述插樁代碼,獲取執(zhí)行所述插樁代碼輸出的樁點數(shù)據;所述樁點數(shù)據包括:時間戳、事件標簽和堆棧信息;以及根據所述樁點數(shù)據,生成被測程序在運行至所述至少兩個插樁點之間的耗時數(shù)據;有效地幫助開發(fā)者定位到程序運行過程中耗時的關鍵節(jié)點與程序各個階段的耗時分布,并且這些信息都是跟隨系統(tǒng)運行即時產生的,非常有利于開發(fā)者在程序優(yōu)化過程中做數(shù)據比對。本系統(tǒng)為程序優(yōu)化提供了一個非常便捷的發(fā)現(xiàn)問題的手段,與證明優(yōu)化成果的途徑,極大地壓縮了開發(fā)成本,便利了程序優(yōu)化過程。
作為一種可選的實施方式,所述插樁點為系統(tǒng)自動設置的插樁點;或者,所述插樁點為用戶自定義設置的插樁點。程序開發(fā)者可以根據程序的特性設置感興趣的插樁點與事件標簽,自定義樁點與事件,使得記錄過程與數(shù)據更加靈活。當然,插樁點也可以是系統(tǒng)根據自動設置的程序節(jié)點,比如,某個步驟的開始、完成節(jié)點。本申請能夠實現(xiàn)自定義插樁,從而為開發(fā)者提供特定的感興趣的數(shù)據。
作為一種可選的實施方式,所述步驟203之后,還包括:獲取用戶輸入的篩選條件,根據所述篩選條件對接收到的樁點數(shù)據篩選、整合;所述篩選條件包括事件標簽和日期。
例如,可以根據事件標簽或日期對所有的樁點數(shù)據進行篩選整合以及動態(tài)搜索。
作為一種可選的實施方式,步驟202還包括:對接收到的樁點數(shù)據進行存儲。
可以將接收到的樁點數(shù)據存儲到數(shù)據庫中。當然,也可以先對所述樁點數(shù)據進行整合、分析,計算每兩個插樁點之間的耗時數(shù)據,將所述耗時數(shù)據與事件標簽關聯(lián)存儲到數(shù)據庫中。
作為一種可選的實施方式,步驟203之后,還包括:對接收到的樁點數(shù)據進行分析處理,并生成圖形化數(shù)據輸出。所述圖形化數(shù)據輸出包括但不限于數(shù)據報表、柱狀圖、圖表等。
作為一種可選的實施方式,所述獲取的執(zhí)行所述插樁代碼輸出的樁點數(shù)據為被測程序多次運行時的樁點數(shù)據;如圖3所示,上述步驟對接收到的樁點數(shù)據進行分析處理,并生成圖形化數(shù)據輸出,包括:
步驟301、對被測程序每次運行時的樁點數(shù)據進行整合,生成被測程序每次運行時的耗時數(shù)據。
其中,上述步驟301具體包括:根據一次運行時,樁點數(shù)據對應的事件標簽,獲取同屬于一個事件標簽的樁點數(shù)據;根據樁點數(shù)據對應的時間戳,對樁點數(shù)據進行排序;根據排序后的對應一個事件標簽的樁點數(shù)據生成被測程序一次運行時的耗時數(shù)據;最后,對被測程序每次運行時的樁點數(shù)據均采用上述步驟進行整合,生成被測程序每次運行時的耗時數(shù)據。
步驟302、對所述耗時數(shù)據進行分析,刪除臟數(shù)據。
本申請上述步驟302中刪除臟數(shù)據的方法包括但不限于:采用預定的判別算法對步驟301中獲取的被測程序多次運行時的耗時數(shù)據進行分析,若其中被測程序某一次或某幾次的耗時數(shù)據明顯與其余數(shù)據不同,則判定該次耗時數(shù)據為臟數(shù)據,刪除所述臟數(shù)據。刪除臟數(shù)據時會刪除與臟數(shù)據對應的樁點數(shù)據。
步驟303、根據被測程序多次運行時的耗時數(shù)據生成被測程序耗時數(shù)據的圖形化數(shù)據。
圖4是在一個場景中,對樁點數(shù)據進行整合后的數(shù)據報表示例。圖中,將所有的事件標簽,按照時間順序,最近的排在最前。第一列表示標簽名,第二列表示該標簽最后一次記錄時間。點擊標簽可進入對應的數(shù)據展示頁。
圖5是在一個具體的應用場景中多次運行被測程序時輸出的圖形化數(shù)據的示意圖。圖中,以柱狀圖的形式示出了7次運行被測程序(例如,對應事件標簽comic_indexOpen)時的耗時數(shù)據的對比結果。從圖中可以清楚地看到被測程序運行到每個階段的耗時情況,根據多次運行數(shù)據的對比,能夠一目了然地分析出哪些環(huán)境中整體耗時較長。
本申請?zhí)峁┝硕啻芜\行的軟件耗時數(shù)據間的對比的能力,使得開發(fā)者能夠清楚明了地了解各種運行場景或不同操作情況下數(shù)據的差異,比如冷啟動與熱啟動之間耗時數(shù)據的差異。
由于本申請采用定點插樁的方式記錄程序的運行狀態(tài),每個插樁點均通過事件標簽與時間戳與其他插樁點可區(qū)別。本申請在當前線程獲取到樁點信息(包括時間戳)后立馬進入專屬處理隊列,確保不對被測程序原有的邏輯與時序不產生影響。另外,樁點數(shù)據使用事件標簽關聯(lián)存儲在哈希表中,保證多事件并行采集數(shù)據互不干擾。另外,每個樁點數(shù)據的時間戳都具有多個狀態(tài)信息(事件標簽等),從而保證同一個事件中的不同時間戳順序的準確性。
需要說明的是,本申請的實施例1中,被測程序可以運行在各種終端設備,包括客戶端和服務器;步驟203中對樁點數(shù)據的處理過程也可以由終端設備或服務器來完成。
需要說明的是,對于前述的各方法實施例,為了簡單描述,故將其都表述為一系列的動作組合,但是本領域技術人員應該知悉,本發(fā)明并不受所描述的動作順序的限制,因為依據本發(fā)明,某些步驟可以采用其他順序或者同時進行。其次,本領域技術人員也應該知悉,說明書中所描述的實施例均屬于優(yōu)選實施例,所涉及的動作和模塊并不一定是本發(fā)明所必須的。
通過以上的實施方式的描述,本領域的技術人員可以清楚地了解到根據上述實施例的方法可借助軟件加必需的通用硬件平臺的方式來實現(xiàn),當然也可以通過硬件,但很多情況下前者是更佳的實施方式。基于這樣的理解,本發(fā)明的技術方案本質上或者說對現(xiàn)有技術做出貢獻的部分可以以軟件產品的形式體現(xiàn)出來,該計算機軟件產品存儲在一個存儲介質(如ROM/RAM、磁碟、光盤)中,包括若干指令用以使得一臺終端設備(可以是手機,計算機,服務器,或者網絡設備等)執(zhí)行本發(fā)明各個實施例所述的方法。
實施例2
如圖6所示,本發(fā)明提供了另一種用于監(jiān)測程序運行時耗時數(shù)據的方法,該方法包括以下步驟:
步驟601、獲取插樁點的位置信息和插樁代碼,根據所述插樁點的位置信息和插樁代碼對被測程序進行插樁;所述插樁點至少為兩個。
步驟602、運行所述插樁后的被測程序,當所述插樁后的被測程序中的所述插樁點被觸發(fā)時,執(zhí)行與觸發(fā)的所述插樁點對應的所述插樁代碼,獲取執(zhí)行所述插樁代碼輸出的樁點數(shù)據;所述樁點數(shù)據包括:時間戳、事件標簽和堆棧信息。
步驟603、將所述樁點數(shù)據發(fā)送給服務器。
步驟604、服務器根據接收到的樁點數(shù)據,生成被測程序在運行至所述至少兩個插樁點之間的耗時數(shù)據。
本實施例中,被測程序運行在終端設備上,在被測程序上插樁后,終端設備獲取執(zhí)行所述插樁代碼輸出的樁點數(shù)據,將所述樁點數(shù)據發(fā)送給服務器。服務器根據接收到的樁點數(shù)據,生成被測程序在運行至所述至少兩個插樁點之間的耗時數(shù)據。
作為一種優(yōu)選的實施方式,步驟603包括:在所述樁點數(shù)據滿足預設的時間閾值后,將所述樁點數(shù)據發(fā)送給服務器;或者,在所述樁點數(shù)據滿足預設的數(shù)據量閾值后,將所述樁點數(shù)據發(fā)送給服務器。
由于本申請在所述樁點數(shù)據滿足預設的閾值條件后,才將所述樁點數(shù)據發(fā)送給服務器,能夠避免終端設備與服務器之間頻繁的數(shù)據交互以及對系統(tǒng)資源的過多占用。
實施例2與實施例1的區(qū)別在于,實施例2增加了將所述樁點數(shù)據發(fā)送給服務器的步驟;相應地,根據所述樁點數(shù)據,生成被測程序在運行至所述至少兩個插樁點之間的耗時數(shù)據步驟的執(zhí)行主體為服務器,后續(xù)對樁點數(shù)據進行分析處理的步驟均由服務器完成。其余部分與實施例1相同,不再贅述。
本申請中,樁點數(shù)據還包括可以包括文件名、方法名、用戶名。其中,用戶名用來在服務器接收到樁點數(shù)據后,以樁點為單位,將數(shù)據存儲到用戶名對應的用戶維度中。
服務器維護至少三張表:樁點數(shù)據表、事件數(shù)據表和用戶信息表。其中,樁點數(shù)據表用于存儲樁點數(shù)據,事件數(shù)據表用于存儲與事件標簽對應的事件數(shù)據;用戶信息表用于存儲指定用戶相關的信息,例如用戶登錄服務器的口令、與用戶名對應事件數(shù)據和樁點數(shù)據等。
本申請首先會根據樁點抓取程序的運行時信息(包括時間戳,上下文,事件標簽等),然后對數(shù)據進行整合與去除臟數(shù)據,在滿足時間閾值或數(shù)據量閾值之后將數(shù)據上報到專屬服務器中,服務器接收到數(shù)據后對其進行整合分類,數(shù)據庫存儲。開發(fā)者通過服務器的前端可使用自己制定的口令進入到報表頁面,然后服務器使用開發(fā)者提供的關鍵信息對數(shù)據進行篩選處理,并通過特定的柱狀圖展示出來,通過該圖形化界面,開發(fā)者可以了解到樁點與樁點之間的信息,并可進一步了解到每一步中的運行堆棧信息及其耗時。并且系統(tǒng)提供了多次運行的數(shù)據間對比的能力,使得開發(fā)者可以了解到冷啟動與熱啟動之間數(shù)據的差異,及不同操作情況下的數(shù)據差異。
由于系統(tǒng)自動抓取運行時的上下文信息,所以開發(fā)者只需要告訴組件感興趣的樁點即可,其他工作將有組件自動完成,通過運行程序數(shù)據即可上報至服務器,并提供了多維度(事件標簽,日期等維度),多事件(同時記錄多個事件并行計算)的記錄方式。
實施例3
如圖7所示,本申請?zhí)峁┝艘环N用于監(jiān)測程序運行時耗時數(shù)據的系統(tǒng),系統(tǒng)包括:
插樁模塊710,用于獲取插樁點的位置信息和插樁代碼,根據所述插樁點的位置信息和插樁代碼對被測程序進行插樁;所述插樁點至少為兩個;
樁點數(shù)據獲取模塊720,用于運行所述插樁后的被測程序,當所述插樁后的被測程序中的所述插樁點被觸發(fā)時,執(zhí)行與觸發(fā)的所述插樁點對應的所述插樁代碼,獲取執(zhí)行所述插樁代碼輸出的樁點數(shù)據;所述樁點數(shù)據包括:時間戳、事件標簽和堆棧信息;
耗時數(shù)據生成模塊730,用于根據所述樁點數(shù)據,生成被測程序在運行至所述至少兩個插樁點之間的耗時數(shù)據。
作為一種可選的實施方式,所述插樁模塊710包括:
自動插樁單元711,用于獲取自動設置的插樁點;
自定義插樁單元712,用于獲取用戶自定義設置的插樁點。
作為一種可選的實施方式,系統(tǒng)還包括篩選模塊740,用于獲取用戶輸入的篩選條件,根據所述篩選條件對接收到的樁點數(shù)據篩選、整合;所述篩選條件包括事件標簽和日期。
作為一種可選的實施方式,系統(tǒng)還包括:
存儲模塊750,用于對接收到的樁點數(shù)據進行存儲。
作為一種可選的實施方式,系統(tǒng)還包括:圖形化輸出模塊760,用于對接收到的樁點數(shù)據進行分析處理,并生成圖形化數(shù)據輸出。
其中,圖形化輸出模塊760包括顯示單元764,用于顯示圖形化數(shù)據。顯示單元可以是具有顯示器的計算機終端。
作為一種可選的實施方式,所述圖形化輸出模塊760包括:
單次數(shù)據整合單元761,用于對被測程序每次運行時的樁點數(shù)據進行整合,生成被測程序每次運行時的耗時數(shù)據;
數(shù)據清理單元762,用于對所述耗時數(shù)據進行分析,刪除臟數(shù)據。
圖形化單元763,用于根據被測程序多次運行時的耗時數(shù)據生成被測程序耗時數(shù)據的圖形化數(shù)據。
本發(fā)明提供的方案可以實現(xiàn)通過獲取至少兩個插樁點的位置信息和插樁代碼,根據所述插樁點的位置信息和插樁代碼對被測程序進行插樁;運行所述插樁后的被測程序,當所述插樁后的被測程序中的所述插樁點被觸發(fā)時,執(zhí)行與觸發(fā)的所述插樁點對應的所述插樁代碼,獲取執(zhí)行所述插樁代碼輸出的樁點數(shù)據;所述樁點數(shù)據包括:時間戳、事件標簽和堆棧信息;以及根據所述樁點數(shù)據,生成被測程序在運行至所述至少兩個插樁點之間的耗時數(shù)據;有效地幫助開發(fā)者定位到程序運行過程中耗時的關鍵節(jié)點與程序各個階段的耗時分布,并且這些信息都是跟隨系統(tǒng)運行即時產生的,非常有利于開發(fā)者在程序優(yōu)化過程中做數(shù)據比對。本系統(tǒng)為程序優(yōu)化提供了一個非常便捷的發(fā)現(xiàn)問題的手段,與證明優(yōu)化成果的途徑,極大地壓縮了開發(fā)成本,便利了程序優(yōu)化過程。
實施例4
如圖8所示,本申請?zhí)峁┝艘环N用于監(jiān)測程序運行時耗時數(shù)據的系統(tǒng),系統(tǒng)包括:終端設備和服務器,其中,終端設備設置有插樁模塊和樁點數(shù)據獲取模塊,服務器設置有耗時數(shù)據生成模塊。
插樁模塊810,用于獲取插樁點的位置信息和插樁代碼,根據所述插樁點的位置信息和插樁代碼對被測程序進行插樁;所述插樁點至少為兩個。
樁點數(shù)據獲取模塊820,用于運行所述插樁后的被測程序,當所述插樁后的被測程序中的所述插樁點被觸發(fā)時,執(zhí)行與觸發(fā)的所述插樁點對應的所述插樁代碼,獲取執(zhí)行所述插樁代碼輸出的樁點數(shù)據;所述樁點數(shù)據包括:時間戳、事件標簽和堆棧信息。
耗時數(shù)據生成模塊830,用于根據所述樁點數(shù)據,生成被測程序在運行至所述至少兩個插樁點之間的耗時數(shù)據。
所述耗時數(shù)據生成模塊830包括:
發(fā)送單元831,用于將所述樁點數(shù)據發(fā)送給服務器;
處理單元832,用于服務器根據接收到的樁點數(shù)據,生成被測程序在運行至所述至少兩個插樁點之間的耗時數(shù)據。
作為一種可選的實施例,所述發(fā)送單元831包括:
第一發(fā)送子單元8311,用于在所述樁點數(shù)據滿足預設的時間閾值后,將所述樁點數(shù)據發(fā)送給服務器;
第二發(fā)送子單元8312,用于在所述樁點數(shù)據滿足預設的數(shù)據量閾值后,將所述樁點數(shù)據發(fā)送給服務器。
實施例5
本發(fā)明的實施例還提供了一種存儲介質??蛇x地,在本實施例中,上述存儲介質可以用于保存上述實施例一種用于監(jiān)測程序運行時耗時數(shù)據的方法所執(zhí)行的程序代碼。
可選地,在本實施例中,上述存儲介質可以位于計算機網絡的多個網絡設備中的至少一個網絡設備。
可選地,在本實施例中,存儲介質被設置為存儲用于執(zhí)行以下步驟的程序代碼:
第一步,獲取插樁點的位置信息和插樁代碼,根據所述插樁點的位置信息和插樁代碼對被測程序進行插樁;所述插樁點至少為兩個。
第二步,運行所述插樁后的被測程序,當所述插樁后的被測程序中的所述插樁點被觸發(fā)時,執(zhí)行與觸發(fā)的所述插樁點對應的所述插樁代碼,獲取執(zhí)行所述插樁代碼輸出的樁點數(shù)據;所述樁點數(shù)據包括:時間戳、事件標簽和堆棧信息。
第三步,根據所述樁點數(shù)據,生成被測程序在運行至所述至少兩個插樁點之間的耗時數(shù)據。
可選地,在本實施例中,上述存儲介質可以包括但不限于:U盤、只讀存儲器(ROM,Read-Only Memory)、隨機存取存儲器(RAM,Random Access Memory)、移動硬盤、磁碟或者光盤等各種可以存儲程序代碼的介質。
實施例6
本發(fā)明的實施例還提供一種計算機終端,該計算機終端可以是計算機終端群中的任意一個計算機終端設備。可選地,在本實施例中,上述計算機終端也可以替換為移動終端等終端設備。
可選地,在本實施例中,上述計算機終端可以位于計算機網絡的多個網絡設備中的至少一個網絡設備。
可選地,圖9是根據本發(fā)明實施例的計算機終端的結構框圖。如圖9所示,該計算機終端A可以包括:一個或多個(圖中僅示出一個)處理器161、存儲器163、以及傳輸裝置165。
其中,存儲器163可用于存儲軟件程序以及模塊,如本發(fā)明實施例中的用于監(jiān)測程序運行時耗時數(shù)據的方法和裝置對應的程序指令/模塊,處理器161通過運行存儲在存儲器163內的軟件程序以及模塊,從而執(zhí)行各種功能應用以及數(shù)據處理,即實現(xiàn)上述的用于監(jiān)測程序運行時耗時數(shù)據。存儲器163可包括高速隨機存儲器,還可以包括非易失性存儲器,如一個或者多個磁性存儲裝置、閃存、或者其他非易失性固態(tài)存儲器。在一些實例中,存儲器163可進一步包括相對于處理器161遠程設置的存儲器,這些遠程存儲器可以通過網絡連接至計算機終端A。上述網絡的實例包括但不限于互聯(lián)網、企業(yè)內部網、局域網、移動通信網及其組合。
上述的傳輸裝置165用于經由一個網絡接收或者發(fā)送數(shù)據。上述的網絡具體實例可包括有線網絡及無線網絡。在一個實例中,傳輸裝置165包括一個網絡適配器,其可通過網線與其他網絡設備與路由器相連從而可與互聯(lián)網或局域網進行通訊。在一個實例中,傳輸裝置165為射頻模塊,其用于通過無線方式與互聯(lián)網進行通訊。
其中,具體地,存儲器163用于存儲預設動作條件和預設權限用戶的信息、以及應用程序。
處理器161可以通過傳輸裝置調用存儲器163存儲的信息及應用程序,以執(zhí)行下述步驟:
可選的,上述處理器161還可以執(zhí)行如下步驟的程序代碼:
第一步,獲取插樁點的位置信息和插樁代碼,根據所述插樁點的位置信息和插樁代碼對被測程序進行插樁;所述插樁點至少為兩個。
第二步,運行所述插樁后的被測程序,當所述插樁后的被測程序中的所述插樁點被觸發(fā)時,執(zhí)行與觸發(fā)的所述插樁點對應的所述插樁代碼,獲取執(zhí)行所述插樁代碼輸出的樁點數(shù)據;所述樁點數(shù)據包括:時間戳、事件標簽和堆棧信息。
第三步,根據所述樁點數(shù)據,生成被測程序在運行至所述至少兩個插樁點之間的耗時數(shù)據。
可選地,本實施例中的具體示例可以參考上述實施例1到實施例4中所描述的示例,本實施例在此不再贅述。
上述本發(fā)明實施例序號僅僅為了描述,不代表實施例的優(yōu)劣。
上述實施例中的集成的單元如果以軟件功能單元的形式實現(xiàn)并作為獨立的產品銷售或使用時,可以存儲在上述計算機可讀取的存儲介質中?;谶@樣的理解,本發(fā)明的技術方案本質上或者說對現(xiàn)有技術做出貢獻的部分或者該技術方案的全部或部分可以以軟件產品的形式體現(xiàn)出來,該計算機軟件產品存儲在存儲介質中,包括若干指令用以使得一臺或多臺計算機設備(可為個人計算機、服務器或者網絡設備等)執(zhí)行本發(fā)明各個實施例所述方法的全部或部分步驟。
在本發(fā)明的上述實施例中,對各個實施例的描述都各有側重,某個實施例中沒有詳述的部分,可以參見其他實施例的相關描述。
在本申請所提供的幾個實施例中,應該理解到,所揭露的客戶端,可通過其它的方式實現(xiàn)。其中,以上所描述的裝置實施例僅僅是示意性的,例如所述單元的劃分,僅僅為一種邏輯功能劃分,實際實現(xiàn)時可以有另外的劃分方式,例如多個單元或組件可以結合或者可以集成到另一個系統(tǒng),或一些特征可以忽略,或不執(zhí)行。另一點,所顯示或討論的相互之間的耦合或直接耦合或通信連接可以是通過一些接口,單元或模塊的間接耦合或通信連接,可以是電性或其它的形式。
所述作為分離部件說明的單元可以是或者也可以不是物理上分開的,作為單元顯示的部件可以是或者也可以不是物理單元,即可以位于一個地方,或者也可以分布到多個網絡單元上。可以根據實際的需要選擇其中的部分或者全部單元來實現(xiàn)本實施例方案的目的。
另外,在本發(fā)明各個實施例中的各功能單元可以集成在一個處理單元中,也可以是各個單元單獨物理存在,也可以兩個或兩個以上單元集成在一個單元中。上述集成的單元既可以采用硬件的形式實現(xiàn),也可以采用軟件功能單元的形式實現(xiàn)。
以上所述僅是本發(fā)明的優(yōu)選實施方式,應當指出,對于本技術領域的普通技術人員來說,在不脫離本發(fā)明原理的前提下,還可以做出若干改進和潤飾,這些改進和潤飾也應視為本發(fā)明的保護范圍。