• / 23
  • 下載費用:30 金幣  

一種死鎖檢測方法、設備及系統.pdf

關 鍵 詞:
一種 死鎖 檢測 方法 設備 系統
  專利查詢網所有資源均是用戶自行上傳分享,僅供網友學習交流,未經上傳用戶書面授權,請勿作他用。
摘要
申請專利號:

CN201310631872.3

申請日:

2013.11.29

公開號:

CN103678122A

公開日:

2014.03.26

當前法律狀態:

授權

有效性:

有權

法律詳情: 授權|||實質審查的生效IPC(主分類):G06F 11/36申請日:20131129|||公開
IPC分類號: G06F11/36; G06F9/46 主分類號: G06F11/36
申請人: 華為技術有限公司
發明人: 岳亮
地址: 518129 廣東省深圳市龍崗區坂田華為總部辦公樓
優先權:
專利代理機構: 北京三高永信知識產權代理有限責任公司 11138 代理人: 黃厚剛
PDF完整版下載: PDF下載
法律狀態
申請(專利)號:

CN201310631872.3

授權公告號:

||||||

法律狀態公告日:

2016.03.30|||2014.04.23|||2014.03.26

法律狀態類型:

授權|||實質審查的生效|||公開

摘要

本發明公開了一種死鎖檢測方法、設備及系統,屬于集群技術領域。所述方法包括:接收第一線程客戶設備對第一鎖的申請;根據所述申請向集群鎖管理器發送授權請求,申請所述第一鎖的授權;接收到所述集群鎖管理器返回的等待消息;查詢本地的鎖申請實時記錄,若發現所述第一線程客戶設備持有第二鎖,則在集群內發起所述第一鎖的依賴路徑回溯查找;根據所述依賴路徑回溯查找的結果判定是否形成死鎖。本發明在線程客戶設備申請某個鎖被掛起時,由代理服務器查找該線程客戶設備是否已經持有另一個鎖,并在發現該線程客戶設備已持有另一鎖時,發起該線程客戶設備申請的鎖的依賴路徑回溯查找,不僅實現了對死鎖的實時檢測,而且方法簡單高效。

權利要求書

權利要求書
1.  一種死鎖檢測方法,用于代理服務器,所述代理服務器與集群鎖管理器及第一線程客戶設備之間分別建立通信連接,其特征在于,所述方法包括:
接收所述第一線程客戶設備對第一鎖的申請;
根據所述申請向所述集群鎖管理器發送授權請求,申請所述第一鎖的授權;
接收所述集群鎖管理器返回的等待消息;
查詢本地的鎖申請實時記錄,若查詢到所述第一線程客戶設備持有第二鎖,則在集群內發起所述第一鎖的依賴路徑回溯查找;
根據所述依賴路徑回溯查找的結果判定是否形成死鎖。

2.  根據權利要求1所述的方法,其特征在于,所述查詢本地的鎖申請實時記錄,包括:
根據所述第一線程客戶設備的線程身份標識號碼ID,在所述鎖申請實時記錄中查詢所述第一線程客戶設備是否持有所述第二鎖。

3.  根據權利要求1所述的方法,其特征在于,所述在集群內發起所述第一鎖的依賴路徑回溯查找,包括:
查找所述第一鎖是否有依賴路徑;
若所述第一鎖無依賴路徑,或者所述第一鎖有依賴路徑且所述依賴路徑中的依賴鎖為所述第二鎖,則結束所述依賴路徑回溯查找;
若所述第一鎖有依賴路徑,且所述依賴路徑中的依賴鎖不是所述第二鎖,則進行所述依賴鎖的依賴路徑回溯查找。

4.  根據權利要求3所述的方法,其特征在于,所述查找所述第一鎖是否有依賴路徑,包括:
向所述集群鎖管理器查詢所述第一鎖的授權代理服務器;
接收所述集群鎖管理器返回的所述授權代理服務器的相關信息;
根據所述相關信息向所述授權代理服務器查詢所述第一鎖是否有授權線程客戶設備以及所述授權線程客戶設備是否正在申請另一個鎖;
接收所述授權代理服務器反饋的查詢結果;
根據所述查詢結果判斷所述第一鎖是否有依賴路徑:若所述第一鎖有授權線程客戶設備且所述授權線程客戶設備正在申請另一個鎖,則判定所述第一鎖有依賴路徑,否則判定所述第一鎖無依賴路徑。

5.  根據權利要求4所述的方法,其特征在于,所述根據所述相關信息向所述授權代理服務器查詢所述第一鎖是否有授權線程客戶設備以及所述授權線程客戶設備是否正在申請另一個鎖之后,還包括:
所述授權代理服務器接收攜帶所述第一鎖的相關信息的查詢請求;
所述授權代理服務器根據所述查詢請求攜帶的所述第一鎖的相關信息在其鎖申請實時記錄中查找所述第一鎖的授權線程客戶;
所述授權代理服務器根據所述授權線程客戶設備的線程ID在其鎖申請實時記錄中查詢所述授權線程客戶是否正在申請另一鎖;
所述授權代理服務器將查詢結果進行反饋。

6.  根據權利要求3至5任一項所述的方法,其特征在于,所述根據所述依賴路徑回溯查找的結果判定是否形成了死鎖,包括:
根據所述依賴路徑回溯查找結束的原因判斷是否形成了死鎖:
若所述依賴路徑回溯查找結束的原因包括:所述第一鎖或某個依賴鎖無依賴路徑,則判定未形成死鎖;
若所述依賴路徑回溯查找結束的原因包括:所述第一鎖或某個依賴鎖有依賴路徑,且所述依賴路徑中的依賴鎖為所述第二鎖,則判定形成死鎖。

7.  根據權利要求1所述的方法,其特征在于,所述方法還包括:
如果根據所述依賴路徑回溯查找的結果判定形成死鎖,則駁回所述第一線程客戶設備對第一鎖的授權申請,通知所述第一線程客戶設備釋放對所述第二鎖的占用。

8.  一種代理服務器,其特征在于,包括:
接收單元,用于接收第一線程客戶設備對第一鎖的申請;
發送單元,用于根據所述接收單元接收的申請向集群鎖管理器發送授權請求,申請所述第一鎖的授權;
所述接收單元,還用于在所述發送單元向集群鎖管理器發送授權請求之后,接收所述集群鎖管理器返回的等待消息;
回溯查找單元,用于在所述接收單元收到所述等待消息之后,查詢本地的鎖申請實時記錄,若查詢到所述第一線程客戶設備持有第二鎖,則在集群內發起所述第一鎖的依賴路徑回溯查找;
死鎖判定單元,用于根據所述回溯查找單元的查找結果判定是否形成了死鎖。

9.  根據權利要求8所述的代理服務器,其特征在于,還包括:
存儲單元,用于存儲線程客戶設備的鎖申請實時記錄;
所述回溯查找單元用于,根據所述第一線程客戶設備的線程身份標識號碼ID,在所述存儲單元存儲的鎖申請實時記錄中查詢所述第一線程客戶設備是否持有所述第二鎖。

10.  根據權利要求8所述的代理服務器,其特征在于,所述回溯查找單元包括:
查詢模塊,用于在所述接收單元收到所述等待消息之后,查詢所述存儲單元存儲的鎖申請實時記錄;
依賴查找模塊,用于在所述查詢模塊查找到所述第一線程客戶設備持有所述第二鎖時,查找第一鎖是否有依賴路徑;若所述第一鎖無依賴路徑,或者所述第一鎖有依賴路徑且所述依賴路徑中的依賴鎖為所述第二鎖,則結束所述依賴路徑回溯查找;若所述第一鎖有依賴路徑,且所述依賴路徑中的依賴鎖不是所述第二鎖,則進行所述依賴鎖的依賴路徑回溯查找。

