本發明專利技術實施例提供了一種線程死循環檢測方法和裝置,涉及計算機領域,用于解決在Linux系統的公平調度模型中根據請求響應的查詢方法會消耗被檢測線程資源的問題。該線程死循環檢測方法,應用于Linux系統的公平調度模型,方法包括:分別統計在[1,M]周期內的中央處理單元CPU內核利用率,M為正整數且M>1;如果在[1,N]周期內的CPU內核利用率均大于第一門限,則獲取[1,N]周期內的CPU占用率最高的線程作為關注線程,N為正整數且1<N<M;分別統計在[N,M]周期內關注線程的CPU占用率;如果在[N,M]周期內的CPU內核利用率均大于第一門限,并且關注線程的CPU占用率均大于第二門限,則確定關注線程為死循環線程。本發明專利技術實施例應用于線程死循環檢測。
【技術實現步驟摘要】
本專利技術涉及計算機領域,尤其涉及一種線程死循環檢測方法和裝置。
技術介紹
在Linux操作系統中,通常采用公平調度模型,在檢測線程死循環時,通常采用請求響應的查詢方法,即創建檢測線程,該檢測線程周期性向其他所有線程發送查詢消息等待其他線程響應回復消息,如果在幾個查詢周期中,檢測線程都未收到某個線程的回復消息,則認為該線程出現了死循環。其中,完全公平調度(CFS,completelyfailschedule)為Linux系統進程/線程調度器的一種調度方法,特點是根據各個調度對象的權重來分配運行時間;死循環是指多線程系統中,某個線程一直在運行一小段邏輯,沒有跳出該段邏輯,去執行線程應該運行的其他正常邏輯。此種情況為線程軟件中不正?,F場,需要排查軟件錯誤并解決。但是上述方案會為被檢測線程帶來額外系統開銷,因為被檢測線程需要消耗時間片用于接收并回復查詢消息。
技術實現思路
本專利技術的實施例提供一種線程死循環檢測方法和裝置,用于解決在Linux系統的公平調度模型中根據請求響應的查詢方法會消耗被檢測線程資源的問題。為達到上述目的,本專利技術的實施例采用如下技術方案:第一方面,提供了一種線程死循環檢測方法,應用于Linux系統的公平調度模型,該方法包括:分別統計在[1,M]周期內的中央處理單元CPU內核利用率,M為正整數且M>1;如果在[1,N]周期內的CPU內核利用率均大于第一門限,則獲取所述[1,N]周期內的CPU占用率最高的線程作為關注線程,N為正整數且1<N<M;分別統計在[N,M]周期內所述關注線程的CPU占用率;如果在所述[N,M]周期內的CPU內核利用率均大于第一門限,并且所述關注線程的CPU占用率均大于第二門限,則確定所述關注線程為死循環線程。第二方面,提供了一種線程死循環檢測裝置,應用于Linux系統的公平調度模型,該裝置包括:統計單元,用于分別統計在[1,M]周期內的中央處理單元CPU內核利用率,M為正整數且M>1;獲取單元,用于如果在[1,N]周期內的CPU內核利用率均大于第一門限,則獲取所述[1,N]周期內的CPU占用率最高的線程作為關注線程,N為正整數且1<N<M;所述統計單元,還用于分別統計在[N,M]周期內所述關注線程的CPU占用率;確定單元,用于如果在所述[N,M]周期內的CPU內核利用率均大于第一門限,并且所述關注線程的CPU占用率均大于第二門限,則確定所述關注線程為死循環線程。本專利技術的實施例提供的線程死循環檢測方法和裝置,通過檢測CPU(centralprocessingunit,中央處理單元)內核利用率來判斷可能發生死循環的時機,當內核利用率持續較高時檢測各個線程的CPU占用率,將CPU占用率持續較高的線程判定為死循環線程,因為是通過檢測內核利用率和CPU占用率來檢測線程死循環,不必與被檢測線程通信交互,解決了在Linux系統的公平調度模型中根據請求響應的查詢方法會消耗被檢測線程資源的問題。附圖說明為了更清楚地說明本專利技術實施例或現有技術中的技術方案,下面將對實施例或現有技術描述中所需要使用的附圖作簡單地介紹,顯而易見地,下面描述中的附圖僅僅是本專利技術的一些實施例,對于本領域普通技術人員來講,在不付出創造性勞動的前提下,還可以根據這些附圖獲得其他的附圖。圖1為本專利技術的實施例提供的一種線程死循環檢測方法的流程示意圖;圖2為本專利技術的實施例提供的一種統計在[1,M]周期內的CPU內核利用率的流程示意圖;圖3為本專利技術的實施例提供的一種獲取[1,N]周期內的CPU占用率最高的線程作為關注線程的流程示意圖;圖4為本專利技術的實施例提供的一種統計在[N,M]周期內關注線程的CPU占用率的流程示意圖;圖5為本專利技術的實施例提供的一種線程死循環檢測裝置的結構示意圖。具體實施方式下面將結合本專利技術實施例中的附圖,對本專利技術實施例中的技術方案進行清楚、完整地描述,顯然,所描述的實施例僅僅是本專利技術一部分實施例,而不是全部的實施例。基于本專利技術中的實施例,本領域普通技術人員在沒有做出創造性勞動前提下所獲得的所有其他實施例,都屬于本專利技術保護的范圍。本專利技術實施例提供的線程死循環檢測方法和裝置,通過單獨線程檢測CPU(centralprocessingunit,中央處理單元)內核利用率,當內核利用率較高時檢測線程的CPU占用率,將CPU占用率持續較高的線程判定為死循環線程,不必與被檢測線程通信交互,解決了在Linux系統的公平調度模型中根據請求響應的查詢方法會消耗被檢測線程資源的問題。實施例1、本專利技術實施例提供了一種線程死循環檢測方法,應用于Linux系統的公平調度模型,參照圖1中所示,該方法包括步驟S101-S104:S101、分別統計在[1,M]周期內的CPU內核利用率,M為正整數且M>1。在這里將M個周期的檢測作為一輪,可以在滿足一定條件時提前中止本輪檢測。另外,可以在系統初始化時新建單獨的檢測線程,用于對業務線程進行檢測。對于多核CPU可以分別獲取每個內核的CPU內核利用率。優選的,每個周期的時間長度可以為20秒,M可以為9。具體的,參照圖2中所示,步驟S101可以包括:S1011-S1012。S1011、在[1,M]周期內的第i個周期的起始時刻讀取/proc/stat文件,以獲取第i個周期的CPU內核運行時間;在第i+1個周期的起始時刻讀取/proc/stat文件,以獲取第i+1個周期的CPU內核運行時間,1≤i<M。在Linux系統中每個/proc/stat會統計當前CPU各個內核運行時間,此處的內核運行時間為絕對時間值,例如2000001秒。S1012、根據(第i+1個周期的CPU內核運行時間-第i個周期CPU的內核運行時間)/每個周期時間長度得到第i個周期的CPU內核利用率。即根據第i+1個周期的CPU內核運行時間減去第i個周期CPU的內核運行時間的差除以每個周期時間長度得到第i個周期的CPU內核利用率。示例性的,對于每個周期的時間長度為20秒時,可以根據(20秒時CPU內核運行時間-0秒時CPU內核運行時間)/20秒得到第一個周期的CPU內核利用率。S102、如果在[1,N]周期內的CPU內核利用率均大于第一門限,則獲取[1,N]周期內的CPU占用率最高的線程作為關注線程,N為正整數且1<N<M。優選的,第一門限為95%,N為2。在[1,N]周期內CPU內核利用率均大于第一門限時,可能在該內核上存在死循環任務,也可能是正常任務因為計算量較大而需要占用較高的CPU內核利用率。如果在[1,N]周期內的任一周期中出現CPU內核利用率小于第一門限,則可以確定是正常任務結束使得CPU內核利用率降低,因此退出本輪檢測,重新開始新一輪的檢測,即重新開始步驟S101。具體的,參照圖3中所示,獲取[1,N]周期內的CPU占用率最高的線程作為關注線程可以包括步驟S1021-S1023:S1021、在[1,N]周期內的第N-1個周期的結束時刻讀取/proc/PID/stat文件,以獲取所有線程在第N-1個周期的運行時間;在第N個周期的結束時刻讀取/proc/PID/stat文件,以獲取所有線程在第N個周期的運行時間。具體的,對于每個線程本文檔來自技高網...

