Eventmachine управление памятью - PullRequest
0 голосов
/ 03 января 2012

Я запускаю процесс eventmachine на heroku, и кажется, что он достигает предела памяти в 512 МБ через час или около того.Я начинаю видеть сообщения вроде этого:

Error R14 (Memory quota exceeded)
Process running mem=531M(103.8%)

Я провожу много событий через реактор, поэтому я думаю, может быть, реактор резервируется (я представляю это как большую очередь)?Но может быть какая-то другая причина, я все еще довольно новичок в Eventmachine.

Есть ли хорошие способы профилировать Eventmachine и получать некоторую статистику по нему.В качестве простого примера я надеялся увидеть, сколько событий было запланировано в очереди, чтобы узнать, было ли создано резервное копирование и все ли они хранятся в памяти.Но если у кого-то есть другие предложения, я буду очень признателен.

Спасибо!

Ответы [ 2 ]

0 голосов
/ 27 сентября 2012

Утечка оказалась в Mongoid identity_map (никак не связана с EventMachine). Установка Mongoid.identity_map_enabled = false в начале процесса обработки событий разрешает его.

0 голосов
/ 09 января 2012

Я широко использую eventmachine и никогда не сталкивался с утечкой памяти внутри реактора, так что вы держите пари на том, что код рубина есть, но, не зная больше о вашем приложении, трудно дать вам реальный ответ.

Единственная очередь, о которой я могу думать сейчас, - это пул потоков. Каждый раз, когда вы используете метод defer, блок либо передается свободному потоку, либо ставится в очередь в ожидании свободного потока, я полагаю, если все ваши потоки блокируют ожидание для чего-то очередь может расти и использовать всю доступную память.

...