[發明專利]程序死鎖的測試方法、裝置和設備有效
| 申請號: | 201811402704.6 | 申請日: | 2018-11-22 |
| 公開(公告)號: | CN109669858B | 公開(公告)日: | 2022-04-12 |
| 發明(設計)人: | 郭祥斌 | 申請(專利權)人: | 新華三技術有限公司合肥分公司 |
| 主分類號: | G06F11/36 | 分類號: | G06F11/36;G06F9/52 |
| 代理公司: | 北京超凡志成知識產權代理事務所(普通合伙) 11371 | 代理人: | 王艷芬 |
| 地址: | 230000 安徽省合肥市高新區創*** | 國省代碼: | 安徽;34 |
| 權利要求書: | 查看更多 | 說明書: | 查看更多 |
| 摘要: | |||
| 搜索關鍵詞: | 程序 死鎖 測試 方法 裝置 設備 | ||
本公開提供了一種程序死鎖的測試方法、裝置和設備,在被測試程序啟動后,通過偵聽被測試程序中線程的處理指令的方法,記錄各個線程的用于表征該線程加鎖與解鎖流程的鎖對象信息序列,并在被測試程序停止運行后,獲取各個線程的鎖對象信息序列包含的帶有嵌套關系的最簡加鎖序列,然后根據該最簡加鎖序列繪制有向圖,從而根據該有向圖確定被測試程序的死鎖信息。該方式通過自動收集被測試程序運行中死鎖隱患的相關數據,以該相關數據為依據利用有向圖確定相應程序的死鎖信息,從而實現了死鎖隱患的自動檢測,有效提高了發現死鎖隱患的概率。
技術領域
本公開涉及計算機技術領域,尤其是涉及程序死鎖的測試方法、裝置和設備。
背景技術
Java是目前最流行的編程語言之一,在全球有非常多的大型服務程序(如Web程序)采用Java作為主要編程語言。Java語言編寫的程序被編譯為字節碼后,由JVM(JavaVirtual Machine,Java虛擬機)負責解釋執行。
Java語言支持多線程機制,一般大型服務程序的開發者在書寫Java程序時,都會編寫代碼啟動多個不同的線程來并發地完成任務。如果程序開發者編寫的代碼,采用了不恰當的線程間同步機制,例如參見圖1,如果線程T1已加鎖lock1(lock1為鎖對象標識),然后再請求加鎖lock2(lock2為鎖對象標識),然后才能執行一個事務;此時如果lock2已被線程T2占用,線程T1就會停止執行,等待線程T2釋放lock2;如果線程T2在持有鎖lock2期間,期望加鎖lock1,就必須等待線程T1釋放lock1,此時線程T2就會停止執行,等待T1釋放lock1;從上述描述看,T1和T2都會停止執行,且永遠沒有時機再恢復執行,從而導致死鎖現象。
死鎖現象一旦發生,服務程序就有很大可能無法繼續正常提供服務。現有技術中通常在程序發布前,對程序進行評審以檢查程序中的死鎖問題,由于大型程序的設計和編碼都比較復雜,存在隱患的代碼的調用關系也非常龐大,通過肉眼發現死鎖隱患的概率較低。
發明內容
有鑒于此,本公開的目的在于提供一種程序死鎖的測試方法、裝置和設備,以實現死鎖隱患的自動檢測,有效提高發現死鎖隱患的概率。
為了實現上述目的,本公開采用的技術方案如下:
第一方面,本公開提供了一種程序死鎖的測試方法,包括:在被測試程序啟動后,偵聽被測試程序中的線程的處理指令;如果偵聽到該線程的鎖指令,記錄該線程的鎖對象信息序列;其中,該鎖指令包括加鎖指令和解鎖指令;該鎖對象信息序列包括:該加鎖指令對應的加鎖對象信息和該解鎖指令對應的解鎖對象信息;當被測試程序停止運行時,獲取上述各個線程的鎖對象信息序列中的最簡加鎖序列;其中,該最簡加鎖序列為帶有嵌套關系的加鎖對象序列;將各個線程的最簡加鎖序列中相同的最簡加鎖序列合并;繪制合并后的最簡加鎖序列的有向圖;基于繪制出的有向圖確定被測試程序的死鎖信息。
第二方面,本公開提供了一種程序死鎖的測試裝置,包括:指令偵聽模塊,用于在被測試程序啟動后,偵聽被測試程序中的線程的處理指令;信息記錄模塊,用于當偵聽到線程的鎖指令時,記錄該線程的鎖對象信息序列;其中,該鎖指令包括加鎖指令和解鎖指令;該鎖對象信息序列包括:該加鎖指令對應的加鎖對象信息和該解鎖指令對應的解鎖對象信息;序列獲取模塊,用于當被測試程序停止運行時,獲取上述各個線程的鎖對象信息序列中的最簡加鎖序列;其中,該最簡加鎖序列為帶有嵌套關系的加鎖對象序列;序列合并模塊,用于將各個線程的最簡加鎖序列中相同的最簡加鎖序列合并;繪制模塊,用于繪制合并后的最簡加鎖序列的有向圖;死鎖確定模塊,用于基于繪制出的有向圖確定被測試程序的死鎖信息。
第三方面,本公開實施方式提供了一種程序死鎖的測試設備,包括處理器和機器可讀存儲介質,所述機器可讀存儲介質存儲有能夠被所述處理器執行的機器可執行指令,所述處理器執行所述機器可執行指令以實現上述方法。
該專利技術資料僅供研究查看技術是否侵權等信息,商用須獲得專利權人授權。該專利全部權利屬于新華三技術有限公司合肥分公司,未經新華三技術有限公司合肥分公司許可,擅自商用是侵權行為。如果您想購買此專利、獲得商業授權和技術合作,請聯系【客服】
本文鏈接:http://www.szxzyx.cn/pat/books/201811402704.6/2.html,轉載請聲明來源鉆瓜專利網。
- 上一篇:一種自動化測試方法
- 下一篇:服務測試方法、裝置、計算機設備和存儲介質





