我正在努力調試一個服務器進程在60-90天內消耗大量句柄的問題。服務器父進程產生並循環許多孩子,每個孩子每小時回收一次。父母的進程句柄數將在兩個月後增加到40k,但我不確定這些句柄的引用是什麼。我如何識別此過程已打開的處理?
使用ProcessExplorer,我可以看到句柄數和一些句柄(下圖是一個例子)。但是,列出的手柄數量並不接近上方窗格中顯示的40k數字。我在手柄窗口中有大約100個條目,並查看它們的屬性,我可以用這個窗口總計約3k的句柄,與總共40k的句柄相差甚遠。
我已經設置父母循環它的孩子每隔幾分鐘嘗試,看看它是否有與循環兒童有關,但監測一個小時似乎並沒有導致父進程處理計數上升任何。在這段時間裏它會上升和下降,但不會呈上升趨勢。無可否認,一個小時與兩個月相差甚遠,但這是一個開始。
我真的很感謝一些方向,我可以如何解決這個問題。不幸的是,這是我的常識之外,所以我有點失落。在確定可能包含這個句柄計數的情況下,將非常感謝任何幫助。
更新:通過josh poley
基於推薦下面,我使用Sysinternals公司的handle.exe
檢查過程。使用-a
標誌,我只有5個結果。接下來我嘗試了-s
標誌,該標誌列出了所有進程中的句柄計數。我運行了一次,然後重新啓動受影響的服務器並再次運行它。突變處理類別大幅下降,這讓我覺得我需要關注這個類別。將研究
在黑暗中隨機拍攝:在處理產卵孩子和漏手柄時,一個典型的問題是不關閉lpProcessInformation中CreateProcess提供的兩個處理,也許看看它。 –