線程阻塞導致的性能問題分析


  近期一項目反饋,在月底時出現某功能反應異常卡頓的情況,總結規律為,只要某個耗時較長的大查詢執行時,被影響的功能就不能正常使用。懷疑出現阻塞問題,先在數據庫層面跟蹤未發現阻塞等異常,跟蹤被影響的功能,發現沒有耗時較長的SQL,但是出現兩個SQL之間時間間隔很長的情況。同時檢查fiddler跟蹤的webservices信息,發現有一個webs持續時間超長。推測可能為應用服務器出現線程阻塞。在問題重現時,抓取w3wp.exe進程dump。分析過程如下:

 先檢查是否存在線程阻塞的情況,發現系統當前存在線程阻塞,其中阻塞源為94號線程

 

根據Tess的解釋:MonitorHeld shows 11. The owner has 1 and then each waiter has 2, so this means we have one owner and 5 waiters. We are synchronizing on a System.Object  and the owning thread is thread 94.

 

  檢查線程狀態

發現如下96號線程在等待

打印阻塞源94號線程

 

查看96號線程堆棧信息,在CalculateEx()出現等待

結合反編譯代碼,檢查發現對應位置處鎖定的粒度太大。。。

 

 

 

 

 

https://blogs.msdn.microsoft.com/tess/2006/01/09/a-hang-scenario-locks-and-critical-sections/


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM