Он - среди других применений - ярлык для инициализации коллекций. Подробнее ...
Некоторые подсказки для нахождения утечек памяти в направляющих:
, первым является графическое исследование использования памяти объектами в ObjectSpace.
последние два помогут Вам определить определенные шаблоны использования, которые расширяют использование памяти, и можно работать оттуда.
Что касается определенных шаблонов кодирования, на основе опыта необходимо наблюдать что-либо, что это имеет дело с файлом io, обработкой изображений, работая с крупными строками и т.п..
я проверил бы, пользуетесь ли Вы самой соответствующей библиотекой XML - ReXML, как известны, является медленным и, как полагают, является текучим (у меня нет доказательства этого!). Также проверьте, можете ли Вы memoize дорогие операции.
Утечка памяти является проблемой в текущей рубиновой реализации, которая хорошее место для запуска об этом <ударяют> http://whytheluckystiff.net/articles/theFullyUpturnedBin.html забастовка>, веб-сайт Whytheluckystiff больше не существует, но можно найти исходную статью здесь: http://viewsourcecode.org/why/hacking/theFullyUpturnedBin.html
для более определенного ответа на проблемах с длительными рубиновыми процессами видит http://zdavatz.wordpress.com/2007/07/18/heap-fragmentation-in-a-long-running-ruby-process/
, возможно, Вы могли дать пассажиру (mod_rails) попытку http://nubyonrails.com/articles/ask-your-doctor-about-mod_rails
Супер простой метод зарегистрировать использование памяти после или перед каждым запросом (только для Linux).
#Put this in applictation_controller.rb
before_filter :log_ram # or use after_filter
def log_ram
logger.warn 'RAM USAGE: ' + `pmap #{Process.pid} | tail -1`[10,40].strip
end
Вы могли бы хотеть загрузить сценарий/консоль и испытать оператор сначала, чтобы удостовериться, что это работает над Вашим полем.
puts 'RAM USAGE: ' + `pmap #{Process.pid} | tail -1`[10,40].strip
Тогда просто вершина монитора, когда запрос заставляет Ваше использование памяти перейти, идет, проверяют журналы. Это, конечно, только поможет, если у Вас будет утечка памяти, которая происходит в больших переходах, не крошечных инкрементах.
Переключитесь на jruby и используйте Память Eclipse Анализатор . Нет никакого сопоставимого инструмента для Ruby в данный момент.
Теперь вы можете выполнить следующее, чтобы получить память в формате, который R можно читать. Я предполагаю, что ваша строка журнала выглядит так:
1234567890 RAM USAGE: 27456K
Запустите это (или измените в соответствии с набором):
$ grep 'RAM USAGE' fubar.log | awk '{print s " " $1 " " $4; s++}' | sed 's/K//g' > mem.log
Затем вы можете запустить это:
#!/bin/sh
rm -f mem.png
R --vanilla --no-save --slave <<RSCRIPT
lst <- read.table("mem.log")
attach(lst)
m = memory / 1024.0
summary(m)
png(filename="mem.png", width=1024)
plot(date, m, type='l', main="Memory usage", xlab="time", ylab="memory")
RSCRIPT
и получить красивый график.