рубин/рубин на обнаружении утечки памяти направляющих

Он - среди других применений - ярлык для инициализации коллекций. Подробнее ...

45
задан BalusC 6 April 2010 в 23:10
поделиться

5 ответов

Некоторые подсказки для нахождения утечек памяти в направляющих:

, первым является графическое исследование использования памяти объектами в ObjectSpace.

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

Что касается определенных шаблонов кодирования, на основе опыта необходимо наблюдать что-либо, что это имеет дело с файлом io, обработкой изображений, работая с крупными строками и т.п..

я проверил бы, пользуетесь ли Вы самой соответствующей библиотекой XML - ReXML, как известны, является медленным и, как полагают, является текучим (у меня нет доказательства этого!). Также проверьте, можете ли Вы memoize дорогие операции.

39
ответ дан Dave Powers 26 November 2019 в 21:20
поделиться

Утечка памяти является проблемой в текущей рубиновой реализации, которая хорошее место для запуска об этом <ударяют> 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

6
ответ дан Dave Powers 26 November 2019 в 21:20
поделиться

Супер простой метод зарегистрировать использование памяти после или перед каждым запросом (только для 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

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

18
ответ дан Daniel Beardsley 26 November 2019 в 21:20
поделиться

Переключитесь на jruby и используйте Память Eclipse Анализатор . Нет никакого сопоставимого инструмента для Ruby в данный момент.

2
ответ дан kohlerm 26 November 2019 в 21:20
поделиться

Теперь вы можете выполнить следующее, чтобы получить память в формате, который 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

и получить красивый график.

2
ответ дан 26 November 2019 в 21:20
поделиться
Другие вопросы по тегам:

Похожие вопросы: