linux - 如何在 Ruby on Rails 中监控打开的文件描述符?

标签 linux ruby-on-rails-3 file-descriptor

背景:

最近我的 Rails 服务器出现问题,它会停止响应,需要反弹才能恢复运行。这个问题是由于 Controller 在接收到 POST 时进行一些 fork ,以进行一些重量级的并发处理——服务器响应时间不断增加,直到服务器完全停止响应。我很确定我已经解决了这个问题(在 fork 上复制的数据库连接没有在子进程中关闭),但是权威测试会很棒。

问题:

有没有办法从我的 Rails 应用程序中监控打开的文件描述符?它在 Linux 上运行,所以我一直在使用 proc 文件系统和 lsof 命令来观察打开的文件描述符;这很困惑,因为它只为您提供当前进程的快照。理想情况下,我想在处理之前、期间和之后打印父进程和子进程中打开的文件描述符,以确保文件描述符不会在他们欢迎之后保持打开状态。

最佳答案

要考虑的一种方法(可能是最简单的)是使用某种后台 worker ,例如使用 Workling,并使其每隔一段时间运行 lsof,并使用语法获取输出:

`lsof | grep something` # shell command example.

lsof 这样的程序如果运行得太频繁,确实会影响性能。也许每 10 到 30 秒。也许下降到 5 秒,但这确实插入了它。我假设您有专用服务器或强大的虚拟机。

在您的后台工作程序中,您可以将这些命令结果存储到一个变量中,或者将其 grep 到您真正要查找的内容(如所示),并根据需要访问/操作数据。

关于linux - 如何在 Ruby on Rails 中监控打开的文件描述符?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7578041/

相关文章:

c - 替代 Linux 上的 backtrace() 可以找到静态函数的符号

jquery - Ruby on Rails : Submit a form as a JS based on a change in select box

ruby-on-rails-3 - 为什么模型被命名为 "user.rb"而不是 "user_model.rb"?

linux - ftell 在文件描述符上?

c++ - 终止阻塞的 pthreads 线程

linux - 获取打开文件描述符的内存使用情况

linux - Ubuntu 上 Chrome 缓存的路径是什么?

linux - 如何递归 chmod 名称中包含空格字符的目录

linux - 使用 Linux 命令修改列中的文本

ruby-on-rails - 如何覆盖 Spree 结帐表单和步骤流程?