Недавно я запустил новое приложение Ruby on Rails, которое хорошо работало в режиме разработки. После запуска, который я испытывал, используемая память постоянно увеличивается:
ОБНОВЛЕНО. Когда был снят этот экранный свал (тот, который был ниже) из New Relic. Я каждый час планировал перезапуск веб-диноза (один из двух веб-динамиков). Таким образом, он не достигает уровня 500Mb-crash, и на самом деле он получает немного рисунка пила sig. Проблема вовсе не устранена этим, а лишь некоторыми из симптомов. Как вы можете видеть, утро не так занято, но днем занят. Я сделал загрузку в 11.30 для небольшой детали, она не могла повлиять на проблему, даже если она отображается как таковая в статистике.
Можно также отметить, что это MIN-память продолжает расти, даже если график показывает AVG-память. Даже когда график, по-видимому, временно опускается на графике, минимальная память остается неизменной или увеличивается. МИН-память никогда не уменьшается!
Приложение (без перезагрузки dyno) увеличит объем памяти до тех пор, пока не достигнет максимального уровня в Heroku, и приложение не сработает с истечением срока действия.
Я не отличный программист, но раньше я сделал несколько приложений без этой проблемы.
Выполнено устранение неполадок
а. Я думал, что проблема будет заключаться в before_filter в application_controller (Переменные переменных в контроллере приложения вызывают утечку памяти в Rails?), но это не проблема.
В. Я установил oink, но он не дает никаких результатов (вообще). Он создает oink.log, но не дает никаких результатов, когда я запускаю "heroku run oink -m log/oink.log", независимо от того, какой порог.
С. Я попробовал bleak_house, но он устарел и не мог быть установлен
Д. Я googled и прочитал большинство статей в теме, но я не мудрее.
Е. Мне бы очень хотелось протестировать memprof, но я не могу его установить (у меня Ruby 1.9x и я не знаю, как понизить его до 1,8x)
Мои вопросы:
Q1. Мне бы очень хотелось узнать имя (имена) переменной (ов), которая увеличивается для каждого запроса, или, по крайней мере, какой контроллер использует большую часть памяти.
Q2. Будет ли контроллер в качестве приведенного ниже кода увеличиваться в памяти?
related_feed_categories = []
@gift.tags.each do |tag|
tag.category_connections.each do |cc|
related_feed_categories << cc.category_from_feed
end
end
(извините, SO не будет переформатировать код, который будет легко читаться по какой-либо причине).
Нужно ли мне "убивать" связанные_feed_categories с "related_feed_categories = nil" или же это делает сборщик мусора?
Q3. Каковы будут мои основные вещи? Прямо сейчас я не могу сузить его ВСЕ. Я не знаю, какая часть кода должна выглядеть глубже, и я действительно не знаю, что искать.
Q4. В случае, если я действительно не смогу решить проблему. Есть ли онлайн-консультационная служба, в которой я могу отправить свой код и получить их, чтобы найти проблему?
Спасибо!
ОБНОВЛЕНО. Получив комментарии, это может быть связано с сеансами. Это часть кода, который, как я думаю, может быть плохим:
# Create sessions for last generation
friend_data_arr = [@generator.age, @generator.price_low, @generator.price_high]
friend_positive_tags_arr = []
friend_negative_tags_arr = []
friend_positive_tags_arr << @positive_tags
friend_negative_tags_arr << @negative_tags
session["last_generator"] = [friend_data_arr, friend_positive_tags_arr, friend_negative_tags_arr]
# Clean variables
friend_data_arr = nil
friend_positive_tags_arr = nil
friend_negative_tags_arr = nil
он используется в контроллере show # генератора. Когда некоторые подарки были сгенерированы с помощью моего механизма генерации подарка, я сохраняю ввод в сеансе (в случае, если они захотят использовать эту информацию на более позднем этапе). Я никогда не убиваю или не заканчиваю эти сеансы, поэтому, если это может привести к увеличению памяти.
Обновлено: я удалил эту часть кода, но память все еще увеличивается, поэтому я думаю, что эта часть не есть, но аналогичный код может вызвать ошибку?