【技術保護點】
一種線程死循環檢測方法,應用于Linux系統的公平調度模型,其特征在于,所述方法包括:分別統計在[1,M]周期內的中央處理單元CPU內核利用率,M為正整數且M>1;如果在[1,N]周期內的CPU內核利用率均大于第一門限,則獲取所述[1,N]周期內的CPU占用率最高的線程作為關注線程,N為正整數且1<N<M;分別統計在[N,M]周期內所述關注線程的CPU占用率;如果在所述[N,M]周期內的CPU內核利用率均大于第一門限,并且所述關注線程的CPU占用率均大于第二門限,則確定所述關注線程為死循環線程。
【技術特征摘要】
1.一種線程死循環檢測方法,應用于Linux系統的公平調度模型,其特征在于,所述方法包括:分別統計在[1,M]周期內的中央處理單元CPU內核利用率,M為正整數且M>1;如果在[1,N]周期內的CPU內核利用率均大于第一門限,則獲取所述[1,N]周期內的CPU占用率最高的線程作為關注線程,N為正整數且1<N<M;分別統計在[N,M]周期內所述關注線程的CPU占用率;如果在所述[N,M]周期內的CPU內核利用率均大于第一門限,并且所述關注線程的CPU占用率均大于第二門限,則確定所述關注線程為死循環線程。2.根據權利要求1所述的方法,其特征在于,所述分別統計在[1,M]周期內中央處理單元CPU內核利用率,包括:在所述[1,M]周期內的第i個周期的起始時刻讀取/proc/stat文件,以獲取所述第i個周期的CPU內核運行時間;在第i+1個周期的起始時刻讀取/proc/stat文件,以獲取所述第i+1個周期的CPU內核運行時間,1≤i<M;根據第i+1個周期的CPU內核運行時間減去第i個周期CPU的內核運行時間的差除以每個周期時間長度得到所述第i個周期的CPU內核利用率。3.根據權利要求1所述的方法,其特征在于,所述獲取所述[1,N]周期內的CPU占用率最高的線程作為關注線程,包括:在所述[1,N]周期內的第N-1個周期的結束時刻讀取/proc/PID/stat文件,以獲取所有線程在所述第N-1個周期的運行時間;在第N個周期的結束時刻讀取/proc/PID/stat文件,以獲取所有線程在所述第N個周期的運行時間;將各個線程的第N個周期的運行時間減去第N-1個周期的運行時間得到所述各個線程的時間差值;獲取所述各個線程的時間差值中的最大值,將最大值對應的線程作為關注線程。4.根據權利要求1所述的方法,其特征在于,所述分別統計在[N,M]周期內所述關注線程的CPU占用率,包括:在所述[N,M]周期內的第j-1個周期的結束時刻讀取/proc/PID/stat文件,以獲取所述關注線程在所述第j-1個周期的運行時間;在第j個周期的結束時刻讀取/proc/PID/stat文件,以獲取所述關注線程在所述第j個周期的運行時間,N<j≤M;根據所述關注線程在所述第j個周期的運行時間減去所述關注線程在所述第j-1個周期的運行時間的差除以每個周期時間長度得到所述...
【專利技術屬性】
技術研發人員:姚勇軍,
申請(專利權)人:邁普通信技術股份有限公司,
類型:發明
國別省市:四川;51
還沒有人留言評論。發表了對其他瀏覽者有用的留言會獲得科技券。