11.  根據權利要求10所述的代理服務器,其特征在于,所述依賴查找模塊包括:
獲取子模塊,用于向所述集群鎖管理器查詢所述第一鎖的授權代理服務器,接收所述集群鎖管理器返回的所述授權代理服務器的相關信息;
查詢子模塊,用于根據所述獲取子模塊接收的所述相關信息,向所述授權代理服務器查詢所述第一鎖是否有授權線程客戶設備,以及所述授權線程客戶設備是否正在申請另一個鎖,并接收所述授權代理服務器反饋的查詢結果;
依賴路徑確定子模塊,用于根據所述查詢子模塊接收的查詢結果判斷所述第一鎖是否有依賴路徑:若所述第一鎖有授權線程客戶設備且所述授權線程客戶設備正在申請另一個鎖,則判定所述第一鎖有依賴路徑,否則判定所述第一鎖無依賴路徑。

12.  根據權利要求10或11所述的代理服務器,其特征在于,所述死鎖判定單元用于,在所述依賴查找模塊結束所述依賴路徑回溯查找之后,根據所述依賴路徑回溯查找結束的原因判斷是否形成了死鎖:若所述依賴路徑回溯查找結束的原因包括:所述第一鎖或某個依賴鎖無依賴路徑,則判定未形成死鎖;若所述依賴路徑回溯查找結束的原因包括:所述第一鎖或某個依賴鎖有依賴路徑,且所述依賴路徑中的依賴鎖為所述第二鎖,則判定形成死鎖。

13.  根據權利要求8所述的代理服務器,其特征在于,所述代理服務器還包括:
死鎖處理單元,用于在所述死鎖判定單元判定形成死鎖后駁回所述第一線程客戶設備對第一鎖的授權申請,并通知第一線程客戶設備釋放對第二鎖的占用。

14.  根據權利要求13所述的代理服務器,其特征在于,
所述接收單元,還用于接收另一代理服務器發送的查詢請求,所述查詢請求攜帶需查詢的鎖的相關信息;
所述回溯查找單元,還用于在所述接收單元接收到所述查詢請求后,根據所述鎖的相關信息,在所述存儲單元存儲的鎖申請實時記錄中查找所述鎖的授權線程客戶設備;以及用于根據所述授權線程客戶設備的線程ID在所述鎖申請實時記錄中查詢所述授權線程客戶設備是否正在申請另一鎖;
所述發送單元,還用于將所述回溯查找單元的查找結果發送給所述另一代理服務器。

15.  一種死鎖檢測系統,其特征在于,包括:
第一線程客戶設備,用于發送對第一鎖的申請;
第一代理服務器,所述第一代理服務器包括如權利要求8至14任一項所述的代理服務器,用于接收所述第一線程客戶設備對第一鎖的申請,根據所述申請向集群鎖管理器發送授權請求,申請所述第一鎖的授權,接收所述集群鎖管理器返回的等待消息,查詢本地的鎖申請實時記錄,若查詢到所述第一線程客戶設備持有第二鎖,則在集群內發起所述第一鎖的依賴路徑回溯查找,根據所述依賴路徑回溯查找的結果判定是否形成了死鎖;
集群鎖管理器,用于接收所述第一代理服務器發送的所述授權請求,向所述第一代理服務器返回授權或等待消息。

16.  根據權利要求15所述的系統,其特征在于,
所述第一代理服務器用于,向所述集群鎖管理器查詢所述第一鎖的授權代理服務器,接收所述集群鎖管理器返回的所述授權代理服務器的相關信息,根據所述相關信息向所述授權代理服務器查詢所述第一鎖是否有授權線程客戶設備以及所述授權線程客戶設備是否正在申請另一個鎖,接收所述授權代理服務器反饋的查詢結果,根據所述查詢結果判斷所述第一鎖是否有依賴路徑:若所述第一鎖有授權線程客戶設備且所述授權線程客戶設備正在申請另一個鎖,則判定所述第一鎖有依賴路徑,否則判定所述第一鎖無依賴路徑;
所述集群鎖管理器還用于,當所述第一代理服務器查詢所述第一鎖的授權代理服務器時,返回所述授權代理服務器的相關信息給所述第一代理服務器;
所述系統還包括:
授權代理服務器,所述授權代理服務器包括如權利要求8至14任一項所述的代理服務器,用于當所述第一代理服務器查詢所述第一鎖是否有授權線程客戶設備以及所述授權線程客戶設備是否正在申請另一個鎖時,返回查詢結果給所述第一代理服務器。

說明書

