背景:以前一個專案使用了netcore 2.1,并發大也扛住了,覺得不錯,
最近新專案使用了netcore 3.1作為介面端
問題:現在介面部署在centos 7上面,介面運行一段時間后,會假死
什么是假死,我來描述一下
所有介面用了ActionFilter過濾,OnActionExecuting(介面執行中事件)能進來,資料庫也能訪問,
OnActionExecuted(執行后)就死活進不來,而且是所有介面,
這就導致了介面沒有回傳值,前端一直等待直至超時。
自查記錄:
1、通過查看介面狀態,發現介面卡了1200秒左右后又能正常訪問了,如圖,感覺所有介面都在等待似的

介面堵住時狀態如下,一直在executing

2、一開始以為是部署到Linux的問題,后來在windows部署后也出現了一樣的問題
3、介面假死時,swagger生成的靜態介面頁面能正常訪問
求助:這個問題困擾了好多天了,不知各位是否有解決辦法或者提供下排查思路
uj5u.com熱心網友回復:
是不是有什么測驗代碼沒刪掉uj5u.com熱心網友回復:
應該沒有,能正常跑一段時間,時間不定,然后就假死了
uj5u.com熱心網友回復:
可能是:1. 系統有重要計算任務,任務完成后就又正常了。2. 系統在自我維護、自我調適,過一段時間這種情況就比較少了。3. 發現重要資料,需要及時處理。基本不需要介入管理,因為不會影響重要任務的執行。uj5u.com熱心網友回復:
這個問題影響的并不是本身介面,其他介面也一樣,按理來說每個介面被創建的時候應該都是單獨的實體,與其他介面無關聯,可都卡在了介面回傳處
uj5u.com熱心網友回復:
看樣子,應該是所有介面都會訪問同一個特定資源(資料庫,io,亦或者其他同步請求)時被阻塞住,在對方120s的超時設定下被釋放后才執行后面的方法。建議,還是先檢查以下業務邏輯代碼,并對呼叫每個三方的介面做一下日志記錄。
uj5u.com熱心網友回復:
redis和資料庫都用了單例模式且用了lock鎖,我排查下這個看看
但資料連接數一直都還是1,redis也沒有崩潰
uj5u.com熱心網友回復:
看看 OnActionExecuted 里都做了啥轉載請註明出處,本文鏈接:https://www.uj5u.com/net/26286.html
標籤:ASP.NET
