Загрузка данных в пакетном режиме и агрессивное использование сборщика мусора, как предположил Крис Хилд, принесет вам действительно большие выгоды, но люди часто упускают из виду то, в какие платформы они загружают.
Загрузка стека Rails по умолчанию предоставит вам ActionController, ActionMailer, ActiveRecord и ActiveResource вместе. Если вы создаете веб-приложение, возможно, вы не используете их все, но, вероятно, вы используете большинство из них.
Когда вы создаете фоновое задание, вы можете избежать загрузки ненужных вещей, создав для этого специальную среду:
# config/environments/production_bg.rb
config.frameworks -= [ :action_controller, :active_resource, :action_mailer ]
# (Also include config directives from production.rb that apply)
Каждая из этих платформ будет просто сидеть в ожидании электронной почты, которая никогда не будет отправлена, или контроллера, который никогда не будет вызываться. Там просто нет смысла загружать их. Настройте файл database.yml
, настройте фоновое задание для запуска в среде production_bg
, и у вас будет гораздо более чистый лист для начала.
Еще одна вещь, которую вы можете сделать, это использовать ActiveRecord напрямую, не загружая Rails вообще. Это может быть все, что вам нужно для этой конкретной операции. Я также обнаружил, что использование облегченного ORM, такого как Sequel , делает вашу фоновую работу очень легкой, если вы в основном выполняете вызовы SQL для реорганизации записей или удаления старых данных. Если вам нужен доступ к вашим моделям и их методам, вам нужно будет использовать ActiveRecord. Однако иногда стоит по-новому реализовать простую логику в чистом SQL из соображений производительности и эффективности.
При измерении использования памяти единственное число, которое следует учитывать, - это «реальная» память. Виртуальное количество содержит разделяемые библиотеки, и их стоимость распределяется среди каждого процесса, использующего их, даже если он учитывается полностью для каждого из них.
В конце концов, если для выполнения чего-то важного требуется 100 МБ памяти, но вы можете уменьшить его до 10 МБ за три недели работы, я не понимаю, зачем вам это надо. На управляемом провайдере 90 МБ памяти стоит не более $ 60 в год, что обычно намного дешевле, чем ваше время.
Ruby on Rails охватывает философию большей заботы о вашей производительности и времени, чем об использовании памяти. Если вы хотите урезать его, посадить на диету, вы можете это сделать, но это потребует немного усилий.