TW201737085A - 應用程式介面死鎖監控方法和裝置 - Google Patents
應用程式介面死鎖監控方法和裝置 Download PDFInfo
- Publication number
- TW201737085A TW201737085A TW106105612A TW106105612A TW201737085A TW 201737085 A TW201737085 A TW 201737085A TW 106105612 A TW106105612 A TW 106105612A TW 106105612 A TW106105612 A TW 106105612A TW 201737085 A TW201737085 A TW 201737085A
- Authority
- TW
- Taiwan
- Prior art keywords
- deadlock
- detection node
- time
- queue
- deadlock detection
- Prior art date
Links
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/46—Multiprogramming arrangements
- G06F9/52—Program synchronisation; Mutual exclusion, e.g. by means of semaphores
- G06F9/524—Deadlock detection or avoidance
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/46—Multiprogramming arrangements
- G06F9/52—Program synchronisation; Mutual exclusion, e.g. by means of semaphores
Landscapes
- Engineering & Computer Science (AREA)
- Software Systems (AREA)
- Theoretical Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Debugging And Monitoring (AREA)
Abstract
本申請實施例提供了一種應用程式介面死鎖監控方法和裝置,涉及電腦技術領域。所述方法包括:接收客戶端對一應用程式介面的調用請求;創建針對所述調用請求的死鎖檢測結點;將所述死鎖檢測結點插入第一佇列;其中,當所述調用請求對應用程式介面的調用結束時,刪除第一佇列中相應的死鎖檢測結點;監控第一佇列中各死鎖檢測結點的存在時間是否超過死鎖時間閾值;如果檢測到任一死鎖檢測結點的存在時間超過死鎖時間閾值,則確定相應被調用的應用程式介面死鎖。從而可以基於死鎖監控結點,透過監控利用死鎖監控結點的存在時間,實現對API的死鎖監控,適用性更強,而且精確度較高。
Description
本申請係關於電腦技術領域,特別是關於一種應用程式介面死鎖監控方法和一種應用程式介面死鎖監控裝置。
在分散式系統中,系統架構和設計非常複雜,處理邏輯不可避免地存在錯誤。例如,客戶端透過調用系統的應用程式介面(Application Programming Interface,API)請求服務,會有較低的機率很長時間沒有得到回應,系統既不返回用戶成功,也不返回用戶錯誤。這就是API死鎖,死鎖的發生會導致程式無限等待或資源嚴重消耗,使整個系統沒有可用資源而陷於癱瘓,嚴重影響系統安全性和可靠性。
現有的死鎖檢測的方法主要可以分為靜態和動態兩大類。靜態方法最基本的是代碼檢查,而所有直接在來源程式上做靜態死鎖檢測的技術,都會使用靜態程式分析技術。靜態程式分析技術是對併發程式的原始程式碼或者規格說明進行人工或者自動化分析,然後透過分析獲得程式各個模組的資料依賴關係。靜態方法能取得一定的效果,
但如果出現併發缺陷如死鎖和活鎖,其產生來源於特定的程式狀態,而且併發軟體狀態空間非常龐大,時間耗費較長,而且會使得以人工為主的代碼檢查難以勝任,適用性不高。
動態方法則是透過併發程式在真實環境或模擬環境中運行,透過檢測軟體對運行資訊進行收集,然後利用收集到的資訊進行死鎖檢測。動態分析方法可以分為測試和監控兩大類。動態方法只能覆蓋到有限的軟體運行情況,對於死鎖這類出現機率低的缺陷,並不能有效的檢測,同樣適用性不高。
鑒於上述問題,提出了本申請實施例以便提供一種克服上述問題或者至少部分地解決上述問題的一種應用程式介面死鎖監控方法和相應的一種應用程式介面死鎖監控裝置。
為了解決上述問題,本申請公開了一種應用程式介面死鎖監控方法,其特徵在於,包括:接收客戶端對一應用程式介面的調用請求;創建針對所述調用請求的死鎖檢測結點;將所述死鎖檢測結點插入第一佇列;其中,當所述調用請求對應用程式介面的調用結束時,刪除第一佇列中相應的死鎖檢測結點;監控第一佇列中各死鎖檢測結點的存在時間是否超過
死鎖時間閾值;如果檢測到任一死鎖檢測結點的存在時間超過死鎖時間閾值,則確定相應被調用的應用程式介面死鎖。
可選地,所述將所述死鎖檢測結點插入第一佇列的步驟之前,還包括:根據當前的死鎖時間閾值和時間輪中指標所在的槽位,以及整個時間輪週期,計算對應所述死鎖檢測結點的槽位;則所述將所述死鎖檢測結點插入第一佇列的步驟包括:將所述死鎖檢測結點插入所述槽位中的第一佇列。
可選地,所述監控第一佇列中各死鎖檢測結點的存在時間是否超過死鎖時間閾值的步驟,包括:定期將時間輪的指標移動到下一個槽位;對於指標指向的槽位,判斷所述槽位中的第一佇列的各死鎖檢測結點的死鎖時間閾值是否超過一個時間輪週期;如果一死鎖檢測結點的當前的死鎖時間閾值超過一個時間輪週期,則將當前的死鎖時間閾值減去一個時間輪週期所得到的結果,作為所述死鎖檢測結點的新的死鎖時間閾值;如果一死鎖檢測結點的當前的死鎖時間閾值不超過一個時間輪週期,則確定相應被調用的應用程式介面死鎖。
可選地,在根據當前的死鎖時間閾值和時間輪中指標所在的槽位,以及整個時間輪週期,計算對應所述死鎖檢
測結點的槽位的步驟之前,還包括:對死鎖檢測結點按照時間輪的個數進行雜湊計算,並根據計算結果將所述死鎖檢測結點分配到對應雜湊計算結果的時間輪。
可選地,所述對死鎖檢測結點按照時間輪的個數進行雜湊計算,並根據計算結果將所述死鎖檢測結點分配到對應的時間輪的步驟,包括:獲取死鎖檢測結點的記憶體位址的雜湊值;將所述雜湊值對時間輪的數量取餘數;根據餘數與時間輪的對應關係,將死鎖檢測結點分配到相應的時間輪中。
可選地,在確定相應被調用的應用程式介面死鎖的步驟之後,還包括:刪除第一佇列中相應的死鎖檢測結點,並通知調用請求所對應的客戶端對所述應用程式介面的調用死鎖;或,刪除第一佇列中相應的死鎖檢測結點,並重啟客戶端對所述應用程式介面的調用請求。
可選地,所述刪除第一佇列中相應的死鎖檢測結點,並重啟客戶端對所述應用程式介面的調用請求的步驟之前,還包括:接收客戶端對重啟全域標識的打開請求;所述重啟全域標識允許在確定相應被調用的應用程式介面死鎖後,重啟客戶端對所述應用程式介面的調用請求;根據所述打開請求,打開所述重啟全域標識。
可選地,所述通知調用請求所對應的客戶端對所述應用程式介面的調用死鎖的步驟,包括:獲取死鎖的應用程式介面的資訊;將所述死鎖的應用程式介面的資訊序列化為字串返回給客戶端;所述客戶端接收到所述字串後,對所述字串進行反序列化,得到死鎖的應用程式介面的資訊。
可選地,在創建針對所述調用請求的死鎖檢測結點之前,還包括:接收客戶端針對所述應用程式介面配置的時間長度閾值。
可選地,所述時間輪的每個槽位配置有自旋鎖;所述自旋鎖在第一佇列被操作之前添加,以及在第一佇列被操作完畢之後釋放。
可選地,所述第一佇列包括雙向鏈表或單向鏈表。
可選地,當所述第一佇列為雙向鏈表時,所述死鎖檢測結點的資料結構包括:雙向鏈表結點參數、死鎖時間閾值參數、時間輪雜湊索引參數、時間輪指標槽位參數。
可選地,所述創建針對所述調用請求的死鎖檢測結點的步驟,包括:在調用應用程式介面時,在應用程式介面上下文環境資料結構中創建死鎖檢測結點。
可選地,所述第一佇列為優先級佇列,則所述將所述死鎖檢測結點插入第一佇列的步驟包括:
計算所述死鎖檢測結點的優先級;所述死鎖檢測結點的優先級為截止時間;所述截止時間為檢測結點創建時間與死鎖時間閾值之和;根據所述死鎖檢測結點的優先級,將所述死鎖檢測結點插入優先級佇列。
可選地,所述監控第一佇列中各死鎖檢測結點的存在時間是否超過死鎖時間閾值的步驟,包括:檢測優先級佇列首部的死鎖檢測結點的截止時間是否到達;如果優先級佇列首部的檢測結點的截止時間到達,則確定相應被調用的應用程式介面死鎖。
本申請還公開了一種應用程式介面死鎖監控裝置,其特徵在於,包括:接收模組,適於接收客戶端對一應用程式介面的調用請求;創建模組,適於創建針對所述調用請求的死鎖檢測結點;插入模組,適於將所述死鎖檢測結點插入第一佇列;其中,當所述調用請求對應用程式介面的調用結束時,刪除第一佇列中相應的死鎖檢測結點;監控模組,適於監控第一佇列中各死鎖檢測結點的存在時間是否超過死鎖時間閾值;如果檢測到任一死鎖檢測結點的存在時間超過死鎖時間閾值,則進入確認模組;確認模組,適於確定相應被調用的應用程式介面死
鎖。
可選地,在所述插入模組之前,還包括:槽位計算模組,適於根據當前的死鎖時間閾值和時間輪中指標所在的槽位,以及整個時間輪週期,計算對應所述死鎖檢測結點的槽位;則所述插入模組包括:插入子模組,適於將所述死鎖檢測結點插入所述槽位中的第一佇列。
可選地,所述監控模組,包括:指標移動子模組,適於定期將時間輪的指標移動到下一個槽位;死鎖時間判斷子模組,適於指標指向的槽位,判斷所述槽位中的第一佇列的各死鎖檢測結點的死鎖時間閾值是否超過一個時間輪週期;如果一死鎖檢測結點的當前的死鎖時間閾值超過一個時間輪週期,則進入死鎖時間閾值更新子模組;如果一死鎖檢測結點的當前的死鎖時間閾值不超過一個時間輪週期,則進入確認模組;死鎖時間閾值更新子模組,適於將當前的死鎖時間閾值減去一個時間輪週期所得到的結果,作為所述死鎖檢測結點的新的死鎖時間閾值。
可選地,在所述槽位計算模組之前,還包括:死鎖檢測結點分配模組,適於對死鎖檢測結點按照時間輪的個數進行雜湊計算,並根據計算結果將所述死鎖檢測結點分配到對應雜湊計算結果的時間輪。
可選地,所述死鎖檢測結點分配模組,包括:
雜湊值獲取子模組,適於獲取死鎖檢測結點的記憶體位址的雜湊值;取餘子模組,適於將所述雜湊值對時間輪的數量取餘數;死鎖檢測結點分配子模組,適於根據餘數與時間輪的對應關係,將死鎖檢測結點分配到相應的時間輪中。
可選地,在所述確認模組之後,還包括:刪除通知模組,適於刪除第一佇列中相應的死鎖檢測結點,並通知調用請求所對應的客戶端對所述應用程式介面的調用死鎖;或,刪除重啟模組,適於刪除第一佇列中相應的死鎖檢測結點,並重啟客戶端對所述應用程式介面的調用請求。
可選地,在所述刪除重啟模組之前,還包括:打開請求接收模組,適於接收客戶端對重啟全域標識的打開請求;所述重啟全域標識允許在確定相應被調用的應用程式介面死鎖後,重啟客戶端對所述應用程式介面的調用請求;重啟全域標識開啟模組,適於根據所述打開請求,打開所述重啟全域標識。
可選地,所述刪除通知模組,包括:應用程式介面資訊獲取子模組,適於獲取死鎖的應用程式介面的資訊;序列化子模組,適於將所述死鎖的應用程式介面的資
訊序列化為字串返回給客戶端;所述客戶端接收到所述字串後,對所述字串進行反序列化,得到死鎖的應用程式介面的資訊。
可選地,在所述創建模組之前,還包括:時間長度閾值接收模組,適於接收客戶端針對所述應用程式介面配置的時間長度閾值。
可選地,所述時間輪的每個槽位配置有自旋鎖;所述自旋鎖在第一佇列被操作之前添加,以及在第一佇列被操作完畢之後釋放。
可選地,所述第一佇列包括雙向鏈表或單向鏈表。
可選地,當所述第一佇列為雙向鏈表時,所述死鎖檢測結點的資料結構包括:雙向鏈表結點參數、死鎖時間閾值參數、時間輪雜湊索引參數、時間輪指標槽位參數。
可選地,所述創建模組,包括:創建子模組,適於在調用應用程式介面時,在應用程式介面上下文環境資料結構中創建死鎖檢測結點。
可選地,所述第一佇列為優先級佇列,則所述插入模組,包括:優先級計算子模組,適於計算所述死鎖檢測結點的優先級;所述死鎖檢測結點的優先級為截止時間;所述截止時間為檢測結點創建時間與死鎖時間閾值之和;插入子模組,適於根據所述死鎖檢測結點的優先級,將所述死鎖檢測結點插入優先級佇列。
可選地,所述監控模組,包括:截止時間檢測模組,適於檢測優先級佇列首部的死鎖檢測結點的截止時間是否到達;如果優先級佇列首部的檢測結點的截止時間到達,則進入確認模組。
本申請實施例包括以下優點:
本申請實施例,在接收客戶端對一應用程式介面的調用請求後會創建針對調用請求的死鎖檢測結點,然後將死鎖檢測結點插入第一佇列,其中,當所述調用請求對應用程式介面的調用結束時,刪除第一佇列中相應的死鎖檢測結點。進一步監控第一佇列中各死鎖檢測結點的存在時間是否超過死鎖時間閾值,如果檢測到任一死鎖檢測結點的存在時間超過死鎖時間閾值,則確定相應被調用的應用程式介面死鎖。從而可以基於死鎖監控結點,透過監控利用死鎖監控結點的存在時間,實現對API的死鎖監控,相對於先前技術中的死鎖檢測方法,本申請所述的應用程式介面死鎖監控方法適用性更強,而且精確度較高。
410‧‧‧接收模組
420‧‧‧創建模組
430‧‧‧插入模組
440‧‧‧監控模組
450‧‧‧確認模組
510‧‧‧接收模組
520‧‧‧創建模組
521‧‧‧創建子模組
530‧‧‧死鎖檢測結點分配模組
531‧‧‧雜湊值獲取子模組
532‧‧‧取餘子模組
533‧‧‧死鎖檢測結點分配子模組
540‧‧‧槽位計算模組
550‧‧‧插入模組
551‧‧‧第一插入子模組
560‧‧‧監控模組
561‧‧‧指標移動子模組
562‧‧‧死鎖時間判斷子模組
563‧‧‧死鎖時間閾值更新子模組
570‧‧‧確認模組
610‧‧‧接收模組
620‧‧‧創建模組
630‧‧‧插入模組
631‧‧‧優先級計算子模組
632‧‧‧第二插入子模組
640‧‧‧監控模組
641‧‧‧截止時間檢測模組
650‧‧‧確認模組
圖1是本申請的一種應用程式介面死鎖監控方法實施例的步驟流程圖;圖2是本申請的一種應用程式介面死鎖監控方法實施例的步驟流程圖;圖2A是本申請的一種API死鎖監測結點在上下文環境中的位置示意圖;
圖2B是本申請的一種死鎖檢測結點的資料結構示意圖;圖2C是本申請的一個時間輪的示意圖;圖2D是本申請的一種雙向鏈表的資料結構示意圖;圖2E是本申請的一種用雙向鏈表串聯API死鎖監測結點的示意圖;圖2F是本申請的一種在雙向鏈表中插入死鎖檢測結點的示意圖;圖2G是本申請的一種內部狀態的資料結構示意圖;圖3是本申請的一種應用程式介面死鎖監控方法實施例的步驟流程圖;圖4是本申請的一種應用程式介面死鎖監控裝置實施例的結構框圖;圖5是本申請的一種應用程式介面死鎖監控裝置實施例的結構框圖;圖6是本申請的一種應用程式介面死鎖監控裝置實施例的結構框圖。
為使本申請的上述目的、特徵和優點能夠更加明顯易懂,下面結合附圖和具體實施方式對本申請作進一步詳細的說明。
本申請實施例的核心構思之一在於,在接收客戶端對一應用程式介面的調用請求後會創建針對調用請求的死鎖
檢測結點,然後將死鎖檢測結點插入第一佇列,其中,當所述調用請求對應用程式介面的調用結束時,刪除第一佇列中相應的死鎖檢測結點。進一步監控第一佇列中各死鎖檢測結點的存在時間是否超過死鎖時間閾值,如果檢測到任一死鎖檢測結點的存在時間超過死鎖時間閾值,則確定相應被調用的應用程式介面死鎖。從而可以基於死鎖監控結點,透過監控利用死鎖監控結點的存在時間,實現對API的死鎖監控,相對於先前技術中的死鎖檢測方法,本申請所述的應用程式介面死鎖監控方法適用性更強,而且精確度較高。
實施例一
參照圖1,示出了本申請的一種應用程式介面死鎖監控方法實施例的步驟流程圖,具體可以包括如下步驟:
步驟110,接收客戶端對一應用程式介面的調用請求。
在資料封裝時,網路分層中的每個層相互之間會用介面進行交互並提供服務,其中應用層與客戶端之間的介面稱之為應用程式介面。在實際應用中,客戶端可以透過調用一應用程式介面請求系統提供服務。
步驟120,創建針對所述調用請求的死鎖檢測結點。
在本申請實施例中,死鎖檢測結點用於保存每個調用請求的死鎖檢測的資訊。其中,API死鎖是指在分散式系統中,用戶調用一API請求服務,而系統既不返回成功,
也不返回失敗,導致用戶請求被阻塞的一種現象。
在本申請實施例中,可以先創建一個第一進程,利用該第一進程創建針對調用請求的死鎖檢測結點。第一進程可以在本步驟之前,或者是本步驟之前的任一步驟之前創建,對此本申請實施例不加以限定。
另外,在本申請實施例中,可以預先設定判定各API進入死鎖狀態的死鎖時間閾值,若從開始調用API開始,等待的時間超過死鎖時間閾值,系統仍未返回任何訊息,則可以判定對應API死鎖。需要說明的是,在實際應用中,各API對應的服務不同,所以不同API的死鎖時間閾值也會不完全相同。各API的死鎖時間閾值可以在各API在被調用之前根據情況設定,對此本申請實施例不加以限定。
步驟130,將所述死鎖檢測結點插入第一佇列;其中,當所述調用請求對應用程式介面的調用結束時,刪除第一佇列中相應的死鎖檢測結點。
在本申請實施例中,會創建第一佇列,用以存放死鎖檢測結點。其中,可以根據各API對應的死鎖時間閾值,將各死鎖檢測節點按照死鎖時間閾值從大的小的順序插入第一佇列。當然,也可以按照其他方式將死鎖檢測結點插入第一佇列,對此本申請實施例不加以限定。
另外,在實際應用中,當調用請求對應用程式介面的調用結束時,此時不再需要對該應用程式介面進行死鎖監控,在本申請實施例中,可以利用步驟120中的第一進程
刪除第一佇列中相應的死鎖檢測節點。
在本申請另一較佳的實施例中,所述第一佇列包括雙向鏈表或單向鏈表。
其中,雙向鏈表也叫雙鏈表,是鏈表的一種,它的每個資料結點中都有兩個指標,分別指向前一個結點和後一個結點。在本申請實施例中,為了區分起見,可以將兩個指標分別稱為前向指標和後向指標,其中,前向指標是指向前一個結點的指標,後向指標是指向後一個結點的指標。所以,從雙向鏈表中的任意一個結點開始,都可以很方便地訪問它的前一個結點和後一個結點。而且在雙向鏈表中,結點的插入、刪除操作只涉及到指標的修改,時間複雜度是O(1)。其中,O(f(n))是時間複雜度函數,可以定量的描述演算法f(n)的執行時間。
另外,在本申請實施例中,所述第一佇列也可以為單向鏈表,與雙向鏈表相比,單向鏈表的特點是鏈表的連結方向是單向的,對鏈表的訪問要透過順序讀取從頭部開始,所以,從單向鏈表中的任意一個結點開始,只可以固定地訪問其前一個結點,或固定地訪問其後一個結點。
綜上分析可知,在本申請實施例中,利用雙向鏈表作為第一佇列,效果更好,但是也可以利用優先級佇列或單向鏈表作為第一佇列,對此本申請實施例不加以限定。
步驟140,監控第一佇列中各死鎖檢測結點的存在時間是否超過死鎖時間閾值;如果檢測到任一死鎖檢測結點的存在時間超過死鎖時間閾值,則進入步驟150。
在本申請實施例中,可以創建一個監控進程,用以監控第一佇列中各死鎖檢測結點的存在時間是否超過死鎖時間閾值。監控進程可以在本步驟之前,或者是本步驟之前的任一步驟之前設定,對此本申請實施例不加以限定。
由前述,在本申請實施例中,在接收到對一應用程式介面的調用請求後,即會創建一個針對該調用請求的死鎖檢測結點,在調用請求結束後會相應地刪除針對該調用請求的死鎖檢測結點,而若到當前時刻針對該調用請求的死鎖檢測結點未被刪除,則從其創建結束到當前時刻的時間即為該死鎖檢測結點的存在時間。
步驟150,確定相應被調用的應用程式介面死鎖。
在接收客戶端對一應用程式介面的調用請求後會創建針對調用請求的死鎖檢測結點,然後將死鎖檢測結點插入第一佇列,其中,當所述調用請求對應用程式介面的調用結束時,刪除第一佇列中相應的死鎖檢測結點。進一步監控第一佇列中各死鎖檢測結點的存在時間是否超過死鎖時間閾值,如果檢測到任一死鎖檢測結點的存在時間超過死鎖時間閾值,則確定相應被調用的應用程式介面死鎖。從而可以基於死鎖監控結點,透過監控利用死鎖監控結點的存在時間,實現對API的死鎖監控,相對於先前技術中的死鎖檢測方法,本申請所述的應用程式介面死鎖監控方法適用性更強,而且精確度較高。
實施例二
參照圖2,示出了本申請的一種應用程式介面死鎖監控方法實施例的步驟流程圖,具體可以包括如下步驟:
步驟210,接收客戶端對一應用程式介面的調用請求。
步驟220,在調用應用程式介面時,在應用程式介面上下文環境資料結構中創建死鎖檢測結點。
在本申請實施例中,會將死鎖檢測結點創建於對應API的上下文環境資料結構中,從而死鎖檢測結點的生命週期與對應的API上下文環境資料結構相同,而且死鎖檢測結點的記憶體空間可以分配在上下文環境中,從而避免頻繁調用函數為死鎖檢測結點單獨分配、釋放記憶體空間,另外死鎖檢測結點與上下文環境的記憶體空間相連續,還可以避免產生記憶體碎片。另外,不同的API上下文環境是不同的,但其中的死鎖檢測結點的結構是相同的。因此,在API上下文環境資料結構中創建死鎖檢測結點,既可以解決用同一個容器管理所有API調用的問題,又解決了方便地獲取API相關資訊的問題。API死鎖監測結點在上下文環境中的位置如圖2A所示。
因此,在本申請實施例中,API上下文環境資料結構包括死鎖檢測結點以及其他的API相關欄位。其中,其他的API相關欄位可以包括與API相關的其他的可存在與其上下文環境資料結構中的任何欄位,對此本申請實施例不加以限定。
在本申請實施例中,所述死鎖檢測結點的資料結構如
圖2B所示,包括:雙向鏈表結點參數、死鎖時間閾值參數、時間輪雜湊索引參數、時間輪指標槽位參數。
其中,雙向鏈表結點參數是指用以連接當前死鎖檢測結點的各個雙向鏈結點的參數,例如各個雙向鏈表結點中的指標等。
死鎖時間閾值參數,是指可以接受的等待系統回應的時間閾值參數。
時間輪雜湊索引參數是指當前死鎖檢測結點所屬時間輪的索引參數,例如時間輪標號等。在本申請實施例中,為了降低檢監控進程之間的競爭強度,可以將各死鎖檢測結點分配到不同的時間輪。具體的分配方法包括雜湊(Hash)演算法,所謂雜湊演算法,是一種單向密碼體制,即它是一個從明文到密文的不可逆的映射,只有加密過程,沒有解密過程。同時,雜湊函數可以將任意長度的輸入經過變化以後得到固定長度的輸出,雜湊函數的這種單向特徵和輸出資料長度固定的特徵使得它可以生成訊息或者資料。其中,時間輪(Timing Wheel)是一種資料結構,其主體是一個迴圈列表(circular buffer),每個列表中包含一個稱之為槽位(slot)的結構,如圖2C所示為一個時間輪的示意圖。時間輪的工作原理可以類比於時鐘,如圖2C中指標(箭頭)按某一個方向按固定頻率輪動,每一次跳動稱為一個槽位(tick),指標當前所指向的槽位為當前選定的槽位。這樣可以看出時間輪有三個重
要的屬性參數,分別為一整個時間輪的槽位個數、時間輪週期以及每個槽位的持續時間,其中時間輪週期為槽位個數與每個槽位持續時間的乘積。例如,當一整個時間輪的槽位個數為60,一個槽位的持續時間為1秒,這就和現實中時鐘的秒針走動完全類似了。
時間輪指標槽位參數是指當前死鎖檢測結點所在時間輪中的具體槽位參數,例如槽位標號等。
步驟230,對死鎖檢測結點按照時間輪的個數進行雜湊計算,並根據計算結果將所述死鎖檢測結點分配到對應雜湊計算結果的時間輪。
如前述,在本申請實施例中,需要將各死鎖檢測結點分配到相應的時間輪。可以透過對各死鎖檢測結點按照時間輪的個數進行雜湊計算,並根據計算結果將死鎖檢測結點分配到對應雜湊計算結果的時間輪。例如,利用雜湊演算法計算各死鎖檢測結點針對某個參數的雜湊值,然後基於時間輪的個數,根據計算出來的雜湊值,按照一定規則將死鎖檢測結點分配到對應其雜湊值的時間輪。其中,參數可以為可利用的且互相唯一的死鎖檢測結點的相關參數,例如死鎖檢測結點的記憶體位址。具體的規則可以包括:直接尋址法、數字分析法、平方取中法、折疊法、隨機數法、除留餘數法等。
在本申請另一較佳的實施例中,步驟230包括:
子步驟231,獲取死鎖檢測結點的記憶體位址的雜湊值。
在本申請實施例中,以死鎖檢測結點的記憶體位址為基礎,獲取死鎖檢測結點的記憶體位址的雜湊值。具體的計算死鎖檢測結點的記憶體位址的雜湊值的方法,可以利用可以採用的上述任何一種雜湊演算法,對此本申請不加以限定。
子步驟232,將所述雜湊值對時間輪的數量取餘數。
因為時間輪的數量是一定的,可以根據需求設定。為了實現根據雜湊值將死鎖檢測結點分配到不同的時間輪中,所以雜湊值與時間輪之間必然存在一定的對應關係,例如雜湊值為某固定值對應於某一固定時間輪,當然也可以為其他的對應關係,對此本申請不加以限定。較佳地,可以將雜湊值對時間輪的數量取餘,獲得的餘數可以為零到時間輪的數量減一之間的整數,也就是說餘數可能的取值的數量等於時間輪的數量,從而可以預置餘數與時間輪的對應關係,此時為儘量平均各時間輪中死鎖檢測結點的數量,避免資料混亂,餘數與時間輪是一一對應的,當然也可以存在多個餘數對應一個時間輪,或者一個餘數對應多個時間輪的情況,對此本申請不加以限定。
子步驟233,根據餘數與時間輪的對應關係,將死鎖檢測結點分配到相應的時間輪中。
在確定了餘數與時間輪的對應關係並且獲取對應死鎖檢測結點的餘數後,則可以相應地將死鎖檢測結點分配到對應的時間輪中。
步驟240,根據當前的死鎖時間閾值和時間輪中指標
所在的槽位,以及整個時間輪週期,計算對應所述死鎖檢測結點的槽位。
在本申請實施例中,同一個時間輪中每個槽位的持續時間是一致的。在實際應用中,可以設定時間輪中某一個槽位為起始槽位,例如,本申請實施例可以以當前時間輪指標所在的槽位為初始槽位,則指標從初始槽位移動到初始槽位的下一個槽位需要經過一個持續時間,而若指標從初始槽位移動到初始槽位之後的第N(N大於1,且小於時間輪的槽位個數)個槽位,則需要經過N個持續時間。
另外,若死鎖時間閾值大於整個時間輪週期,則可以將死鎖時間閾值對時間輪週期取餘,將取得的餘數作為對應該死鎖時間閾值的新的死鎖時間閾值,然後按照上述方法,計算原始死鎖時間閾值對應的死鎖檢測結點的槽位。
所以在本申請實施例中,可以根據各死鎖監測結點對應的死鎖時間閾值,計算經過各死鎖時間閾值後,對應時間輪的指標從初始槽位可以移動到指向的槽位,則為該死鎖時間閾值對應的死鎖檢測結點所屬的槽位。
例如,針對某一時間輪A,其槽位個數為10,分別標號為1-10,每個槽位的持續時間為2秒。經步驟230後分配到時間輪A的死鎖檢測結點包括死鎖檢測結點a、死鎖檢測結點b。其中,死鎖檢測結點a的死鎖時間閾值為3秒,死鎖檢測結點b的死鎖時間閾值為6秒,當前時間輪中指標所在的槽位的標號為5。
則可以判斷出,經過3秒後,時間輪的指標從當前槽
位移動到其之後的第二個槽位,因此,死鎖檢測結點a所在的槽位標號為7;經過4秒後,時間輪的指標從當前時間所在的槽位移動到其之後的第三個槽位,此時死鎖檢測結點b所在的槽位標號為8。
在本申請另一較佳的實施例中,所述時間輪的每個槽位配置有自旋(Spin)鎖;所述自旋鎖在第一佇列被操作之前添加,以及在第一佇列被操作完畢之後釋放。當第一佇列為雙向鏈表時,自旋鎖在雙向鏈表被操作之前添加,以及在雙向鏈表被操作完畢之後釋放。自旋鎖的目的是為了保證對雙向鏈表操作的安全性,在對雙向鏈表進行插入、刪除和遍歷等操作時,在該雙向鏈表中添加自旋鎖,在執行完對應操作後再釋放自旋鎖。
步驟250,將所述死鎖檢測結點插入所述槽位中的第一佇列;所述第一佇列為雙向鏈表或單向鏈表。
在本申請實施例中,第一佇列為雙向鏈表或單向鏈表。其中,雙向鏈表也叫雙鏈表,是鏈表的一種,它的每個資料結點中都有兩個指標,分別指向前一個結點和後一個結點。如圖2D所示為雙向鏈表的資料結構,圖2E為用雙向鏈表串聯API死鎖監測結點的示意圖。在本申請實施例中,為了區分起見,可以將兩個指標分別稱為前向指標和後向指標,其中,前向指標是指向前一個結點的指標,後向指標是指向後一個結點的指標。所以,從雙向鏈表中的任意一個結點開始,都可以很方便地訪問它的前一個結點和後一個結點。而且在雙向鏈表中,結點的插入、
刪除操作只涉及到指標的修改,時間複雜度是O(1)。其中,O(f(n))是時間複雜度函數,可以定量的描述演算法f(n)的執行時間。
圖2F為在雙向鏈表中插入死鎖檢測結點的示意圖。其中,假設雙向鏈表有五個結點,其中虛線部分為位址值,位址值是為了描述方便隨機設定的值,在實際應用中,可以根據情況設定其他值,對此本申請實施例不加以限定。這些位址值都會被放到某個變數當中,只要對變數進行賦值傳遞就能實現鏈表的構建。從圖2F中很容易看出藍色的箭頭組成了一個單鏈表,紅色的箭頭又組成了一個單鏈表(逆向的)。設p指向雙向鏈表中某結點,s指向待插入的新結點,將*s插入到*p的前面,插入時需要更改兩個指標變數。如圖2F所示,將q結點中原本指向p的後向指標指向s結點,同時將s結點的後向指標指向p結點的,在反向上,將p結點中原本指向q結點的前向指標指向s結點的,將s結點的前向指標指向q結點,從而實現了將s結點插入到雙向鏈表的p結點之前。
在本申請實施例中,死鎖檢測結點相當於圖2F中所述的結點的一種。因此,將死鎖檢測結點插入所述槽位中的雙向鏈表的具體過程與前述一致。
另外,在本申請另一個較佳的實施例中,所述第一佇列也可以為單向鏈表,與雙向鏈表相比,單向鏈表的特點是鏈表的連結方向是單向的,對鏈表的訪問要透過順序讀取從頭部開始,所以,從單向鏈表中的任意一個結點開
始,只可以固定地訪問其前一個結點,或固定地訪問其後一個結點。相較於單向鏈表,利用雙向鏈表作為第一佇列,效果更好,但是也可以利用單向鏈表作為第一佇列,對此本申請實施例不加以限定。
步驟260,定期將時間輪的指標移動到下一個槽位。
如前述,在實際應用中,時間輪的每個槽位具有一定的持續時間,從指標開始在某一槽位時刻開始,經過一個固定時間,指標則會移動到該槽位的後一個槽位。在本申請實施例中,可以創建一個監控進程,按照每個槽位的持續時間為單位,定期地將時間輪的指標移動到下一個槽位。
步驟270,對於指標指向的槽位,判斷所述槽位中的第一佇列的各死鎖檢測結點的死鎖時間閾值是否超過一個時間輪週期;如果一死鎖檢測結點的當前的死鎖時間閾值超過一個時間輪週期,則進入步驟280;如果一死鎖檢測結點的當前的死鎖時間閾值不超過一個時間輪週期,則進入步驟290。
如前述,在本申請實施例中,時間輪中每個槽位中所包含的死鎖檢測結點對應的死鎖時間閾值可能大於一個時間輪週期,對於此類死鎖檢測檢點,可能需要經過至少一個時間輪週期後,才可以判斷出其存在時間是否超過死鎖時間閾值,相對而言,會耗費比較多的時間。所以在本申請實施例中,對於指標指向的槽位,會判斷槽位中的第一佇列的各死鎖檢測結點的死鎖時間閾值是否超過一個時間
輪週期,若一死鎖檢測結點的當前的死鎖時間閾值超過一個時間輪週期,則當前的死鎖時間閾值減去一個時間輪週期所得到的結果,作為所述死鎖檢測結點的新的死鎖時間閾值,然後等待進入下一個時間輪週期,再執行步驟270進行判斷。
在本申請實施例中,本步驟仍可以由上述的監控進程執行。
步驟280,將當前的死鎖時間閾值減去一個時間輪週期所得到的結果,作為所述死鎖檢測結點的新的死鎖時間閾值。
在本申請實施例中,本步驟可以由上述的監控進程執行。
步驟290,確定相應被調用的應用程式介面死鎖。
在本申請另一較佳的實施例中,在步驟290之後,還包括:
步驟2110,刪除第一佇列中相應的死鎖檢測結點,並通知調用請求所對應的客戶端對所述應用程式介面的調用死鎖。
對於確認為死鎖的應用程式介面,不需要繼續的執行上述步驟再次判斷,所以會直接刪除第一佇列中相應的死鎖監測結點,在本申請實施例中,可以創建一個執行刪除操作的進程,相應地刪除第一佇列中對應確認為死鎖的應用程式介面的死鎖檢測結點。另外,在本申請實施例中,為了避免給調用該應用程式介面的客戶端造成不必要的損
失,例如客戶端持續等待應用程式介面回應而浪費時間等。在本申請實施例中,還可以通知調用請求所對應的客戶端對所述應用程式介面的調用死鎖,具體地,可以利用任何一種現有技術實現通知調用請求所對應的客戶端對所述應用程式介面的調用死鎖,對此本申請實施例不加以限定。
或,步驟2120,刪除第一佇列中相應的死鎖檢測結點,並重啟客戶端對所述應用程式介面的調用請求。
在本申請實施例中,對於已經確認為死鎖的應用程式介面,在刪除第一佇列中相應的死鎖檢測結點的同時,還可以重新開機客戶端對該應用程式介面的調用請求,然後再次執行步驟210以及後續的步驟。
在實際應用中,可以調用abort函數強制終止對死鎖應用程式介面調用的進程,然後系統會重新開機被強制終止的該進程,進而會重新開機客戶端對死鎖的應用程式介面的調用請求,避免死鎖對上層業務造成嚴重影響。
需要說明的是,上述的利用abort函數的調用請求重啟方式是一種比較激進的故障恢復方式,在本申請實施例中,可以預設該重啟方式不開啟,當然也可以根據需求預設開啟,對此本申請實施例不加以限定。
在本申請另一較佳的實施例中,在步驟2120之前,還包括:
步驟2130,接收客戶端對重啟全域標識的打開請求;所述重啟全域標識允許在確定相應被調用的應用程式
介面死鎖後,重啟客戶端對所述應用程式介面的調用請求。
在本申請實施例中,可以提供一個重啟全域標識,用於指示當發生API死鎖時,直接重新開機該用戶進程。其中,用戶進程中包括了對死鎖API的調用,因此,此時重啟全域標識可以重啟客戶端對發生死鎖的應用程式介面的調用請求。
此時在本申請實施例中,在執行步驟2120之前,首先會接收客戶端對重啟全域標識的打開請求。
步驟2140,根據所述打開請求,打開所述重啟全域標識。
如步驟2130所述,在根據所述打開請求,打開重啟全域標識,則會重啟客戶端對發生死鎖的應用程式介面的調用請求。
具體地,可以透過調用abort函數,對調用了死鎖API的用戶進程進行關閉。而在系統中,當一用戶進程被異常關閉時,在其他進程的作用下,亦即可以設置一個監控異常關閉的第一進程,該第一進程監控到對應客戶端的用戶進程關閉後,將該異常關閉的用戶進程重新開機。進而可以實現重啟客戶端對發生死鎖的應用程式介面的調用請求。
在本申請另一較佳的實施例中,步驟2110,包括:
子步驟2111,獲取死鎖的應用程式介面的資訊。
在本申請實施例中,對於步驟2110中所述的通知調
用請求所對應的客戶端對所述應用程式介面的調用死鎖,首先,需要獲取死鎖的應用程式的資訊,例如應用程式介面的名稱,功能等等。
子步驟2112,將所述死鎖的應用程式介面的資訊序列化為字串返回給客戶端;所述客戶端接收到所述字串後,對所述字串進行反序列化,得到死鎖的應用程式介面的資訊。
在本申請實施例中,對於獲取到的死鎖的應用程式介面的資訊,可以將其序列化為字串後再返回給客戶端。其中,序列化(Serialization)是將物件的狀態資訊轉換為可以儲存或傳輸的形式的過程。在本申請實施例中,物件的狀態資訊包括死鎖的應用程式介面的資訊,轉換的形式為字串。
相應的,在客戶端接收到上述字串後,會對字串進行反序列化,即執行序列化的逆過程,將字串恢復為未序列化之前的死鎖的應用程式介面資訊。
在本申請實施例中,客戶端還可以調用死鎖API資訊回饋介面,透過死鎖API資訊回饋介面將死鎖的API的資訊回饋給客戶端。該死鎖API資訊回饋介面回饋的資訊是:每種類型的API在當前時刻死鎖的次數。該死鎖API資訊回饋介面按如下形式定義:返回碼類型 函數名(序列化字串)
其中,返回碼類型是一個整數,標示本次查詢成功或失敗的原因;序列化字串是輸出參數,其將死鎖API的資
訊的序列化字串輸出,如果沒有API死鎖,則為空串。死鎖API資訊回饋介面返回後,客戶端檢查到返回碼成功,並且字串不為空時,說明存在API死鎖,則可以先將字串反序列化,得到一個查詢系統內部狀態的資料結構,該內部狀態的資料結構如圖2G,包含一個死鎖監測結果map<API名,死鎖次數>,該map的key是API函數名,value是當前時刻死鎖次數。另外,考慮到死鎖API資訊回饋介面的可擴展性,如果有新增的功能時,可以在圖2G的資料結構中,增加欄位“用戶傳入參數”或“傳出結果”用於擴展功能,而對它序列化成字串可以做到不改變函數介面,保證相容性。
在本申請另一較佳的實施例中,在步驟220之前,還包括:
步驟2150,接收客戶端針對所述應用程式介面配置的時間長度閾值。
在實際應用中,根據各個應用程式介面不同,以及調用各應用程式介面的客戶端不同等原因,各應用程式介面的時間長度閾值可能會有所不同。所以在本申請實施例中,在步驟220之前,可以接收客戶端針對應用程式介面配置的時間長度閾值。
在本申請實施例中,接收到的時間長度閾值即為後續的死鎖檢測結點所包括的死鎖時間閾值。
在本申請實施例中,在接收客戶端對一應用程式介面的調用請求後會創建針對調用請求的死鎖檢測結點,然後
將死鎖檢測結點插入第一佇列,其中,當所述調用請求對應用程式介面的調用結束時,刪除第一佇列中相應的死鎖檢測結點。進一步監控第一佇列中各死鎖檢測結點的存在時間是否超過死鎖時間閾值,如果檢測到任一死鎖檢測結點的存在時間超過死鎖時間閾值,則確定相應被調用的應用程式介面死鎖。從而可以基於死鎖監控結點,透過監控利用死鎖監控結點的存在時間,實現對API的死鎖監控,相對於先前技術中的死鎖檢測方法,本申請所述的應用程式介面死鎖監控方法適用性更強,而且精確度較高。
另外,在本申請中,基於死鎖時間閾值,時間輪週期以及槽位個數等參數,將死鎖檢測結點按照一定規則插入到位於不同時間輪的槽位中的雙向鏈表或單向鏈表中,鑒於雙向鏈表和單向鏈表插入和刪除的便捷特性,同時可以預置多個時間輪同時運行,從而可以進一步地提高死鎖監控的效率以及有效性。進一步地,雙向鏈表中的結點可以訪問與之相鄰的前後兩個方向上的結點,而單向鏈表中的結點只可以訪問與之相鄰的前向結點或者是與之相鄰的後向結點,因此相對而言,利用雙向鏈表作為第一佇列比單向鏈表的效率會更高。
實施例三
參照圖3,示出了本申請的一種應用程式介面死鎖監控方法實施例的步驟流程圖,具體可以包括如下步驟:
步驟310,接收客戶端對一應用程式介面的調用請
求。
步驟320,創建針對所述調用請求的死鎖檢測結點。
步驟330,計算所述死鎖檢測結點的優先級;所述死鎖檢測結點的優先級為截止時間;所述截止時間為檢測結點創建時間與死鎖時間閾值之和。
在本申請實施例中,用以儲存死鎖檢測結點的第一佇列為優先級佇列。其中,優先級佇列(priority queue)是0個或多個元素的集合,每個元素都有一個優先級,對於優先級相同的元素,可按先進先出次序處理或按任意優先級進行。對於優先級佇列而言,只可以按照優先級順序依次訪問其中的各個元素,每次從優先級佇列中取出的是當前優先級佇列中具有最高優先級的元素。優先級佇列是將元素按照優先級順序進行儲存的佇列,所以需要計算死鎖檢測結點的優先級。在本申請中,以截止時間作為死鎖檢測結點的優先級,截止時間越短,優先級越高。其中,截止時間為檢測結點創建時間與死鎖時間閾值之和。當然,考慮到創建時間區別不明顯,截止時間也可以只包括死鎖時間閾值,對此本申請不加以限定。
所以在本發明實施例中,若要將死鎖檢測結點插入到優先級佇列中,首先需要計算死鎖檢測結點的優先級,然後根據優先級,將該死鎖檢測結點插入到優先級佇列中。例如,若當前死鎖監測結點的優先級高於優先級佇列中全部的死鎖監測結點的優先級,則可以將當前死鎖監測結點置於優先級佇列的首部;若當前死鎖監測結點的優先級未
高於優先級佇列中全部的死鎖監測結點的優先級,則將該死鎖檢測結點插入到優先級佇列中,優先級大於當前死鎖檢測結點的各死鎖檢測結點中優先級最小的死鎖檢測結點之後。
步驟340,根據所述死鎖檢測結點的優先級,將所述死鎖檢測結點插入優先級佇列。
對於優先級佇列,用戶請求調用一API時,會在優先級佇列中插入對應的死鎖檢測結點,退出API時,在優先級佇列中刪除對應的死鎖檢測結點。對優先級佇列的插入、刪除操作,時間複雜度是O(logN),N是系統正在處理的請求數目。
因為優先級佇列是按照優先級進行排序儲存的,在獲取了死鎖檢測結點的優先級後,根據其優先級,將死鎖檢測結點插入到其所屬槽位中的優先級佇列中高於該死鎖檢測結點的優先級且優先級最小的死鎖檢測結點之後。需要注意的是,若在優先級佇列中插入一個死鎖檢測結點,此時在優先級小於該死鎖檢測結點在優先級佇列中的儲存位置都需要相應地下移一個死鎖檢測結點的位置。因此,在將多個死鎖檢測結點插入優先級佇列的過程中,已存入優先級佇列中的死鎖檢測結點的位置可能會被多次調整。所以相對而言,利用優先級佇列存放死鎖檢測結點的方法相對於實施例二中利用雙向鏈表存放死鎖檢測結點的方法的效率會低一些。
另外,在本申請的另一較佳的實施例中,也可以按照
利用多個優先級佇列儲存死鎖檢測結點。那麼,首先需要利用前述的雜湊演算法,將死鎖檢測結點分配到不同的優先級佇列,然後進一步執行步驟330,然後按照本步驟根據死鎖檢測結點的優先級,將死鎖檢測結點插入其所屬優先級佇列中的對應位置。
需要說明的是,若死鎖檢測結點對應的應用程式介面在截止時間內回應,則在優先級列表中會自動刪除該死鎖檢測結點。
步驟350,檢測優先級佇列首部的死鎖檢測結點的截止時間是否到達;如果優先級佇列首部的檢測結點的截止時間到達,則進入步驟360。
如前述,優先級佇列中的優先級越高的死鎖檢測結點的截止時間越短,所以,檢測優先級佇列首部的死鎖檢測結點的截止時間是否到達,如果優先級佇列首部的死鎖檢測結點的截止時間到達,則可以確定相應被調用的應用程式介面死鎖,然後可以將該死鎖檢測結點從優先級佇列中刪除。而若優先級佇列首部的死鎖檢測結點的截止時間未到達,則繼續等待直到該死鎖檢測結點被刪除或該死鎖檢測結點的截止時間到達。
在判斷完當前優先級佇列首部的死鎖檢測結點的截止時間是否到達後,該死鎖檢測結點可以從優先級佇列中刪除,然後其後一位死鎖檢測結點則成為優先級佇列首部的死鎖檢測結點,然後繼續執行本步驟。
步驟360,確定相應被調用的應用程式介面死鎖。
需要說明的是,對於方法實施例,為了簡單描述,故將其都表述為一系列的動作組合,但是本領域技術人員應該知悉,本申請實施例並不受所描述的動作順序的限制,因為依據本申請實施例,某些步驟可以採用其他順序或者同時進行。其次,本領域技術人員也應該知悉,說明書中所描述的實施例均屬於較佳實施例,所涉及的動作並不一定是本申請實施例所必須的。
在本申請實施例中,在接收客戶端對一應用程式介面的調用請求後會創建針對調用請求的死鎖檢測結點,然後計算死鎖檢測結點的優先級,並根據死鎖檢測結點的優先級將死鎖檢測結點插入優先級佇列中,其中,當所述調用請求對應用程式介面的調用結束時,刪除第一佇列中相應的死鎖檢測結點。進一步監控第一佇列中各死鎖檢測結點的存在時間是否超過死鎖時間閾值,如果檢測到任一死鎖檢測結點的存在時間超過死鎖時間閾值,則確定相應被調用的應用程式介面死鎖。從而可以基於死鎖監控結點,透過監控利用死鎖監控結點的存在時間,實現對API的死鎖監控,相對於先前技術中的死鎖檢測方法,本申請所述的應用程式介面死鎖監控方法適用性更強,而且精確度較高。
另外,在本申請實施例中,按照死鎖檢測結點的截止時間,獲取各死鎖檢測結點的優先級,然後將各死鎖檢測結點按照優先級從高到低的順序插入優先級佇列中,同樣可以進一步提高死鎖檢測的精確性以及效率,但是相對而
言,實施例二所述的利用雙向鏈表或者單向鏈表存放死鎖檢測結點的死鎖檢測方案比本實施例的效率更高。
實施例四
參照圖4,示出了本申請的一種應用程式介面死鎖監控裝置實施例的結構框圖,具體可以包括如下模組:
接收模組410,適於接收客戶端對一應用程式介面的調用請求。
創建模組420,適於創建針對所述調用請求的死鎖檢測結點。
插入模組430,適於將所述死鎖檢測結點插入第一佇列;其中,當所述調用請求對應用程式介面的調用結束時,刪除第一佇列中相應的死鎖檢測結點。
監控模組440,適於監控第一佇列中各死鎖檢測結點的存在時間是否超過死鎖時間閾值;如果檢測到任一死鎖檢測結點的存在時間超過死鎖時間閾值,則進入確認模組450。
確認模組450,適於確定相應被調用的應用程式介面死鎖。
在本申請實施例中,在接收客戶端對一應用程式介面的調用請求後會創建針對調用請求的死鎖檢測結點,然後將死鎖檢測結點插入第一佇列,其中,當所述調用請求對應用程式介面的調用結束時,刪除第一佇列中相應的死鎖檢測結點。進一步監控第一佇列中各死鎖檢測結點的存在
時間是否超過死鎖時間閾值,如果檢測到任一死鎖檢測結點的存在時間超過死鎖時間閾值,則確定相應被調用的應用程式介面死鎖。從而可以基於死鎖監控結點,透過監控利用死鎖監控結點的存在時間,實現對API的死鎖監控,相對於先前技術中的死鎖檢測方法,本申請所述的應用程式介面死鎖監控方法適用性更強,而且精確度較高。
實施例五
參照圖5,示出了本申請的一種應用程式介面死鎖監控裝置實施例的結構框圖,具體可以包括如下模組:
接收模組510,適於接收客戶端對一應用程式介面的調用請求。
創建模組520,適於創建針對所述調用請求的死鎖檢測結點。具體包括:創建子模組521,適於在調用應用程式介面時,在應用程式介面上下文環境資料結構中創建死鎖檢測結點。
死鎖檢測結點分配模組530,適於對死鎖檢測結點按照時間輪的個數進行雜湊計算,並根據計算結果將所述死鎖檢測結點分配到對應雜湊計算結果的時間輪。具體包括:
雜湊值獲取子模組531,適於獲取死鎖檢測結點的記憶體位址的雜湊值。
取餘子模組532,適於將所述雜湊值對時間輪的數量取餘數。
死鎖檢測結點分配子模組533,適於根據餘數與時間輪的對應關係,將死鎖檢測結點分配到相應的時間輪中。
槽位計算模組540,適於根據當前的死鎖時間閾值和時間輪中指標所在的槽位,以及整個時間輪週期,計算對應所述死鎖檢測結點的槽位。
插入模組550,適於將所述死鎖檢測結點插入第一佇列;其中,當所述調用請求對應用程式介面的調用結束時,刪除第一佇列中相應的死鎖檢測結點。具體包括:
第一插入子模組551,適於將所述死鎖檢測結點插入所述槽位中的第一佇列。
監控模組560,適於監控第一佇列中各死鎖檢測結點的存在時間是否超過死鎖時間閾值;如果檢測到任一死鎖檢測結點的存在時間超過死鎖時間閾值,則進入確認模組。具體包括:
指標移動子模組561,適於定期將時間輪的指標移動到下一個槽位。
死鎖時間判斷子模組562,適於指標指向的槽位,判斷所述槽位中的第一佇列的各死鎖檢測結點的死鎖時間閾值是否超過一個時間輪週期;如果一死鎖檢測結點的當前的死鎖時間閾值超過一個時間輪週期,則進入死鎖時間閾值更新子模組;如果一死鎖檢測結點的當前的死鎖時間閾值不超過一個時間輪週期,則進入確認模組。
死鎖時間閾值更新子模組563,適於將當前的死鎖時間閾值減去一個時間輪週期所得到的結果,作為所述死鎖
檢測結點的新的死鎖時間閾值。
確認模組570,適於確定相應被調用的應用程式介面死鎖。
在本申請另一較佳的實施例中,在確認模組570之後,還包括:
刪除通知模組580,適於刪除第一佇列中相應的死鎖檢測結點,並通知調用請求所對應的客戶端對所述應用程式介面的調用死鎖。
或,刪除重啟模組590,適於刪除第一佇列中相應的死鎖檢測結點,並重啟客戶端對所述應用程式介面的調用請求。
在本申請另一較佳的實施例中,在刪除通知模組580之前,還包括:
打開請求接收模組590,適於接收客戶端對重啟全域標識的打開請求;所述重啟全域標識允許在確定相應被調用的應用程式介面死鎖後,重啟客戶端對所述應用程式介面的調用請求。
重啟全域標識開啟模組5110,適於根據所述打開請求,打開所述重啟全域標識。
在本申請另一較佳的實施例中,所述刪除通知模組580,包括:
應用程式介面資訊獲取子模組581,適於獲取死鎖的應用程式介面的資訊。
序列化子模組582,適於將所述死鎖的應用程式介面
的資訊序列化為字串返回給客戶端;所述客戶端接收到所述字串後,對所述字串進行反序列化,得到死鎖的應用程式介面的資訊。
在本申請另一較佳的實施例中,在創建模組之前,還包括:
時間長度閾值接收模組5120,適於接收客戶端針對所述應用程式介面配置的時間長度閾值。
在本申請實施例中,在接收客戶端對一應用程式介面的調用請求後會創建針對調用請求的死鎖檢測結點,然後將死鎖檢測結點插入第一佇列,其中,當所述調用請求對應用程式介面的調用結束時,刪除第一佇列中相應的死鎖檢測結點。進一步監控第一佇列中各死鎖檢測結點的存在時間是否超過死鎖時間閾值,如果檢測到任一死鎖檢測結點的存在時間超過死鎖時間閾值,則確定相應被調用的應用程式介面死鎖。從而可以基於死鎖監控結點,透過監控利用死鎖監控結點的存在時間,實現對API的死鎖監控,相對於先前技術中的死鎖檢測方法,本申請所述的應用程式介面死鎖監控方法適用性更強,而且精確度較高。
另外,在本申請中,基於死鎖時間閾值,時間輪週期以及槽位個數等參數,將死鎖檢測結點按照一定規則插入到位於不同時間輪的槽位中的雙向鏈表或單向鏈表中,鑒於雙向鏈表和單向鏈表插入和刪除的便捷特性,同時可以預置多個時間輪同時運行,從而可以進一步地提高死鎖監控的效率以及有效性。進一步地,雙向鏈表中的結點可以
訪問與之相鄰的前後兩個方向上的結點,而單向鏈表中的結點只可以訪問與之相鄰的前向結點或者是與之相鄰的後向結點,因此相對而言,利用雙向鏈表作為第一佇列比單向鏈表的效率會更高。
實施例六
參照圖6,示出了本申請的一種應用程式介面死鎖監控裝置實施例的結構框圖,具體可以包括如下模組:
接收模組610,適於接收客戶端對一應用程式介面的調用請求。
創建模組620,適於創建針對所述調用請求的死鎖檢測結點。
插入模組630,適於將所述死鎖檢測結點插入第一佇列;其中,當所述調用請求對應用程式介面的調用結束時,刪除第一佇列中相應的死鎖檢測結點。在本申請實施例中,所述第一佇列為優先級佇列,則插入模組630,具體包括:
優先級計算子模組631,適於計算所述死鎖檢測結點的優先級;所述死鎖檢測結點的優先級為截止時間;所述截止時間為檢測結點創建時間與死鎖時間閾值之和。
第二插入子模組632,適於根據所述死鎖檢測結點的優先級,將所述死鎖檢測結點插入優先級佇列。
監控模組640,適於監控第一佇列中各死鎖檢測結點的存在時間是否超過死鎖時間閾值;如果檢測到任一死鎖
檢測結點的存在時間超過死鎖時間閾值,則進入確認模組650。具體包括:
截止時間檢測模組641,適於檢測優先級佇列首部的死鎖檢測結點的截止時間是否到達;如果優先級佇列首部的檢測結點的截止時間到達,則進入確認模組650。
確認模組650,適於確定相應被調用的應用程式介面死鎖。
在本申請實施例中,在接收客戶端對一應用程式介面的調用請求後會創建針對調用請求的死鎖檢測結點,然後計算死鎖檢測結點的優先級,並根據死鎖檢測結點的優先級將死鎖檢測結點插入優先級佇列中,其中,當所述調用請求對應用程式介面的調用結束時,刪除第一佇列中相應的死鎖檢測結點。進一步監控第一佇列中各死鎖檢測結點的存在時間是否超過死鎖時間閾值,如果檢測到任一死鎖檢測結點的存在時間超過死鎖時間閾值,則確定相應被調用的應用程式介面死鎖。從而可以基於死鎖監控結點,透過監控利用死鎖監控結點的存在時間,實現對API的死鎖監控,相對於先前技術中的死鎖檢測方法,本申請所述的應用程式介面死鎖監控方法適用性更強,而且精確度較高。
另外,在本申請實施例中,按照死鎖檢測結點的截止時間,獲取各死鎖檢測結點的優先級,然後將各死鎖檢測結點按照優先級從高到低的順序插入優先級佇列中,同樣可以進一步提高死鎖檢測的精確性以及效率,但是相對而
言,實施例二所述的利用雙向鏈表或者單向鏈表存放死鎖檢測結點的死鎖檢測方案比本實施例的效率更高。
對於裝置實施例而言,由於其與方法實施例基本相似,所以描述的比較簡單,相關之處參見方法實施例的部分說明即可。
本說明書中的各個實施例均採用遞進的方式描述,每個實施例重點說明的都是與其他實施例的不同之處,各個實施例之間相同相似的部分互相參見即可。
本領域內的技術人員應明白,本申請實施例的實施例可提供為方法、裝置、或電腦程式產品。因此,本申請實施例可採用完全硬體實施例、完全軟體實施例、或結合軟體和硬體方面的實施例的形式。而且,本申請實施例可採用在一個或多個其中包含有電腦可用程式碼的電腦可用儲存媒體(包括但不限於磁碟記憶體、CD-ROM、光學記憶體等)上實施的電腦程式產品的形式。
在一個典型的配置中,所述電腦設備包括一個或多個處理器(CPU)、輸入/輸出介面、網路介面和記憶體。記憶體可能包括電腦可讀媒體中的非永久性記憶體,隨機存取記憶體(RAM)和/或非揮發性記憶體等形式,如唯讀記憶體(ROM)或快閃記憶體(flash RAM)。記憶體是電腦可讀媒體的示例。電腦可讀媒體包括永久性和非永久性、可移動和非可移動媒體可以由任何方法或技術來實現資訊儲存。資訊可以是電腦可讀指令、資料結構、程式的模組或其他資料。電腦的儲存媒體的例子包括,但不限於相變記憶體
(PRAM)、靜態隨機存取記憶體(SRAM)、動態隨機存取記憶體(DRAM)、其他類型的隨機存取記憶體(RAM)、唯讀記憶體(ROM)、電可擦除可程式設計唯讀記憶體(EEPROM)、快閃記憶體或其他記憶體技術、唯讀光碟唯讀記憶體(CD-ROM)、數位多功能光碟(DVD)或其他光學儲存、磁盒式磁帶,磁帶磁片儲存或其他磁性存放裝置或任何其他非傳輸媒體,可用於儲存可以被計算設備訪問的資訊。按照本文中的界定,電腦可讀媒體不包括非持續性的電腦可讀媒體(transitory media),如調製的資料信號和載波。
本申請實施例是參照根據本申請實施例的方法、終端設備(系統)、和電腦程式產品的流程圖和/或方框圖來描述的。應理解可由電腦程式指令實現流程圖和/或方框圖中的每一流程和/或方框、以及流程圖和/或方框圖中的流程和/或方框的結合。可提供這些電腦程式指令到通用電腦、專用電腦、嵌入式處理機或其他可程式設計資料處理終端設備的處理器以產生一個機器,使得透過電腦或其他可程式設計資料處理終端設備的處理器執行的指令產生用於實現在流程圖一個流程或多個流程和/或方框圖一個方框或多個方框中指定的功能的裝置。
這些電腦程式指令也可儲存在能引導電腦或其他可程式設計資料處理終端設備以特定方式工作的電腦可讀記憶體中,使得儲存在該電腦可讀記憶體中的指令產生包括指令裝置的製造品,該指令裝置實現在流程圖一個流程或多
個流程和/或方框圖一個方框或多個方框中指定的功能。
這些電腦程式指令也可裝載到電腦或其他可程式設計資料處理終端設備上,使得在電腦或其他可程式設計終端設備上執行一系列操作步驟以產生電腦實現的處理,從而在電腦或其他可程式設計終端設備上執行的指令提供用於實現在流程圖一個流程或多個流程和/或方框圖一個方框或多個方框中指定的功能的步驟。
儘管已描述了本申請實施例的較佳實施例,但本領域內的技術人員一旦得知了基本創造性概念,則可對這些實施例做出另外的變更和修改。所以,所附申請專利範圍意欲解釋為包括較佳實施例以及落入本申請實施例範圍的所有變更和修改。
最後,還需要說明的是,在本文中,諸如第一和第二等之類的關係術語僅僅用來將一個實體或者操作與另一個實體或操作區分開來,而不一定要求或者暗示這些實體或操作之間存在任何這種實際的關係或者順序。而且,術語“包括”、“包含”或者其任何其他變體意在涵蓋非排他性的包含,從而使得包括一系列要素的過程、方法、物品或者終端設備不僅包括那些要素,而且還包括沒有明確列出的其他要素,或者是還包括為這種過程、方法、物品或者終端設備所固有的要素。在沒有更多限制的情況下,由語句“包括一個……”限定的要素,並不排除在包括所述要素的過程、方法、物品或者終端設備中還存在另外的相同要素。
以上對本申請所提供的一種應用程式介面死鎖監控方法和一種應用程式介面死鎖監控裝置,進行了詳細介紹,本文中應用了具體個例對本申請的原理及實施方式進行了闡述,以上實施例的說明只是用於幫助理解本申請的方法及其核心思想;同時,對於本領域的一般技術人員,依據本申請的思想,在具體實施方式及應用範圍上均會有改變之處,綜上所述,本說明書內容不應理解為對本申請的限制。
Claims (30)
- 一種應用程式介面死鎖監控方法,其特徵在於,包括:接收客戶端對一應用程式介面的調用請求;創建針對該調用請求的死鎖檢測結點;將該死鎖檢測結點插入第一佇列;其中,當該調用請求對應用程式介面的調用結束時,刪除第一佇列中相應的死鎖檢測結點;監控第一佇列中各死鎖檢測結點的存在時間是否超過死鎖時間閾值;如果檢測到任一死鎖檢測結點的存在時間超過死鎖時間閾值,則確定相應被調用的應用程式介面死鎖。
- 根據申請專利範圍第1項所述的方法,其中,所述將該死鎖檢測結點插入第一佇列的步驟之前,還包括:根據當前的死鎖時間閾值和時間輪中指標所在的槽位,以及整個時間輪週期,計算對應該死鎖檢測結點的槽位;所述將該死鎖檢測結點插入第一佇列的步驟包括:將該死鎖檢測結點插入該槽位中的第一佇列。
- 根據申請專利範圍第2項所述的方法,其中,所述監控第一佇列中各死鎖檢測結點的存在時間是否超過死鎖時間閾值的步驟,包括:定期將時間輪的指標移動到下一個槽位;對於指標指向的槽位,判斷該槽位中的第一佇列的各 死鎖檢測結點的死鎖時間閾值是否超過一個時間輪週期;如果一死鎖檢測結點的當前的死鎖時間閾值超過一個時間輪週期,則將當前的死鎖時間閾值減去一個時間輪週期所得到的結果,作為該死鎖檢測結點的新的死鎖時間閾值;如果一死鎖檢測結點的當前的死鎖時間閾值不超過一個時間輪週期,則確定相應被調用的應用程式介面死鎖。
- 根據申請專利範圍第2或3項所述的方法,其中,在根據當前的死鎖時間閾值和時間輪中指標所在的槽位,以及整個時間輪週期,計算對應該死鎖檢測結點的槽位的步驟之前,還包括:對死鎖檢測結點按照時間輪的個數進行雜湊計算,並根據計算結果將該死鎖檢測結點分配到對應雜湊計算結果的時間輪。
- 根據申請專利範圍第4項所述的方法,其中,所述對死鎖檢測結點按照時間輪的個數進行雜湊計算,並根據計算結果將該死鎖檢測結點分配到對應的時間輪的步驟,包括:獲取死鎖檢測結點的記憶體位址的雜湊值;將該雜湊值對時間輪的數量取餘數;根據餘數與時間輪的對應關係,將死鎖檢測結點分配到相應的時間輪中。
- 根據申請專利範圍第1項所述的方法,其中,在確定相應被調用的應用程式介面死鎖的步驟之後,還包 括:刪除第一佇列中相應的死鎖檢測結點,並通知調用請求所對應的客戶端對該應用程式介面的調用死鎖;或,刪除第一佇列中相應的死鎖檢測結點,並重啟客戶端對該應用程式介面的調用請求。
- 根據申請專利範圍第6項所述的方法,其中,所述刪除第一佇列中相應的死鎖檢測結點,並重啟客戶端對該應用程式介面的調用請求的步驟之前,還包括:接收客戶端對重啟全域標識的打開請求;該重啟全域標識允許在確定相應被調用的應用程式介面死鎖後,重啟客戶端對該應用程式介面的調用請求;根據該打開請求,打開該重啟全域標識。
- 根據申請專利範圍第6項所述的方法,其中,所述通知調用請求所對應的客戶端對該應用程式介面的調用死鎖的步驟,包括:獲取死鎖的應用程式介面的資訊;將該死鎖的應用程式介面的資訊序列化為字串返回給客戶端;該客戶端接收到該字串後,對該字串進行反序列化,得到死鎖的應用程式介面的資訊。
- 根據申請專利範圍第1項所述的方法,其中,在創建針對該調用請求的死鎖檢測結點之前,還包括:接收客戶端針對該應用程式介面配置的時間長度閾值。
- 根據申請專利範圍第2項所述的方法,其中,該 時間輪的每個槽位配置有自旋鎖;該自旋鎖在第一佇列被操作之前添加,以及在第一佇列被操作完畢之後釋放。
- 根據申請專利範圍第1項所述的方法,其中,該第一佇列包括雙向鏈表或單向鏈表。
- 根據申請專利範圍第11項所述的方法,其中,當該第一佇列為雙向鏈表時,該死鎖檢測結點的資料結構包括:雙向鏈表結點參數、死鎖時間閾值參數、時間輪雜湊索引參數、時間輪指標槽位參數。
- 根據申請專利範圍第12項所述的方法,其中,所述創建針對該調用請求的死鎖檢測結點的步驟,包括:在調用應用程式介面時,在應用程式介面上下文環境資料結構中創建死鎖檢測結點。
- 根據申請專利範圍第1項所述的方法,其中,該第一佇列為優先級佇列,則所述將該死鎖檢測結點插入第一佇列的步驟包括:計算該死鎖檢測結點的優先級;該死鎖檢測結點的優先級為截止時間;該截止時間為檢測結點創建時間與死鎖時間閾值之和;根據該死鎖檢測結點的優先級,將該死鎖檢測結點插入優先級佇列。
- 根據申請專利範圍第14項所述的方法,其中,所述監控第一佇列中各死鎖檢測結點的存在時間是否超過死鎖時間閾值的步驟,包括: 檢測優先級佇列首部的死鎖檢測結點的截止時間是否到達;如果優先級佇列首部的檢測結點的截止時間到達,則確定相應被調用的應用程式介面死鎖。
- 一種應用程式介面死鎖監控裝置,其特徵在於,包括:接收模組,適於接收客戶端對一應用程式介面的調用請求;創建模組,適於創建針對該調用請求的死鎖檢測結點;插入模組,適於將該死鎖檢測結點插入第一佇列;其中,當該調用請求對應用程式介面的調用結束時,刪除第一佇列中相應的死鎖檢測結點;監控模組,適於監控第一佇列中各死鎖檢測結點的存在時間是否超過死鎖時間閾值;如果檢測到任一死鎖檢測結點的存在時間超過死鎖時間閾值,則進入確認模組;確認模組,適於確定相應被調用的應用程式介面死鎖。
- 根據申請專利範圍第16項所述的裝置,其中,在該插入模組之前,還包括:槽位計算模組,適於根據當前的死鎖時間閾值和時間輪中指標所在的槽位,以及整個時間輪週期,計算對應該死鎖檢測結點的槽位;該插入模組包括:插入子模組,適於將該死鎖檢測結 點插入該槽位中的第一佇列。
- 根據申請專利範圍第17項所述的裝置,其中,該監控模組,包括:指標移動子模組,適於定期將時間輪的指標移動到下一個槽位;死鎖時間判斷子模組,適於指標指向的槽位,判斷該槽位中的第一佇列的各死鎖檢測結點的死鎖時間閾值是否超過一個時間輪週期;如果一死鎖檢測結點的當前的死鎖時間閾值超過一個時間輪週期,則進入死鎖時間閾值更新子模組;如果一死鎖檢測結點的當前的死鎖時間閾值不超過一個時間輪週期,則進入確認模組;死鎖時間閾值更新子模組,適於將當前的死鎖時間閾值減去一個時間輪週期所得到的結果,作為該死鎖檢測結點的新的死鎖時間閾值。
- 根據申請專利範圍第17或18項所述的裝置,其中,在該槽位計算模組之前,還包括:死鎖檢測結點分配模組,適於對死鎖檢測結點按照時間輪的個數進行雜湊計算,並根據計算結果將該死鎖檢測結點分配到對應雜湊計算結果的時間輪。
- 根據申請專利範圍第19項所述的裝置,其中,該死鎖檢測結點分配模組,包括:雜湊值獲取子模組,適於獲取死鎖檢測結點的記憶體位址的雜湊值;取餘子模組,適於將該雜湊值對時間輪的數量取餘 數;死鎖檢測結點分配子模組,適於根據餘數與時間輪的對應關係,將死鎖檢測結點分配到相應的時間輪中。
- 根據申請專利範圍第16項所述的裝置,其中,在該確認模組之後,還包括:刪除通知模組,適於刪除第一佇列中相應的死鎖檢測結點,並通知調用請求所對應的客戶端對該應用程式介面的調用死鎖;或,刪除重啟模組,適於刪除第一佇列中相應的死鎖檢測結點,並重啟客戶端對該應用程式介面的調用請求。
- 根據申請專利範圍第21項所述的裝置,其中,在該刪除重啟模組之前,還包括:打開請求接收模組,適於接收客戶端對重啟全域標識的打開請求;該重啟全域標識允許在確定相應被調用的應用程式介面死鎖後,重啟客戶端對該應用程式介面的調用請求;重啟全域標識開啟模組,適於根據該打開請求,打開該重啟全域標識。
- 根據申請專利範圍第21項所述的裝置,其中,該刪除通知模組,包括:應用程式介面資訊獲取子模組,適於獲取死鎖的應用程式介面的資訊;序列化子模組,適於將該死鎖的應用程式介面的資訊序列化為字串返回給客戶端;該客戶端接收到該字串後, 對該字串進行反序列化,得到死鎖的應用程式介面的資訊。
- 根據申請專利範圍第16項所述的裝置,其中,在該創建模組之前,還包括:時間長度閾值接收模組,適於接收客戶端針對該應用程式介面配置的時間長度閾值。
- 根據申請專利範圍第17項所述的裝置,其中,該時間輪的每個槽位配置有自旋鎖;該自旋鎖在第一佇列被操作之前添加,以及在第一佇列被操作完畢之後釋放。
- 根據申請專利範圍第16項所述的裝置,其中,該第一佇列包括雙向鏈表或單向鏈表。
- 根據申請專利範圍第26項所述的裝置,其中,當該第一佇列為雙向鏈表時,該死鎖檢測結點的資料結構包括:雙向鏈表結點參數、死鎖時間閾值參數、時間輪雜湊索引參數、時間輪指標槽位參數。
- 根據申請專利範圍第27項所述的裝置,其中,該創建模組,包括:創建子模組,適於在調用應用程式介面時,在應用程式介面上下文環境資料結構中創建死鎖檢測結點。
- 根據申請專利範圍第26項該的裝置,其中,該第一佇列為優先級佇列,則該插入模組,包括:優先級計算子模組,適於計算該死鎖檢測結點的優先級;該死鎖檢測結點的優先級為截止時間;該截止時間為 檢測結點創建時間與死鎖時間閾值之和;插入子模組,適於根據該死鎖檢測結點的優先級,將該死鎖檢測結點插入優先級佇列。
- 根據申請專利範圍第29項所述的裝置,其中,該監控模組,包括:截止時間檢測模組,適於檢測優先級佇列首部的死鎖檢測結點的截止時間是否到達;如果優先級佇列首部的檢測結點的截止時間到達,則進入確認模組。
Applications Claiming Priority (2)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201610195050.9 | 2016-03-30 | ||
CN201610195050.9A CN107291558B (zh) | 2016-03-30 | 2016-03-30 | 一种应用程序接口死锁监控方法和装置 |
Publications (2)
Publication Number | Publication Date |
---|---|
TW201737085A true TW201737085A (zh) | 2017-10-16 |
TWI738722B TWI738722B (zh) | 2021-09-11 |
Family
ID=59963462
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
TW106105612A TWI738722B (zh) | 2016-03-30 | 2017-02-20 | 應用程式介面死鎖監控方法和裝置 |
Country Status (3)
Country | Link |
---|---|
CN (1) | CN107291558B (zh) |
TW (1) | TWI738722B (zh) |
WO (1) | WO2017167062A1 (zh) |
Cited By (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN111221697A (zh) * | 2018-11-23 | 2020-06-02 | 阿里巴巴集团控股有限公司 | 调用监听方法、操作检测方法、装置及计算设备 |
Families Citing this family (10)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN110554932A (zh) * | 2019-08-02 | 2019-12-10 | 恒鸿达科技有限公司 | 一种api模块异常检测方法 |
CN110569131B (zh) * | 2019-08-22 | 2022-03-15 | 北京华捷艾米科技有限公司 | 一种信号量管理系统及信号量管理方法 |
CN111782414B (zh) * | 2020-05-12 | 2024-04-19 | 北京皮尔布莱尼软件有限公司 | 一种延时消息处理方法及系统 |
CN111858075A (zh) * | 2020-06-30 | 2020-10-30 | 广东浪潮大数据研究有限公司 | 一种死锁检测的方法、系统、设备及可读存储介质 |
CN112039701B (zh) * | 2020-08-27 | 2023-08-15 | 中国平安财产保险股份有限公司 | 接口调用监控方法、装置、设备及存储介质 |
CN112015397B (zh) * | 2020-09-07 | 2023-09-26 | 深圳职业技术学院 | 环路检测方法及系统 |
CN112905352A (zh) * | 2021-01-29 | 2021-06-04 | 北京深演智能科技股份有限公司 | 节点死锁处理的方法和装置 |
CN113760508A (zh) * | 2021-08-18 | 2021-12-07 | 成都安恒信息技术有限公司 | 一种基于时间轮的脚本下发调度方法 |
CN113852700A (zh) * | 2021-09-26 | 2021-12-28 | 五八同城信息技术有限公司 | 一种虚拟号码处理方法和装置 |
CN114185623B (zh) * | 2021-12-20 | 2024-04-19 | 中国工商银行股份有限公司 | 一种应用启动过程中死锁的处理方法及装置 |
Family Cites Families (14)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US7958512B2 (en) * | 2005-10-31 | 2011-06-07 | Microsoft Corporation | Instrumentation to find the thread or process responsible for an application failure |
TW200841189A (en) * | 2006-12-27 | 2008-10-16 | Ibm | Technique for accurately detecting system failure |
CN102053861B (zh) * | 2009-10-30 | 2014-03-12 | 国际商业机器公司 | 并行程序中死锁检测的方法和系统 |
CN102222015B (zh) * | 2010-04-13 | 2016-04-27 | 三星电子(中国)研发中心 | 检测多线程程序中的死锁的方法及系统 |
CN102222016B (zh) * | 2010-04-16 | 2013-12-04 | 国际商业机器公司 | 程序死锁检测方法和系统 |
CN102073588B (zh) * | 2010-12-28 | 2013-11-20 | 北京邮电大学 | 一种基于代码静态分析的多线程死锁检测方法及系统 |
CN103246552B (zh) * | 2012-02-14 | 2018-03-09 | 腾讯科技(深圳)有限公司 | 防止线程出现阻塞的方法和装置 |
WO2013154549A1 (en) * | 2012-04-11 | 2013-10-17 | Hewlett-Packard Development Company, L.P. | Prioritized conflict handling in a system |
US9042222B2 (en) * | 2012-11-28 | 2015-05-26 | Broadcom Corporation | Deadlock recovery for distributed devices |
CN103399818B (zh) * | 2013-08-13 | 2016-05-18 | 中国科学技术大学苏州研究院 | 操作系统中的死锁检测方法 |
CN103761148B (zh) * | 2014-01-26 | 2017-04-05 | 北京京东尚科信息技术有限公司 | 集群定时调度任务的控制方法 |
TWI556612B (zh) * | 2014-04-29 | 2016-11-01 | 鼎捷軟件股份有限公司 | 適用於遠端程序呼叫的逾時控制單元與遠端程序呼叫方法 |
CN104636259B (zh) * | 2015-03-18 | 2020-05-22 | 厦门雅迅网络股份有限公司 | 一种基于运行期动态跟踪的函数执行超时与死锁检测方法 |
CN105426234B (zh) * | 2015-10-30 | 2019-02-19 | 小米科技有限责任公司 | 数据库死锁检测方法及装置 |
-
2016
- 2016-03-30 CN CN201610195050.9A patent/CN107291558B/zh active Active
-
2017
- 2017-02-20 TW TW106105612A patent/TWI738722B/zh active
- 2017-03-21 WO PCT/CN2017/077448 patent/WO2017167062A1/zh active Application Filing
Cited By (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN111221697A (zh) * | 2018-11-23 | 2020-06-02 | 阿里巴巴集团控股有限公司 | 调用监听方法、操作检测方法、装置及计算设备 |
CN111221697B (zh) * | 2018-11-23 | 2024-02-27 | 阿里巴巴集团控股有限公司 | 调用监听方法、操作检测方法、装置及计算设备 |
Also Published As
Publication number | Publication date |
---|---|
WO2017167062A1 (zh) | 2017-10-05 |
CN107291558A (zh) | 2017-10-24 |
TWI738722B (zh) | 2021-09-11 |
CN107291558B (zh) | 2020-11-24 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
TW201737085A (zh) | 應用程式介面死鎖監控方法和裝置 | |
EP3547648B1 (en) | Service processing and consensus method and device | |
US11086665B2 (en) | Scheduling services for quantum computing | |
US7865684B2 (en) | Managing message queues | |
CN110622478B (zh) | 数据同步处理的方法和装置 | |
US9491238B2 (en) | Rapid client-side component processing based on component relationships | |
US20170083579A1 (en) | Distributed data processing method and system | |
BR112020019153A2 (pt) | Sistema e método para processamento de estado de processo | |
US11675622B2 (en) | Leader election with lifetime term | |
CN109255057B (zh) | 区块生成方法、装置、设备及存储介质 | |
US20120297360A1 (en) | Dynamic code generation and memory management for component object model data constructs | |
WO2018129757A1 (zh) | 一种基于龙芯平台的通信控制框架 | |
US10498817B1 (en) | Performance tuning in distributed computing systems | |
EP3485375B1 (en) | Workflow-based object destruction | |
US9141439B2 (en) | System and method for reporting a synchronization event in a runtime system of a computer system | |
CN115794356B (zh) | 基于ssh服务器的多线程同步连接处理方法 | |
US11907296B2 (en) | Method and system for traversing an object graph using traversal context objects | |
WO2024066005A1 (zh) | 重放区块链交易的方法及装置 | |
CN116594752A (zh) | 流程调度方法、装置、设备、介质和程序产品 | |
Zhang et al. | Performal: Formal Verification of Latency Properties for Distributed Systems | |
CN109344630B (zh) | 区块生成方法、装置、设备和存储介质 | |
CN112732453A (zh) | 跨线程消息处理方法、装置、系统和计算机可读存储介质 | |
CN111476663B (zh) | 一种数据处理方法、装置、节点设备及存储介质 | |
CN116737408A (zh) | 一种消息处理方法及装置 | |
US20210004243A1 (en) | Deserialization method and apparatus, and computing device |