Как отслеживать дескрипторы открытых файлов в Ruby on Rails? - PullRequest
1 голос
/ 28 сентября 2011

Справочная информация:

Недавно у меня возникла проблема с моим сервером Rails, из-за которой он перестал отвечать, потребовав отскок, чтобы он снова заработал и заработал.Эта проблема возникла из-за того, что контроллер, который при получении POST выполняет некоторую разветвленность, выполняет некоторую тяжелую параллельную обработку - время отклика сервера продолжало увеличиваться, пока сервер полностью не перестал отвечать.Я почти уверен, что исправил эту проблему (соединения с БД, скопированные после разветвления, не закрывались в дочерних процессах), но было бы здорово проверить это авторитетно.

Вопрос:

Есть ли способ контролировать дескрипторы открытых файлов из моего приложения Rails?Он работает в Linux, поэтому я осматривался с файловой системой proc и командой lsof для наблюдения за дескрипторами открытых файлов;это грязно, потому что это дает вам только снимок текущих процессов.В идеале я хотел бы напечатать дескрипторы открытых файлов в родительском и дочернем процессах до, во время и после обработки, чтобы гарантировать, что дескрипторы файлов не остаются открытыми после их приветствия.

1 Ответ

0 голосов
/ 28 сентября 2011

Один из методов, который следует рассмотреть (возможно, самый простой), - это использовать какой-нибудь фоновый рабочий, например, с Workling, и заставить его запускать lsof с интервалами, и получать выходные данные с использованием синтаксиса:

`lsof | grep something` # shell command example.

Такие программы, как lsof, могут сильно снизить производительность, если запускаться слишком часто. Возможно каждые 10-30 лет. Возможно, до 5 с, но это действительно подталкивает. Я предполагаю, что у вас есть выделенный сервер или ненадежная виртуальная машина.

В фоновом режиме вы можете сохранить результаты этих команд в переменной или добавить их к тому, что вы действительно ищете (как показано), и получать доступ к данным / манипулировать ими по своему усмотрению.

...