說明書一種死鎖檢測方法、設備及系統
技術領域
本發明涉及集群技術領域,特別涉及一種死鎖檢測方法、設備及系統。
背景技術
集群是一種對外表現為具有高可用性、高性能和易管理性的單一、統一的計算資源。在對集群性能的追求過程中,分布式集群應運而生。為保障集群的一致性,集群鎖必不可少。在二級授權分布式鎖的實現中有三個實體:集群Master(鎖管理器)、本地Proxy(代理服務器)、線程客戶設備。以n節點的集群為例,每個節點均有一個Proxy(即本地Proxy);線程客戶設備是鎖的申請者,以Tread(線程)號為標識,可以向本節點的Proxy申請多個鎖;Master負責集群內各鎖的分發授權,仲裁不同節點Proxy的鎖申請,將鎖授權給合適的某個集群節點Proxy,并對上述授權信息進行管理;本地Proxy負責代理、收集本節點內所有線程客戶設備的鎖申請,并向Master發送申請,獲得Master授權的本地Proxy可以再向合適的客戶進行二次授權。如果線程客戶設備(Thread)持有一個鎖(即已經得到了一個鎖的授權),當其申請另一個鎖得不到授權被掛起時,就形成了依賴路徑,如果此依賴路徑環回到發起節點,則形成閉環,即形成死鎖,如圖1所示。在分布式集群領域,死鎖是非常致命的問題,因此在如何實現在分布式死鎖檢測便顯得十分重要。
現有技術的死鎖檢測方法通常采用超時法對集群內的進程進行檢測,即當某個線程客戶設備等待的時間超過規定時間,就認為發生了死鎖。
在實現本發明的過程中,發明人發現現有技術至少存在以下問題:
現有技術的死鎖檢測方法實時性差,不適用于分布集群環境。
發明內容
本發明實施例提供了一種死鎖檢測方法、設備及系統,可以檢測死鎖。
第一方面,提供了一種死鎖檢測方法,用于代理服務器,所述代理服務器 與集群鎖管理器及第一線程客戶設備之間分別建立通信聯系,所述方法包括:接收第一線程客戶設備對第一鎖的申請;根據所述申請向集群鎖管理器發送授權請求,申請所述第一鎖的授權;接收到所述集群鎖管理器返回的等待消息;查詢本地的鎖申請實時記錄,若查詢到所述第一線程客戶設備持有第二鎖,則在集群內發起所述第一鎖的依賴路徑回溯查找;根據所述依賴路徑回溯查找的結果判定是否形成死鎖。
結合第一方面,在第一方面的第一種可能的實現方式中,所述查詢本地的鎖申請實時記錄,包括:根據所述第一線程客戶設備的線程身份標識號碼ID在所述鎖申請實時記錄中查詢所述第一線程客戶設備是否持有所述第二鎖。
結合第一方面的第一種可能的實現方式,在第一方面的第二種可能的實現方式中,所述在集群內發起所述第一鎖的依賴路徑回溯查找,包括:查找所述第一鎖是否有依賴路徑;若所述第一鎖無依賴路徑,或者所述第一鎖有依賴路徑且所述依賴路徑中的依賴鎖為所述第二鎖,則結束所述依賴路徑回溯查找;若所述第一鎖有依賴路徑,且所述依賴路徑中的依賴鎖不是所述第二鎖,則進行所述依賴鎖的依賴路徑回溯查找。
結合第一方面的第二種可能的實現方式,在第一方面的第三種可能的實現方式中,所述查找所述第一鎖是否有依賴路徑,包括:向所述集群鎖管理器查詢所述第一鎖的授權代理服務器;接收所述集群鎖管理器返回的所述授權代理服務器的相關信息;根據所述相關信息向所述授權代理服務器查詢所述第一鎖是否有授權線程客戶設備以及所述授權線程客戶設備是否正在申請另一個鎖;接收所述授權代理服務器反饋的查詢結果;根據所述查詢結果判斷所述第一鎖是否有依賴路徑:若所述第一鎖有授權線程客戶設備且所述授權線程客戶設備正在申請另一個鎖,則判定所述第一鎖有依賴路徑,否則判定所述第一鎖無依賴路徑。
結合第一方面的第三種可能的實現方式,在第一方面的第四種可能的實現方式中,所述根據所述相關信息向所述授權代理服務器查詢所述第一鎖是否有授權線程客戶設備以及所述授權線程客戶設備是否正在申請另一個鎖之后,還包括:所述授權代理服務器接收攜帶所述第一鎖的相關信息的查詢請求;所述授權代理服務器根據所述查詢請求攜帶的所述第一鎖的相關信息在其鎖申請實 時記錄中查找所述第一鎖的授權線程客戶;所述授權代理服務器根據所述授權線程客戶設備的線程ID在其鎖申請實時記錄中查詢所述授權線程客戶是否正在申請另一鎖;所述授權代理服務器將查詢結果進行反饋。
結合第一方面的第二種至第四種任一種可能的實現方式,在第一方面的第五種可能的實現方式中,所述根據所述依賴路徑回溯查找的結果判定是否形成了死鎖,包括:根據所述依賴路徑回溯查找結束的原因判斷是否形成了死鎖:若所述依賴路徑回溯查找結束的原因包括:所述第一鎖或某個依賴鎖無依賴路徑,則判定未形成死鎖;若所述依賴路徑回溯查找結束的原因包括:所述第一鎖或某個依賴鎖有依賴路徑,且所述依賴路徑中的依賴鎖為所述第二鎖,則判定形成死鎖。
結合第一方面,在第一方面的第六種可能的實現方式中,如果根據所述依賴路徑回溯查找的結果判定形成死鎖,則駁回所述第一線程客戶設備對第一鎖的授權申請;通知所述第一線程客戶設備釋放對所述第二鎖的占用。
第二方面,提供一種代理服務器,包括:接收單元,用于接收第一線程客戶設備對第一鎖的申請;發送單元,用于根據所述接收單元接收的申請向集群鎖管理器發送授權請求,申請所述第一鎖的授權;所述接收單元,還用于在所述發送單元向集群鎖管理器發送授權請求之后,接收所述集群鎖管理器返回的等待消息;回溯查找單元,用于在所述接收單元收到所述等待消息之后,查詢本地的鎖申請實時記錄,若查詢到所述第一線程客戶設備持有第二鎖,則在集群內發起所述第一鎖的依賴路徑回溯查找;死鎖判定單元,用于根據所述回溯查找單元的查找結果判定是否形成了死鎖。
結合第二方面,在第二方面的第一種可能的實現方式中,還包括:存儲單元,用于存儲本地線程客戶設備的鎖申請實時記錄;所述回溯查找單元用于,根據所述第一線程客戶設備的線程身份標識號碼ID,在所述存儲單元中存儲的鎖申請實時記錄中查詢所述線程客戶設備是否持有所述第二鎖。
結合第二方面的第一種可能的實現方式,在第二方面的第二種可能的實現方式中,所述回溯查找單元包括:查詢模塊,用于在所述接收單元收到所述等待消息之后,查詢所述存儲單元存儲的鎖申請實時記錄;依賴查找模塊,用于在所述查詢模塊查找到所述第一線程客戶設備持有所述第二鎖時,查找第一鎖 是否有依賴路徑;若所述第一鎖無依賴路徑,或者所述第一鎖有依賴路徑且所述依賴路徑中的依賴鎖為所述第二鎖,則結束所述依賴路徑回溯查找;若所述第一鎖有依賴路徑,且所述依賴路徑中的依賴鎖不是所述第二鎖,則進行所述依賴鎖的依賴路徑回溯查找。
結合第二方面的第二種可能的實現方式,在第二方面的第三種可能的實現方式中,所述依賴查找模塊包括:獲取子模塊,用于向所述集群鎖管理器查詢所述第一鎖的授權代理服務器,接收所述集群鎖管理器返回的所述授權代理服務器的相關信息;查詢子模塊,還用于根據所述獲取子模塊接收的所述相關信息,向所述授權代理服務器查詢所述第一鎖是否有授權線程客戶設備以及所述授權線程客戶設備是否正在申請另一個鎖,并接收所述授權代理服務器反饋的查詢結果;依賴路徑確定子模塊,用于根據所述查詢子模塊接收的查詢結果判斷所述第一鎖是否有依賴路徑:若所述第一鎖有授權線程客戶設備且所述授權線程客戶設備正在申請另一個鎖,則判定所述第一鎖有依賴路徑,否則判定所述第一鎖無依賴路徑。
結合第二方面的第二種或第三種可能的實現方式,在第二方面的第四種可能的實現方式中,所述死鎖判定單元用于,在所述依賴查找模塊結束所述依賴路徑回溯查找之后,根據所述依賴路徑回溯查找結束的原因判斷是否形成了死鎖:若所述依賴路徑回溯查找結束的原因包括:所述第一鎖或某個依賴鎖無依賴路徑,則判定未形成死鎖;若所述依賴路徑回溯查找結束的原因包括:所述第一鎖或某個依賴鎖有依賴路徑,且所述依賴路徑中的依賴鎖為所述第二鎖,則判定形成死鎖。
結合第二方面的第第四種可能的實現方式,在第二方面的第五種可能的實現方式中,所述代理服務器還包括:死鎖處理單元,用于在所述死鎖判定單元判定形成死鎖后駁回所述第一線程客戶設備對第一鎖的授權申請,并通知第一線程客戶設備釋放對第二鎖的占用。
結合第二方面的第五種可能的實現方式,在第二方面的第六種可能的實現方式中,所述接收單元,還用于接收另一代理服務器發送的查詢請求,所述查詢請求攜帶需查詢的鎖的相關信息;所述回溯查找單元,還用于在所述接收單元接收到所述查詢請求后,根據所述鎖的相關信息,在所述存儲單元存儲的鎖申請實時記錄中查找所述鎖的授權線程客戶設備;以及用于根據所述授權線程 客戶設備的線程ID在所述本地鎖申請實時記錄中查詢所述授權線程客戶設備是否正在申請另一鎖;所述發送單元,還用于將所述回溯查找單元的查找結果發送給所述另一代理服務器。
第三方面,提供一種代理服務器,包括:接收機,用于接收第一線程客戶設備對第一鎖的申請;發送機,用于根據所述接收機接收的申請向集群鎖管理器發送授權請求,申請所述第一鎖的授權;所述接收機,還用于在所述發送單元向集群鎖管理器發送授權請求之后,接收所述集群鎖管理器返回的等待消息;處理器,用于在所述接收機收到所述等待消息之后,查詢本地的鎖申請實時記錄,若查詢到所述第一線程客戶設備持有第二鎖,則在集群內發起所述第一鎖的依賴路徑回溯查找;以及用于根據所述回溯查找單元的查找結果判定是否形成了死鎖。
結合第三方面,在第三方面的第一種可能的實現方式中,所述存儲器,用于存儲本地線程客戶設備的鎖申請實時記錄;所述處理器用于,根據所述第一線程客戶設備的線程身份標識號碼ID,在所述存儲器存儲的鎖申請實時記錄中,查詢所述線程客戶設備是否持有所述第二鎖。
結合第三方面的第一種可能的實現方式,在第三方面的第二種可能的實現方式中,所述處理器用于,在查找到所述第一線程客戶設備持有所述第二鎖時,查找所述第一鎖是否有依賴路徑;以及用于根據所述依賴路徑查找的結果判斷是否結束所述依賴路徑回溯查找:若所述第一鎖無依賴路徑,或者所述第一鎖有依賴路徑且所述依賴路徑中的依賴鎖為所述第二鎖,則結束所述依賴路徑回溯查找;若所述第一鎖有依賴路徑,且所述依賴路徑中的依賴鎖不是所述第二鎖,則進行所述依賴鎖的依賴路徑回溯查找。
結合第三方面的第二種可能的實現方式,在第三方面的第三種可能的實現方式中,所述發送機,還用于在查找所述第一鎖是否有依賴路徑時,向所述集群鎖管理器查詢所述第一鎖的授權代理服務器;所述接收機,還用于接收所述集群鎖管理器返回的所述授權代理服務器的相關信息;所述發送機,還用于根據所述接收機接收的所述相關信息向所述授權代理服務器查詢所述第一鎖是否有授權線程客戶設備以及所述授權線程客戶設備是否正在申請另一個鎖;所述接收機,還用于接收所述授權代理服務器反饋的查詢結果;所述處理器,還用 于根據所述接收機接收的查詢結果判斷所述第一鎖是否有依賴路徑:若所述第一鎖有授權線程客戶設備且所述授權線程客戶設備正在申請另一個鎖,則判定所述第一鎖有依賴路徑,否則判定所述第一鎖無依賴路徑。
結合第三方面的第二種或第三種可能的實現方式,在第三方面的第四種可能的實現方式中,所述處理器,還用于根據所述依賴路徑回溯的查找結果判斷是否形成了死鎖:若所述依賴路徑回溯查找結束的原因包括:所述第一鎖或某個依賴鎖無依賴路徑,則判定未形成死鎖;若所述依賴路徑回溯查找結束的原因包括:所述第一鎖或某個依賴鎖有依賴路徑,且所述依賴路徑中的依賴鎖為所述第二鎖,則判定形成死鎖。
結合第三方面的第第四種可能的實現方式,在第三方面的第五種可能的實現方式中,所述發送機,還用于在所述處理器判定形成死鎖后駁回所述第一線程客戶設備對第一鎖的授權申請,并通知第一線程客戶設備釋放對第二鎖的占用。
結合第三方面的第五種可能的實現方式,在第三方面的第六種可能的實現方式中,所述接收機,還用于接收另一代理服務器發送的查詢請求,所述查詢請求攜帶需查詢的鎖的相關信息;所述處理器,還用于在所述接收機接收到所述查詢請求后,根據所述鎖的相關信息,在所述鎖申請實時記錄中查找所述查詢請求中的鎖的授權線程客戶設備;以及用于根據所述授權線程客戶設備的線程ID在所述本地鎖申請實時記錄中查詢所述授權線程客戶設備是否正在申請另一鎖;所述發送機,還用于將所述處理器的查找結果發送給所述另一代理服務器。
第四方面,提供一種死鎖檢測系統,包括:所述第一線程客戶設備,用于向所述第一代理服務器發送對第一鎖的申請;第一代理服務器,包括如第二方面任一種可能的實現方式所述的代理服務器,用于接收所述第一線程客戶設備對第一鎖的申請,根據所述申請向集群鎖管理器發送授權請求,申請所述第一鎖的授權,接收所述集群鎖管理器返回的等待消息,查詢本地的鎖申請實時記錄,若查詢到所述第一線程客戶設備持有第二鎖,則在集群內發起所述第一鎖的依賴路徑回溯查找,根據所述依賴路徑回溯查找的結果判定是否形成了死鎖;集群鎖管理器,用于接收所述第一代理服務器發送的所述授權請求,向所述第 一代理服務器返回授權或等待消息。
結合第四方面,在第四方面的第一種可能的實現方式中,所述第一代理服務器用于,向所述集群鎖管理器查詢所述第一鎖的授權代理服務器,接收所述集群鎖管理器返回的所述授權代理服務器的相關信息,根據所述相關信息向所述授權代理服務器查詢所述第一鎖是否有授權線程客戶設備以及所述授權線程客戶設備是否正在申請另一個鎖,接收所述授權代理服務器反饋的查詢結果,根據所述查詢結果判斷所述第一鎖是否有依賴路徑:若所述第一鎖有授權線程客戶設備且所述授權線程客戶設備正在申請另一個鎖,則判定所述第一鎖有依賴路徑,否則判定所述第一鎖無依賴路徑;所述集群鎖管理器還用于,當所述第一代理服務器查詢所述第一鎖的授權代理服務器時,返回所述授權代理服務器的相關信息給所述第一代理服務器;所述系統還包括:授權代理服務器,包括如第二方面任一種可能的實現方式所述的代理服務器,用于當所述第一代理服務器查詢所述第一鎖是否有授權線程客戶設備以及所述授權線程客戶設備是否正在申請另一個鎖時,返回查詢結果給所述第一代理服務器。
本發明實施例提供的技術方案,可以通過利用各節點的代理服務器Proxy的鎖申請實時記錄,在線程客戶設備申請第一鎖的授權,而收到等待消息時,該線程客戶設備所在節點的Proxy便在鎖申請實時記錄中查找該線程客戶設備是否已經持有第二個鎖,當發現該線程客戶設備已經持有第二鎖時,及時發起該線程客戶設備申請的鎖的依賴路徑回溯查找,然后根據依賴路徑回溯查找的結果來判定是否形成了死鎖,從而能夠及時的發現死鎖,以便及時進行解除死鎖的處理,不僅實現了對死鎖的實時檢測,而且方法簡單高效。
附圖說明
為了更清楚地說明本發明實施例中的技術方案,下面將對實施例描述中所需要使用的附圖作簡單地介紹,顯而易見地,下面描述中的附圖僅僅是本發明的一些實施例,對于本領域普通技術人員來講,在不付出創造性勞動的前提下,還可以根據這些附圖獲得其他的附圖。
圖1是現有技術中形成死鎖的示意圖;
圖2是本發明實施例一提供的死鎖檢測的方法流程圖;
圖3是本發明實施例二提供的死鎖檢測的方法流程圖;
圖4是本發明實施例二的方法中查詢鎖a的依賴路徑的流程圖;
圖5是本發明實施例二的方法中一種形成死鎖的情況示意圖;
圖6是本發明實施例三提供的死鎖檢測的方法流程圖示意圖;
圖7是本發明實施例四提供的代理服務器的結構示意圖;
圖8是本發明實施例五提供的代理服務器的結構示意圖;
圖9是本發明實施例五提供的死鎖檢測系統的結構示意圖。
具體實施方式
為使本發明的目的、技術方案和優點更加清楚,下面將結合附圖對本發明實施方式作進一步地詳細描述。
首先對本發明實施例涉及的術語進行說明。
本發明實施例中涉及的鎖相當于對某個數據或資源的獨占權,每一個線程客戶設備在訪問該數據或資源之前首先試圖獲取鎖(即申請鎖),在訪問結束之后釋放鎖;如果在申請鎖的時候,該鎖已經被其他線程客戶設備占用,線程客戶設備會等待,直到該鎖被釋放。通過鎖可以對集群內的共享資源或者邏輯對象進行保護。例如對文件、目錄的并發訪問;或者兩個以上的進程(或線程),對同一個文件進行寫訪問時,通過鎖的應用,使得同一時刻僅有一個進程擁有寫訪問的權限,可以避免兩個進程同時訪問這個文件造成的數據混亂。
在一個集群環境中,若線程客戶設備T1持有鎖x,申請鎖a被阻塞,對其它線程客戶設備而言,當前如果要申請鎖x,就要等到線程客戶設備T1對鎖a的申請得到回應。這種情況下,路徑(T1,鎖a)為鎖x的依賴路徑,T1為依賴路徑中的授權線程客戶設備,鎖a為依賴路徑中的依賴鎖。
具體的,鎖a的依賴路徑回溯查找,是指本地Proxy在集群內查詢鎖a的依賴路徑,以及在鎖a有依賴路徑時查詢該依賴路徑中的依賴鎖的依賴路徑的過程,因此在依賴路徑回溯查找的過程中,只要未達到結束依賴路徑回溯查找的條件,該動作就會持續下去。
實施例一
本發明實施例提供了一種死鎖檢測方法,用于代理服務器,所述代理服務 器與集群鎖管理器及第一線程客戶設備之間分別建立通信連接,參見圖2,方法流程包括:
201、接收第一線程客戶設備對第一鎖的申請;
202、根據所述申請向集群鎖管理器發送授權請求,申請所述第一鎖的授權;
203、接收所述集群鎖管理器返回的等待消息;
204、查詢本地的鎖申請實時記錄,若查詢到所述第一線程客戶設備持有第二鎖,則在集群內發起所述第一鎖的依賴路徑回溯查找;
205、根據所述依賴路徑回溯查找的結果判定是否形成死鎖。
進一步的,所述查詢本地的鎖申請實時記錄,包括:
根據所述第一線程客戶設備的線程身份標識號碼ID在所述鎖申請實時記錄中查詢所述第一線程客戶設備是否持有所述第二鎖。
進一步的,所述在集群內發起所述第一鎖的依賴路徑回溯查找,包括:
查找所述第一鎖是否有依賴路徑;
根據所述依賴路徑查找的結果判斷是否結束所述依賴路徑回溯查找:
若所述第一鎖無依賴路徑,或者所述第一鎖有依賴路徑且所述依賴路徑中的依賴鎖為所述第二鎖,則結束所述依賴路徑回溯查找;
若所述第一鎖有依賴路徑,且所述依賴路徑中的依賴鎖不是所述第二鎖,則進行所述依賴鎖的依賴路徑回溯查找。
進一步的,所述查找所述第一鎖是否有依賴路徑,包括:
向所述集群鎖管理器查詢所述第一鎖的授權代理服務器;
收到所述集群鎖管理器返回的所述授權代理服務器的相關信息;
根據所述相關信息向所述授權代理服務器查詢所述第一鎖是否有授權線程客戶設備以及所述授權線程客戶設備是否正在申請另一個鎖;
接收所述授權代理服務器反饋的查詢結果;
根據所述查詢結果判斷所述第一鎖是否有依賴路徑:若所述第一鎖有授權線程客戶設備且所述授權線程客戶設備正在申請另一個鎖,則判定所述第一鎖有依賴路徑,否則判定所述第一鎖無依賴路徑。
進一步的,所述根據所述相關信息向所述授權代理服務器查詢所述第一鎖是否有授權線程客戶設備以及所述授權線程客戶設備是否正在申請另一個鎖之后,還包括:
所述授權代理服務器接收攜帶所述第一鎖的相關信息的查詢請求;
所述授權代理服務器根據所述查詢請求攜帶的所述第一鎖的相關信息在其鎖申請實時記錄中查找所述第一鎖的授權線程客戶;
所述授權代理服務器根據所述授權線程客戶設備的線程ID在其鎖申請實時記錄中查詢所述授權線程客戶是否正在申請另一鎖;
所述授權代理服務器將查詢結果進行反饋。
進一步的,所述根據所述依賴路徑回溯查找的結果判定是否形成了死鎖,包括:
根據所述依賴路徑回溯查找結束的原因判斷是否形成了死鎖:
若所述依賴路徑回溯查找結束的原因包括:所述第一鎖或某個依賴鎖無依賴路徑,則判定未形成死鎖;
若所述依賴路徑回溯查找結束的原因包括:所述第一鎖或某個依賴鎖有依賴路徑,且所述依賴路徑中的依賴鎖為所述第二鎖,則判定形成死鎖。
進一步的,如果根據所述依賴路徑回溯查找的結果判定形成死鎖,則駁回所述第一線程客戶設備對第一鎖的授權申請;通知所述第一線程客戶設備釋放對所述第二鎖的占用。
本實施例中,當根據第一線程客戶設備的申請向Master申請第一鎖的授權,收到Master的等待消息時,即從本地鎖申請實時記錄中查找該第一線程客戶設備是否已經持有另一個鎖,當發現該線程客戶設備已經持有另一個鎖時,及時發起其第一鎖的依賴路徑回溯查找,從而能夠及時的發現死鎖,以便對死鎖進行及時的處理,不僅實現了對死鎖的實時檢測,而且方法簡單高效。
實施例二
本發明實施例提供了一種死鎖檢測方法,參見圖3,方法流程包括:
301、本地Proxy接收到程客戶設備T1發送的申請鎖a的請求,將線程客戶設備T1掛起,并向Master申請鎖a的授權。
302、本地Proxy接收到Master返回的等待消息;
303、本地Proxy查詢該T1的鎖申請實時記錄,發現T1持有鎖x,執行步驟304。
具體的,Proxy收到Master向Proxy的授權后,需要向本地的鎖申請者(即 線程客戶設備)進行二次授權(即分發),因此Proxy需要維護本地線程客戶設備對鎖的申請及授權情況的鎖申請實時記錄。本地Proxy可以根據該線程客戶設備T1的線程ID(Identity,身份標識號碼)在鎖申請實時記錄中查詢T1已經持有的鎖以及正在申請的鎖。
304、本地Proxy根據該T1申請的鎖a,發起集群內鎖a的依賴路徑回溯查找。
具體的,若線程客戶設備T2持有鎖a,申請鎖b被阻塞,對其它線程客戶設備T1而言,當前如果要申請鎖a,就要等到線程客戶設備T2對鎖b的申請得到回應。這種情況下,路徑(T2,鎖b)為鎖a的依賴路徑,T2為鎖a的授權線程客戶設備,鎖b為鎖a的依賴鎖。
具體的,鎖a的依賴路徑回溯查找,是指本地Proxy在集群內查詢鎖a和/或鎖a的依賴鎖的依賴路徑的過程,在鎖a的依賴路徑回溯查找過程中:如未找到鎖a的依賴路徑,則結束所述依賴路徑回溯查找;如果查找到鎖a的依賴路徑,則需要判斷該依賴路徑中的授權線程客戶設備申請的鎖(即依賴鎖)是否為T1持有的鎖x,如果是鎖x,則結束所述依賴路徑回溯查找,否則進行依賴鎖的依賴路徑回溯查找,查找該依賴鎖的依賴路徑,以此類推,直至查找到某個依賴鎖無依賴路徑或者某個依賴路徑中授權程客戶設備申請的鎖為所述T1持有的鎖x。
具體的查找某個鎖(如鎖a)的依賴路徑的方法,請參閱圖4,包括如下步驟:
3041、本地Proxy向Master發送數據包查詢鎖a是否有授權節點Proxy。
3042、本地Proxy收到Master回復的鎖a的授權節點為Proxy0(P0)。
3043、本地Proxy向P0發送數據包查詢鎖a是否有授權線程以及此授權線程客戶設備是否正在申請另一個鎖。
具體的,P0根據本地Proxy發送的數據包中的鎖a的信息,在P0的鎖申請實時記錄中查找鎖a在節點P0的線程客戶設備持有者(即鎖a的授權線程客戶設備),然后根據鎖a的授權線程客戶設備的ID在P0的鎖申請實時記錄中查找該線程客戶設備是否正在申請另一個鎖,并將查找結果發送給本地Proxy。
3044、本地Proxy接收P0返回的結果,如果鎖a有授權線程客戶設備T2且T2正在申請另一個鎖(鎖b),則判定鎖a有依賴路徑(T2,鎖b),;否則判 定鎖a無依賴路徑。
305、本地Proxy根據依賴路徑回溯查找的結果,判斷是否出現死鎖。
具體的,如果本地Proxy在查找結果中發現鎖a或某個鎖無依賴路徑,則判定死鎖不成立;如果在查找結果中發現鎖a或某個鎖的依賴路徑為(Tn,鎖x),則判定死鎖成立。
例如圖5所示,鎖a的依賴路徑回溯查詢的方法如下:
查詢到鎖a有依賴路徑(T2,鎖b);
繼續查詢依賴鎖b的依賴路徑,查詢到鎖b的依賴路徑(T3,鎖c);
繼續查詢依賴鎖c的依賴路徑:
若查詢到依賴鎖c沒有依賴路徑,即持有鎖c的線程客戶設備沒有正在申請的其他的鎖,則可結束依賴路徑回溯查找,并判定死鎖不成立;若查詢到鎖c的依賴路徑為(Tn,鎖x),即持有鎖c的Tn正在鎖x的授權,而線程客戶設備Tn要得到鎖x的授權回應又要等到T1得到鎖a的授權,而鎖a的授權需要等待鎖b的授權,鎖b的授權需要鎖c的授權,各依賴路徑之間形成了閉環,因此可結束依賴路徑回溯查找,并判定死鎖成立。
具體的,當檢測到死鎖成立后,本地Proxy將對該死鎖進行解除:激活T1,駁回T1對鎖a的申請請求,并通知T1盡快釋放對鎖x的占用。
本實施例中,利用各節點的Proxy對鎖申請實時記錄的維護,在線程客戶設備所在節點的Proxy根據線程客戶設備對某個鎖的申請向Master申請該鎖的授權被要求等待時,該Proxy便根據該線程客戶設備的線程ID在鎖申請實時記錄中查找該線程客戶設備是否已經持有另一個鎖,當發現該線程客戶設備已經持有另一個鎖時,及時發起該線程客戶設備申請的鎖的依賴路徑回溯查找,根據依賴路徑回溯查找的結果是否又回到該線程客戶設備持有的另一個鎖來判定是否形成了死鎖,從而能夠及時的發現死鎖,并進行解除死鎖的處理,不僅實現了對死鎖的實時檢測,而且方法簡單高效。
實施例三
本發明實施例還提供了一種死鎖檢測方法,參見圖6,針對集群中常用的ABBA鎖進行說明,線程客戶設備T1及Proxy1在節點1上,線程客戶設備T2及Proxy2在節點2上,方法流程包括:
601、線程客戶設備T1向Proxy1申請鎖1的授權,Proxy1掛起T1,向Master 發送Request(請求)消息,申請鎖1的授權。
602、Master向Proxy1發送Grant(授權)指示,將鎖1的授權發送給Proxy1,Proxy1激活T1(即向T1進行鎖1的二次授權),此時,T1持有鎖1。
603、線程客戶設備T2向Proxy2申請鎖2的授權,Proxy2掛起T2,向Master發送Request消息,請求申請鎖2的授權。
604、Master向Proxy2發送Grant指示,將鎖2的授權發送給Proxy2,Proxy1激活T2此時,T2持有鎖2。
605、T2向Proxy2申請鎖1的授權,Proxy2掛起T2,向Master發送Request消息,請求申請鎖1的授權。
606、Master向Proxy2返回Suspend(掛起)指令,指示Proxy2等待。
607、Proxy2根據T2的線程ID在其鎖申請實時記錄中查找,發現T2已經持有鎖2。
608、Proxy2向Master發送Query(查詢)請求,查詢鎖1的授權Proxy。
609、Master向Proxy2返回Ack(應答)消息,告知Proxy2鎖1的授權Proxy為節點1的Proxy1。
610、Proxy2向Proxy1發送Detect(檢測)請求,查詢鎖1的依賴路徑。
611、Proxy1向Proxy2返回Ack消息,告知Proxy2鎖1的擁有者為T1,但T1未阻塞在另一個鎖上,即鎖1不存在依賴路徑。
612、Proxy2判定未形成死鎖,執行Master的等待指令。
613、T1向Proxy1申請鎖2的授權,Proxy1掛起T1,向Master發送Request消息,申請鎖2的授權。
614、Master向Proxy1返回Suspend指令。
615、Proxy1根據T1的線程ID在鎖申請實時記錄中查找,發現T1已經持有鎖1。
616、Proxy1向Master發送Query請求,查詢鎖2的授權Proxy。
617、Master向Proxy1返回Ack消息,告知Proxy1鎖2的授權Proxy為節點2的Proxy2。
618、Proxy1向Proxy2發送Detect請求,查詢鎖2的依賴路徑。
619、Proxy2向Proxy1返回Ack消息,告知Proxy1鎖2的擁有者為T2,T2阻塞在鎖1上,即鎖2的依賴路徑為(T2,申請鎖1)。
620、Proxy1根據鎖1查詢鎖申請實時記錄,發現鎖1的持有者即為申請鎖2的T1,即鎖1的依賴路徑為(T1,申請鎖2),判定死鎖成立。
具體的,Proxy1檢測到死鎖后的處理為:激活T1,駁回T1對鎖2的授權的申請請求,并通知T1盡快釋放對鎖1的占用。
本實施中,當線程客戶設備T1申請鎖1的授權被掛起時,T1所在節點的Proxy便根據T1的線程ID查找該T1是否已經持有另一個鎖,在發現該線程客戶設備已經持有鎖2時,及時發起鎖1的依賴路徑回溯查找,根據依賴路徑回溯查找的結果是否又回到T1持有的鎖2,判定是否形成了死鎖,從而能夠及時的發現死鎖,并進行解除死鎖的處理,不僅實現了對死鎖的實時檢測,而且方法簡單高效。
實施例四
參見圖7,本發明實施例提供了一種代理服務器,包括:
接收單元71,用于接收第一線程客戶設備對第一鎖的申請;
發送單元72,用于根據所述接收單元71接收的申請向集群鎖管理器發送授權請求,申請所述第一鎖的授權;
所述接收單元71,還用于在所述請求發送單元72向集群鎖管理器發送授權請求之后,接收所述集群鎖管理器返回的等待消息;
回溯查找單元73,用于在所述接收單元收71到所述等待消息之后,查詢本地的鎖申請實時記錄,若發現所述第一線程客戶設備持有第二鎖,則在集群內發起所述第一鎖的依賴路徑回溯查找;
死鎖判定單元74,用于根據所述回溯查找單元的查找結果判定是否形成了死鎖。
進一步的,所述代理服務器還包括:
存儲單元,用于存儲本地線程客戶設備的鎖申請實時記錄;
所述回溯查找單元用于,根據所述第一線程客戶設備的線程身份標識號碼 ID,在所述存儲單元中存儲的鎖申請實時記錄中查詢所述線程客戶設備是否持有所述第二鎖。
進一步的,所述回溯查找單元包括:
查詢模塊,用于在所述接收單元收到所述等待消息之后,查詢本地的鎖申請實時記錄;
依賴查找模塊,用于在所述查詢模塊查找到所述第一線程客戶設備持有所述第二鎖時,查找第一鎖是否有依賴路徑;根據所述依賴路徑查找的結果判斷是否結束所述依賴路徑回溯查找:若所述第一鎖無依賴路徑,或者所述第一鎖有依賴路徑且所述依賴路徑中的依賴鎖為所述第二鎖,則結束所述依賴路徑回溯查找;若所述第一鎖有依賴路徑,且所述依賴路徑中的依賴鎖不是所述第二鎖,則進行所述依賴鎖的依賴路徑回溯查找。
進一步的,所述依賴查找模塊包括:
獲取子模塊,用于向所述集群鎖管理器查詢所述第一鎖的授權代理服務器,接收所述集群鎖管理器返回的所述授權代理服務器的相關信息;
查詢子模塊,用于所述獲取子模塊接收的所述相關信息,向所述授權代理服務器查詢所述第一鎖是否有授權線程客戶設備,以及所述授權線程客戶設備是否正在申請另一個鎖,并接收所述授權代理服務器反饋的查詢結果;
依賴路徑確定子模塊,用于根據所述查詢子模塊接收的查詢結果判斷所述第一鎖是否有依賴路徑:若所述第一鎖有授權線程客戶設備且所述授權線程客戶設備正在申請另一個鎖,則判定所述第一鎖有依賴路徑,否則判定所述第一鎖無依賴路徑。
進一步的,所述死鎖判定單元,在所述依賴查找模塊結束所述依賴路徑回溯查找之后,根據所述依賴路徑回溯查找結束的原因判斷是否形成了死鎖:若所述依賴路徑回溯查找結束的原因包括:所述第一鎖或某個依賴鎖無依賴路徑,則判定未形成死鎖;若所述依賴路徑回溯查找結束的原因包括:所述第一鎖或某個依賴鎖有依賴路徑,且所述依賴路徑中的依賴鎖為所述第二鎖,則判定形成死鎖。
進一步的,所述代理服務器還包括:死鎖處理單元,用于在所述死鎖判定單元判定形成死鎖后駁回所述第一線程客戶設備對第一鎖的授權申請,并通知第一線程客戶設備盡快釋放對第二鎖的占用。
進一步的,所述接收單元,還用于接收另一代理服務器發送的查詢請求,所述查詢請求攜帶需查詢的鎖的相關信息;在所述鎖申請實時記錄中查找所述查詢請求中的鎖的授權線程客戶設備;
所述回溯查找單元,還用于在所述接收單元接收到所述查詢請求后,根據所述鎖的相關信息,在所述存儲單元中查找所述查詢請求中的鎖的授權線程客戶設備;以及用于根據所述授權線程客戶設備的線程ID在所述本地鎖申請實時記錄中查詢所述授權線程客戶設備是否正在申請另一鎖;
所述發送單元,還用于將所述回溯查找單元的查找結果發送給所述另一代理服務器。
本實施中,本實施例的代理服務器,在根據線程客戶設備的申請向Masters申請第一鎖的授權而收到等待消息時,便根據該線程客戶設備的線程ID查找該線程客戶設備是否已經持有第二鎖,在發現該線程客戶設備已經持有第二鎖時,及時向集群鎖管理器和/或第一鎖的授權代理服務器發起該第一鎖的依賴路徑回溯查找,然后根據依賴路徑回溯查找的結果是否又回到該線程客戶設備持有的第二鎖判定是否形成了死鎖,從而能夠及時的發現死鎖,并進行解除死鎖的處理,不僅實現了對死鎖的實時檢測,而且方法簡單高效。
實施例五
本實施例提供一種代理服務器,請參閱圖8,所述代理服務器包括:
接收機81,用于接收第一線程客戶設備對第一鎖的申請;
發送機82,用于根據所述接收機81接收的申請向集群鎖管理器發送授權請求,申請所述第一鎖的授權;
所述接收機81,還用于在所述發送單元82向集群鎖管理器發送授權請求之后,接收所述集群鎖管理器返回的等待消息
處理器83,用于在所述接收機81收到所述等待消息之后,查詢本地的鎖申請實時記錄,若發現所述第一線程客戶設備持有第二鎖,則在集群內發起所述第一鎖的依賴路徑回溯查找;以及用于根據所述回溯查找單元的查找結果判定是否形成了死鎖。
進一步的,還包括:存儲器,還用于存儲本地線程客戶設備的鎖申請實時記錄;所述處理器83用于,根據所述第一線程客戶設備的線程身份標識號碼ID, 在所述存儲器存儲的所述鎖申請實時記錄中,查詢所述線程客戶設備是否持有所述第二鎖。
進一步的,所述處理器83用于,在查找到所述第一線程客戶設備持有所述第二鎖時,查找第一鎖是否有依賴路徑;以及用于根據所述依賴路徑查找的結果判斷是否結束所述依賴路徑回溯查找:若所述第一鎖無依賴路徑,或者所述第一鎖有依賴路徑且所述依賴路徑中的依賴鎖為所述第二鎖,則結束所述依賴路徑回溯查找;若所述第一鎖有依賴路徑,且所述依賴路徑中的依賴鎖不是所述第二鎖,則進行所述依賴鎖的依賴路徑回溯查找。
進一步的,所述發送機82,還用于在查找所述第一鎖是否有依賴路徑時,向所述集群鎖管理器查詢所述第一鎖的授權代理服務器;
所述接收機81,還用于接收所述集群鎖管理器返回的所述授權代理服務器的相關信息;
所述發送機82,還用于根據所述接收機81接收的所述相關信息向所述授權代理服務器查詢所述第一鎖是否有授權線程客戶設備以及所述授權線程客戶設備是否正在申請另一個鎖;
所述接收機81,還用于接收所述授權代理服務器反饋的查詢結果;
所述處理器81,還用于根據所述接收機81接收的查詢結果判斷所述第一鎖是否有依賴路徑:若所述第一鎖有授權線程客戶設備且所述授權線程客戶設備正在申請另一個鎖,則判定所述第一鎖有依賴路徑,否則判定所述第一鎖無依賴路徑。
進一步的,所述處理器83,還用于根據所述依賴路徑回溯的查找結果判斷是否形成了死鎖:若所述依賴路徑回溯查找結束的原因包括:所述第一鎖或某個依賴鎖無依賴路徑,則判定未形成死鎖;若所述依賴路徑回溯查找結束的原因包括:所述第一鎖或某個依賴鎖有依賴路徑,且所述依賴路徑中的依賴鎖為所述第二鎖,則判定形成死鎖。
進一步的,所述發送機82,還用于在所述處理器83判定形成死鎖后駁回所述第一線程客戶設備對第一鎖的授權申請,并通知第一線程客戶設備釋放對第二鎖的占用。
進一步的,所述接收機81,還用于接收另一代理服務器發送的查詢請求,所述查詢請求攜帶需查詢的鎖的相關信息;
所述處理器83,還用于在所述接收機81接收到所述查詢請求后,根據所述鎖的相關信息,在所述鎖申請實時記錄中查找所述查詢請求中的鎖的授權線程客戶設備;以及用于根據所述授權線程客戶設備的線程ID在所述本地鎖申請實時記錄中查詢所述授權線程客戶設備是否正在申請另一鎖;
所述發送機82,還用于將所述處理器83的查找結果發送給所述另一代理服務器。
本實施例的代理服務器,在根據線程客戶設備的申請向Masters申請第一鎖的授權而收到等待消息時,便根據該線程客戶設備的線程ID查找該線程客戶設備是否已經持有第二鎖,在發現該線程客戶設備已經持有第二鎖時,及時向集群鎖管理器和/或第一鎖的授權代理服務器發起該第一鎖的依賴路徑回溯查找,然后根據依賴路徑回溯查找的結果是否又回到該線程客戶設備持有的第二鎖判定是否形成了死鎖,從而能夠及時的發現死鎖,并進行解除死鎖的處理,不僅實現了對死鎖的實時檢測,而且方法簡單高效。
實施例六
本實施例提供了一種死鎖檢測系統,請參閱圖9,該系統包括:
第一線程客戶設備91,用于發送對第一鎖的申請;
第一代理服務器92,用于接收所述第一線程客戶設備91對第一鎖的申請,根據所述申請向集群鎖管理器93發送授權請求,申請所述第一鎖的授權,接收所述集群鎖管理器返回的等待消息,查詢本地的鎖申請實時記錄,若查詢到所述第一線程客戶設備持有第二鎖,則在集群內發起所述第一鎖的依賴路徑回溯查找,根據所述依賴路徑回溯查找的結果判定是否形成了死鎖;
集群鎖管理器93,用于接收所述第一代理服務器92發送的所述授權請求,向所述第一代理服務器92返回授權或等待消息。
進一步的,所述第一代理服務器92用于,向所述集群鎖管理器93查詢所述第一鎖的授權代理服務器,接收所述集群鎖管理器93返回的所述授權代理服務器的相關信息,根據所述相關信息向所述授權代理服務器查詢所述第一鎖是否有授權線程客戶設備以及所述授權線程客戶設備是否正在申請另一個鎖,接收所述授權代理服務器反饋的查詢結果,根據所述查詢結果判斷所述第一鎖是否有依賴路徑:若所述第一鎖有授權線程客戶設備且所述授權線程客戶設備正 在申請另一個鎖,則判定所述第一鎖有依賴路徑,否則判定所述第一鎖無依賴路徑;
所述集群鎖管理器93還用于,當所述第一代理服務器92查詢所述第一鎖的授權代理服務器時,返回所述授權代理服務器的相關信息給所述第一代理服務器;
所述系統還包括:
授權代理服務器,用于當所述第一代理服務器92查詢所述第一鎖是否有授權線程客戶設備以及所述授權線程客戶設備是否正在申請另一個鎖時,返回查詢結果給所述第一代理服務器92。
進一步的,所述授權代理服務器用于,接收所述第一代理服務器92發送的攜帶所述第一鎖的相關信息的查詢請求;根據所述查詢請求攜帶的所述第一鎖的相關信息在其鎖申請實時記錄中查找所述第一鎖的授權線程客戶;根據所述授權線程客戶設備的線程ID在鎖申請實時記錄中查詢所述授權線程客戶是否正在申請另一鎖;將查詢結果反饋給所述第一代理服務器92。
進一步的,所述第一代理服務器92還用于,接收第二代理服務器發送的查詢請求,所述查詢請求攜帶需查詢的鎖的相關信息,根據所述鎖的相關信息,在鎖申請實時記錄中查找所述鎖的授權線程客戶設備,根據所述授權線程客戶設備的線程ID在所述鎖申請實時記錄中查詢所述授權線程客戶設備是否正在申請另一鎖,將查找結果發送給所述第二代理服務器;
所述系統還包括:
第二代理服務器,用于向所述第一代理服務器92發送攜帶需查詢的鎖的相關信息的查詢請求,接收所述第一代理服務器返回的查找結果。
本實施例中,當第一代理服務器根據線程客戶設備的申請向Master申請第一鎖的授權,收到Master的等待消息時,即從本地鎖申請實時記錄中查找該線程客戶設備是否已經持有另一個鎖,當發現該線程客戶設備已經持有另一個鎖時,在集群內向Master及第一鎖的代理服務器發起第一鎖的依賴路徑回溯查找,從而能夠及時的發現死鎖,以便對死鎖進行及時的處理,不僅實現了對死鎖的實時檢測,而且方法簡單高效。
綜上所述,本發明實施例死鎖檢測方法、設備及系統,在本地Proxy根據線 程客戶設備的申請向Master申請第一鎖的授權,收到Master的等待消息時,該本地Proxy即從本地鎖申請實時記錄中,查找該線程客戶設備是否已經持有另一個鎖,當發現該線程客戶設備已經持有第二鎖時,及時發起第一鎖的依賴的回溯查找,從而能夠及時的發現死鎖,以便對死鎖進行及時的處理,不僅實現了對死鎖的實時檢測,而且方法簡單高效。
需要說明的是:上述實施例提供的死鎖檢測設備在執行死鎖檢測時,僅以上述各功能模塊的劃分進行舉例說明,實際應用中,可以根據需要而將上述功能分配由不同的功能模塊完成,即將設備的內部結構劃分成不同的功能模塊,以完成以上描述的全部或者部分功能。另外,上述實施例提供的死鎖檢測方法、設備及系統實施例屬于同一構思,其具體實現過程詳見方法實施例,這里不再贅述。
上述本發明實施例序號僅僅為了描述,不代表實施例的優劣。
本領域普通技術人員可以理解實現上述實施例的全部或部分步驟可以通過硬件來完成,也可以通過程序來指令相關的硬件完成,所述的程序可以存儲于一種計算機可讀存儲介質中,上述提到的存儲介質可以是只讀存儲器,磁盤或光盤等。
以上所述僅為本發明的較佳實施例,并不用以限制本發明,凡在本發明的精神和原則之內,所作的任何修改、等同替換、改進等,均應包含在本發明的保護范圍之內。

關于本文
本文標題:一種死鎖檢測方法、設備及系統.pdf
鏈接地址:http://www.pqsozv.live/p-6180577.html
關于我們 - 網站聲明 - 網站地圖 - 資源地圖 - 友情鏈接 - 網站客服 - 聯系我們

[email protected] 2017-2018 zhuanlichaxun.net網站版權所有
經營許可證編號:粵ICP備17046363號-1 
 


收起
展開
钻石光影