背景:
我最近在Rails服务器上遇到了问题,它会停止响应,需要退回才能恢复并运行。这个问题是由于控制器在接收POST时做了一些分支,做了一些重量级的并发处理 - 服务器响应时间不断增加,直到服务器完全停止响应。我很确定我已经解决了这个问题(在fork上复制的数据库连接没有在子进程中关闭),但是权威性地测试它会很棒。
问题:
有没有办法从我的Rails应用程序中监控打开的文件描述符?它在Linux上运行,所以我一直在使用proc
文件系统和lsof
命令来观察打开的文件描述符;这很麻烦,因为它只给你一个当前进程的快照。理想情况下,我想在处理之前,期间和之后在父进程和子进程中打印打开的文件描述符,以确保文件描述符不会在欢迎之后保持打开状态。
答案 0 :(得分:0)
要考虑的一种方法(可能是最简单的)是使用某种类型的后台工作程序,例如使用Workling,并使其以间隔运行lsof
,并使用语法获取输出:
`lsof | grep something` # shell command example.
像lsof
这样的程序如果运行得太频繁,会对性能造成严重影响。也许每10到30秒。也许可能只有5秒,但这真的是推动它。我假设你有一个专用服务器或一个beasty虚拟机。
在后台工作程序中,您可以将这些命令结果存储到变量中,或者将其压缩到您真正想要的内容(如演示),并根据需要访问/操作数据。