本發(fā)明涉及數(shù)據(jù)處理領(lǐng)域,具體地,涉及一種死循環(huán)檢測方法及裝置。
背景技術(shù):
死循環(huán)指的是無法靠自身的控制終止的循環(huán)。在計(jì)算機(jī)軟件中,針對(duì)死循環(huán)線程的檢測及處理是一項(xiàng)非常重要的技術(shù)。
目前,針對(duì)死循環(huán)或者類死循環(huán),較為常見的檢測方式有如下幾種:
方式一,使用系統(tǒng)時(shí)鐘中斷服務(wù)程序和線程切換鉤子函數(shù)監(jiān)控線程的運(yùn)行時(shí)間,若檢測到某個(gè)線程的運(yùn)行時(shí)間大于設(shè)定的閥值,則判定該線程出現(xiàn)了死循環(huán)。本方式中,由于使用鉤子函數(shù)不斷切換線程,檢測線程的運(yùn)行時(shí)間,導(dǎo)致檢測速度較慢,且會(huì)耗費(fèi)大量的系統(tǒng)資源。
方式二,設(shè)置了最高優(yōu)先級(jí)的監(jiān)控線程、最低優(yōu)先級(jí)的測試線程,進(jìn)行死循環(huán)檢測。首先,通過監(jiān)控線程和測試線程確定被測線程是否出現(xiàn)了死循環(huán),如果判定出現(xiàn)了死循環(huán),再通過不斷調(diào)整測試線程優(yōu)先級(jí)的方式,確定出現(xiàn)死循環(huán)的線程。該方式同樣存在檢測速度慢的問題。
方式三,同樣是設(shè)置了最高優(yōu)先級(jí)的監(jiān)控線程、最低優(yōu)先級(jí)的測試線程,進(jìn)行死循環(huán)檢測,與方式二不同的是,在判定出現(xiàn)死循環(huán)時(shí),本方式通過不停的調(diào)用鉤子函數(shù)進(jìn)行線程切換來確定出現(xiàn)死循環(huán)的線程。該方式的實(shí)現(xiàn)過程復(fù)雜,且同樣存在檢測速度慢的問題。
技術(shù)實(shí)現(xiàn)要素:
本發(fā)明的目的是提供一種死循環(huán)檢測方法及裝置,用以簡單快速的進(jìn)行死循環(huán)檢測。
本發(fā)明實(shí)施例提供了一種死循環(huán)檢測方法,應(yīng)用于死循環(huán)檢測裝置,所述方法包括:獲取被測線程的運(yùn)行時(shí)長;判斷所述運(yùn)行時(shí)長是否超出第一預(yù)設(shè)時(shí)長;在判定所述運(yùn)行時(shí)長超出所述第一預(yù)設(shè)時(shí)長時(shí),判斷所述被測線程是否在第二預(yù)設(shè)時(shí)長內(nèi)存在被重復(fù)運(yùn)行的代碼行;在判定所述被測線程存在被重復(fù)運(yùn)行的代碼行時(shí),確定所述被測線程出現(xiàn)死循環(huán)。
可選地,所述死循環(huán)檢測裝置按照預(yù)定周期定時(shí)啟動(dòng)。
可選地,當(dāng)所述被測線程處于運(yùn)行狀態(tài)時(shí),所述被測線程的運(yùn)行時(shí)長為當(dāng)前時(shí)間與所述死循環(huán)檢測裝置的啟動(dòng)時(shí)間之差。
可選地,所述方法還包括:根據(jù)所述被重復(fù)運(yùn)行的代碼行進(jìn)行死循環(huán)定位。
可選地,所述方法還包括:在確定所述被測線程未出現(xiàn)死循環(huán)時(shí),繼續(xù)獲取所述被測線程的運(yùn)行時(shí)長以及運(yùn)行的代碼行。
本發(fā)明實(shí)施例提供了一種死循環(huán)檢測裝置,所述裝置包括:運(yùn)行時(shí)長獲取單元,用于獲取被測線程的運(yùn)行時(shí)長;第一判斷單元,用于判斷所述運(yùn)行時(shí)長獲取單元獲取的運(yùn)行時(shí)長是否超出第一預(yù)設(shè)時(shí)長;第二判斷單元,用于在所述第一判斷單元判定所述運(yùn)行時(shí)長超出所述第一預(yù)設(shè)時(shí)長時(shí),判斷所述被測線程是否在第二預(yù)設(shè)時(shí)長內(nèi)存在被重復(fù)運(yùn)行的代碼行;死循環(huán)確定單元,用于在所述第二判斷單元判定所述被測線程存在被重復(fù)運(yùn)行的代碼行時(shí),確定所述被測線程出現(xiàn)死循環(huán)。
可選地,所述死循環(huán)檢測裝置按照預(yù)定周期定時(shí)啟動(dòng)。
可選地,當(dāng)所述被測線程處于運(yùn)行狀態(tài)時(shí),所述被測線程的運(yùn)行時(shí)長為當(dāng)前時(shí)間與所述死循環(huán)檢測裝置的啟動(dòng)時(shí)間之差。
可選地,所述裝置還包括:死循環(huán)定位單元,用于根據(jù)所述被重復(fù)運(yùn)行的代碼行進(jìn)行死循環(huán)定位。
可選地,所述裝置還包括:獲取單元,用于在確定所述被測線程未出現(xiàn)死循環(huán)時(shí),繼續(xù)獲取所述被測線程的運(yùn)行時(shí)長以及運(yùn)行的代碼行。
本發(fā)明技術(shù)方案,考慮到線程出現(xiàn)死循環(huán)時(shí)大多會(huì)在運(yùn)行時(shí)長和運(yùn)行代碼兩方面出現(xiàn)異常,故死循環(huán)檢測裝置被啟動(dòng)后,可以獲取并記錄被測線程的運(yùn)行時(shí)長以及運(yùn)行代碼行,如果運(yùn)行時(shí)長超出第一預(yù)設(shè)時(shí)長,且第二預(yù)設(shè)時(shí)長內(nèi)存在被重復(fù)執(zhí)行的代碼行,則可以判定被測線程出現(xiàn)了死循環(huán)。如此方案,不僅簡化了死循環(huán)檢測過程,還可以節(jié)省死循環(huán)檢測時(shí)間,降低死循環(huán)檢測消耗的系統(tǒng)資源。
本發(fā)明的其他特征和優(yōu)點(diǎn)將在隨后的具體實(shí)施方式部分予以詳細(xì)說明。
附圖說明
附圖是用來提供對(duì)本發(fā)明的進(jìn)一步理解,并且構(gòu)成說明書的一部分,與下面的具體實(shí)施方式一起用于解釋本發(fā)明,但并不構(gòu)成對(duì)本發(fā)明的限制。在附圖中:
圖1是本發(fā)明死循環(huán)檢測方法的流程圖;
圖2是本發(fā)明死循環(huán)檢測裝置的結(jié)構(gòu)示意圖。
具體實(shí)施方式
以下結(jié)合附圖對(duì)本發(fā)明的具體實(shí)施方式進(jìn)行詳細(xì)說明。應(yīng)當(dāng)理解的是,此處所描述的具體實(shí)施方式僅用于說明和解釋本發(fā)明,并不用于限制本發(fā)明。
參見圖1,示出了本發(fā)明死循環(huán)檢測方法的流程圖,可以包括:
S101,獲取被測線程的運(yùn)行時(shí)長;
S102,判斷所述運(yùn)行時(shí)長是否超出第一預(yù)設(shè)時(shí)長;
S103,在判定運(yùn)行時(shí)長超出所述第一預(yù)設(shè)時(shí)長時(shí),判斷所述被測線程是否在第二預(yù)設(shè)時(shí)長內(nèi)存在被重復(fù)運(yùn)行的代碼行;
S104,在判定所述被測線程在第二預(yù)設(shè)時(shí)長內(nèi)存在被重復(fù)運(yùn)行的代碼行時(shí),確定所述被測線程出現(xiàn)死循環(huán)。
發(fā)明人在研發(fā)過程中發(fā)現(xiàn),出現(xiàn)死循環(huán)的線程大多具有以下共性:一方面,線程的運(yùn)行時(shí)長出現(xiàn)異常,且通常運(yùn)行時(shí)長都較長;另一方面,線程的運(yùn)行代碼出現(xiàn)異常,通常會(huì)在一定范圍內(nèi)不斷重復(fù)運(yùn)行某些代碼行,且不能終止。
結(jié)合上述發(fā)現(xiàn),本發(fā)明提供一種能夠簡單快速的進(jìn)行死循環(huán)檢測的方案,以期簡化死循環(huán)檢測過程,節(jié)省死循環(huán)檢測時(shí)間,降低死循環(huán)檢測消耗的系統(tǒng)資源。
具體地,本發(fā)明可以設(shè)置一個(gè)死循環(huán)檢測裝置,死循環(huán)檢測裝置可以掃描所有被測線程,記錄被測線程的運(yùn)行時(shí)長及運(yùn)行代碼行。作為一種可選方案,可以將死循環(huán)檢測裝置設(shè)置為高優(yōu)先級(jí)的檢測裝置,如此,死循環(huán)檢測裝置一定會(huì)被執(zhí)行,用于進(jìn)行死循環(huán)檢測。
死循環(huán)檢測裝置被啟動(dòng)后,可以掃描被測線程,累計(jì)獲得被測線程的運(yùn)行時(shí)長,如果運(yùn)行時(shí)長未超出第一預(yù)設(shè)時(shí)長,可以判定被測線程正常運(yùn)行,未出現(xiàn)死循環(huán);如果運(yùn)行時(shí)長超出第一預(yù)設(shè)時(shí)長,則可繼續(xù)做下一步檢測判斷。需要說明的是,可以針對(duì)所有被測線程設(shè)置一個(gè)通用的第一預(yù)設(shè)時(shí)長;或者,在被測線程之間差異性較大時(shí),也可以針對(duì)某個(gè)或某些被測線程設(shè)置個(gè)性化的第一預(yù)設(shè)時(shí)長,本發(fā)明實(shí)施例對(duì)此可不做限定,具體可由實(shí)際應(yīng)用情況而定。
作為一種示例,可以按照預(yù)定周期定時(shí)的啟動(dòng)死循環(huán)檢測裝置,如此,還可以簡化本發(fā)明獲取被測線程運(yùn)行時(shí)長的方案。具體地,獲取被測線程的運(yùn)行時(shí)長時(shí),如果被測線程處于運(yùn)行狀態(tài),運(yùn)行時(shí)長T運(yùn)行為當(dāng)前時(shí)間T1與死循環(huán)檢測裝置的啟動(dòng)時(shí)間T0之差,即T運(yùn)行=T1-T0;如果被測線程處于運(yùn)行結(jié)束狀態(tài),運(yùn)行時(shí)長T運(yùn)行為被測線程的結(jié)束時(shí)間T2與死循環(huán)檢測裝置的啟動(dòng)時(shí)間T0之差,即T運(yùn)行=T2-T0。作為一種示例,T1、T2可以通過讀取系統(tǒng)本地時(shí)間獲得,T0可以在死循環(huán)檢測裝置啟動(dòng)時(shí)記錄下來。
如上文所做介紹,死循環(huán)檢測裝置還可以實(shí)時(shí)記錄被測線程運(yùn)行的代碼行,故在被測線程的運(yùn)行時(shí)長超出第一預(yù)設(shè)時(shí)長時(shí),死循環(huán)檢測裝置可以根據(jù)其記錄的代碼行,做下一步的檢測判斷。具體地,死循環(huán)檢測裝置可以判斷被測線程在第二預(yù)設(shè)時(shí)長內(nèi)是否存在被重復(fù)運(yùn)行的代碼行,如果運(yùn)行的代碼行一直在變化,或者重復(fù)次數(shù)未超過預(yù)定值,可以判定被測線程正常運(yùn)行,未出現(xiàn)死循環(huán);否則可以判定被測線程出現(xiàn)了死循環(huán)。
舉例來說,如果被測線程運(yùn)行時(shí)長超出第一預(yù)設(shè)時(shí)長,且第20~25行代碼在一小時(shí)內(nèi)一直被重復(fù)運(yùn)行,則可以判定被測線程出現(xiàn)了死循環(huán),本示例中,第二預(yù)設(shè)時(shí)長為一小時(shí)。需要說明的是,本發(fā)明實(shí)施例對(duì)第二預(yù)設(shè)時(shí)長、重復(fù)運(yùn)行的次數(shù)等可不做限定,具體可由實(shí)際應(yīng)用情況而定。
綜上,本發(fā)明方案基于被測線程的運(yùn)行時(shí)長、運(yùn)行代碼行,便可實(shí)現(xiàn)死循環(huán)檢測,相對(duì)現(xiàn)有技術(shù)具有簡單易行、節(jié)省時(shí)間和系統(tǒng)資源等優(yōu)點(diǎn)。
作為本發(fā)明方案的一種示例,在判斷被測線程出現(xiàn)死循環(huán)后,本發(fā)明的死循環(huán)檢測裝置還可以簡單快速的根據(jù)被重復(fù)運(yùn)行的代碼行實(shí)現(xiàn)死循環(huán)定位。如上文所舉示例中,即可將死循環(huán)定位到第20~25行代碼。相對(duì)現(xiàn)有技術(shù)需要不斷調(diào)用鉤子函數(shù)進(jìn)行死循環(huán)定位的方案,本發(fā)明方案更為簡單,且節(jié)省系統(tǒng)資源。
需要說明的是,如果死循環(huán)檢測裝置按照本發(fā)明方案,確定被測線程未出現(xiàn)死循環(huán),則可以繼續(xù)累計(jì)被測線程的運(yùn)行時(shí)長,以及記錄被測線程運(yùn)行的代碼行,為后續(xù)的死循環(huán)檢測過程提供技術(shù)支持。
與圖1所示方法相對(duì)應(yīng),本發(fā)明實(shí)施例還提供一種死循環(huán)檢測裝置200,參見圖2所示示意圖,所述裝置可以包括:
運(yùn)行時(shí)長獲取單元201,用于獲取被測線程的運(yùn)行時(shí)長;
第一判斷單元202,用于判斷所述運(yùn)行時(shí)長獲取單元獲取的運(yùn)行時(shí)長是否超出第一預(yù)設(shè)時(shí)長;
第二判斷單元203,用于在所述第一判斷單元判定所述運(yùn)行時(shí)長超出所述第一預(yù)設(shè)時(shí)長時(shí),判斷被測線程是否在第二預(yù)設(shè)時(shí)長內(nèi)存在被重復(fù)運(yùn)行的代碼行;
死循環(huán)確定單元204,用于在所述第二判斷單元判定所述被測線程存在被重復(fù)運(yùn)行的代碼行時(shí),確定所述被測線程出現(xiàn)死循環(huán)。
可選地,所述死循環(huán)檢測裝置按照預(yù)定周期定時(shí)啟動(dòng)。
可選地,當(dāng)所述被測線程處于運(yùn)行狀態(tài)時(shí),所述被測線程的運(yùn)行時(shí)長為當(dāng)前時(shí)間與所述死循環(huán)檢測裝置的啟動(dòng)時(shí)間之差。
可選地,所述裝置還包括:死循環(huán)定位單元,用于根據(jù)所述被重復(fù)運(yùn)行的代碼行進(jìn)行死循環(huán)定位。
可選地,獲取單元,用于在確定所述被測線程未出現(xiàn)死循環(huán)時(shí),繼續(xù)獲取所述被測線程的運(yùn)行時(shí)長以及運(yùn)行的代碼行。
關(guān)于上述實(shí)施例中的裝置,其中各個(gè)單元執(zhí)行操作的具體方式已經(jīng)在有關(guān)該方法的實(shí)施例中進(jìn)行了詳細(xì)描述,此處將不做詳細(xì)闡述說明。
以上結(jié)合附圖詳細(xì)描述了本發(fā)明的優(yōu)選實(shí)施方式,但是,本發(fā)明并不限于上述實(shí)施方式中的具體細(xì)節(jié),在本發(fā)明的技術(shù)構(gòu)思范圍內(nèi),可以對(duì)本發(fā)明的技術(shù)方案進(jìn)行多種簡單變型,這些簡單變型均屬于本發(fā)明的保護(hù)范圍。
另外需要說明的是,在上述具體實(shí)施方式中所描述的各個(gè)具體技術(shù)特征,在不矛盾的情況下,可以通過任何合適的方式進(jìn)行組合,為了避免不必要的重復(fù),本發(fā)明對(duì)各種可能的組合方式不再另行說明。
此外,本發(fā)明的各種不同的實(shí)施方式之間也可以進(jìn)行任意組合,只要其不違背本發(fā)明的思想,其同樣應(yīng)當(dāng)視為本發(fā)明所公開的內(nèi)容。