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

в 8:44, , рубрики: falcon, ruby, ruby on rails, rvm, метки: , , ,

Эта статья для тех, кто хочет ускорить запуск рельс, а заодно ускорить работу интерпретатора 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

Автор: vmakarov

Источник

* - обязательные к заполнению поля


https://ajax.googleapis.com/ajax/libs/jquery/3.4.1/jquery.min.js