Ускоряем запуск Ruby on Rails используя набор патчей RVM railsexpress

от автора

Эта статья для тех, кто хочет ускорить запуск рельсов, а заодно ускорить работу интерпретатора ruby.
О том как установить RVM (Ruby version manager) уже написано много статей, поэтому я перейду сразу к делу.
Список патчей в RailsExpress для Ruby 1.9.3-p362
(это последняя версия руби на момент написания статьи)

Applying patch railsexpress/01-fix-make-clean.patch Applying patch railsexpress/02-railsbench-gc.patch Applying patch railsexpress/03-display-more-detailed-stack-trace.patch Applying patch railsexpress/04-fork-support-for-gc-logging.patch Applying patch railsexpress/05-track-live-dataset-size.patch Applying patch railsexpress/06-webrick_204_304_keep_alive_fix.patch Applying patch railsexpress/07-export-a-few-more-symbols-for-ruby-prof.patch Applying patch railsexpress/08-thread-variables.patch Applying patch railsexpress/09-faster-loading.patch Applying patch railsexpress/10-falcon-st-opt.patch Applying patch railsexpress/11-falcon-sparse-array.patch Applying patch railsexpress/12-falcon-array-queue.patch 

1. Указываем RVM с какими параметрами надо компилить Ruby

Для этого нужно создать файл .rvmrc в домашнем каталоге.

$ nano -e $HOME/.rvmrc 

И явно указать RVM с какими параметрами компилировать Ruby.

CFLAGS="-march=native -O2 -pipe -fomit-frame-pointer" rvm_configure_env=(CFLAGS="-march=native -O2 -pipe -fomit-frame-pointer") 

Здесь параметр -march=native указывает компилятору на автоматический выбор типа процессора и поддерживаемых этим процессором возможностей. Если вы точно знаете тип своего процессора, то можно указать, например, -march=prescott

Сохранить изменения: [ctrl + X], потом [Y] — чтобы выйти и сохранить в nano.

2. Обновляем списки доступных версий Ruby в RVM

$ rvm get head 
3. Устанавливаем / переустанавливаем ruby с применением патчей railsexpress

для версии Ruby 1.9.3-p362

$ rvm reinstall 1.9.3-p362 --patch railsexpress -n railsexpress -j 3 $ rvm list $ rvm use ruby-1.9.3-p362-railsexpress --default 

Если нужно всегда последнюю версию, то вместо p362 надо указать head,
но для последней версии патчи появляются с запазданием, это надо иметь ввиду.

4. Бонус

export RUBY_HEAP_MIN_SLOTS=1000000 export RUBY_HEAP_FREE_MIN=500000 export RUBY_HEAP_SLOTS_INCREMENT=1000000 export RUBY_HEAP_SLOTS_GROWTH_FACTOR=1 export RUBY_GC_MALLOC_LIMIT=100000000 
5. Меряем скорость

Скорость запуска рельс можно мерить так:

$ time bundle exec rake routes 

В моем случае:
до
real 0m42.547s user 0m36.502s sys 0m2.248s
после
real 0m17.200s user 0m15.089s sys 0m1.072s

Здесь можно почитать дополнительную инфу по патчам https://github.com/skaes/rvm-patchsets

ссылка на оригинал статьи http://habrahabr.ru/post/165627/


Комментарии

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *