2011-09-28 94 views
1

背景:如何監視Ruby on Rails中的打開文件描述符?

最近我的Rails服務器出現問題,它會停止響應,需要反彈才能恢復運行。這個問題是由於一個控制器在接收到一個POST後做了一些分叉處理,以便執行一些重量級併發處理 - 服務器響應時間不斷增加,直到服務器完全停止響應。我很確定我已經修復了這個問題(在fork上拷貝的數據庫連接沒有在子進程中被關閉),但是對權威性的測試來說是很棒的。

問:

有沒有辦法來監控從我的Rails應用程序內打開的文件描述符?它運行在Linux上,所以我一直在使用proc文件系統和lsof命令來觀察打開的文件描述符;這很麻煩,因爲它只給你一個當前進程的快照。理想情況下,我希望在處理之前,處理期間和處理之後在父進程和子進程中打開打開的文件描述符,以確保文件描述符不會超出歡迎。

回答

0

一種方法來考慮(可能是最簡單)是使用某種類型的後臺工作,如用Workling,並使其在間隔運行lsof,並使用語法獲得輸出:

`lsof | grep something` # shell command example. 

程序,如如果運行太頻繁,lsof確實會損害性能。也許每10到30年。也許下降到5秒,但這確實在推動它。我假設你有一個專用的服務器或一個討厭的虛擬機。

在您的後臺工作人員中,您可以將這些命令結果存儲到一個變量中,或者將其下載到您真正想要的內容(如演示),並根據需要訪問/操作數據。