今日、Ruby Insideを見て、Justin Kulesza Is Your Application Running Running with Ruby-Slow?の記事に出会いました。 。 11月6日の記事ですが、この状況に関するHabréについての言葉はありません。 そして、この記事の本質は次のとおりです。彼らはアプリケーションをサーバーからSolarisにUbuntuからサーバーに転送し、RVMを使用してRubyをコンパイルしました。 しかし、転送後、彼らはアプリケーションが遅いように見えることに気づきました。 最初はハードウェアに罪を犯していましたが、RVMであることがすぐにわかりました。つまり、RVMはコンパイル時に最適化をまったく使用しないということです。
問題の診断は非常に簡単です。
$ time ruby -e "count = 0; while(count < 100000000); count = count + 1; end; puts count" 100000000 real 0m9.019s user 0m8.933s sys 0m0.016s
「通常の」実行時間は最大4秒です。
さらに、 〜/ .rvm / log / your.ruby.version / make.logに最適化フラグがありません :
CC = gcc LD = ld LDSHARED = gcc -shared CFLAGS = -I/home/user/.rvm/usr/include -fPIC XCFLAGS = -include ruby/config.h -include ruby/missing.h -fvisibility=hidden -DRUBY_EXPORT CPPFLAGS = -I. -I.ext/include/x86_64-linux -I./include -I. DLDFLAGS = -Wl,-soname,libruby.so.1.9 SOLIBS = -lpthread -lrt -ldl -lcrypt -lm
-O3はCFLAGSに存在する必要があります。
彼のサーバーで確認しました-そして真実は、問題はあるべき場所を持っているということです。
この記事では、次のようなソリューションを提供しています。
$ echo "rvm_configure_env=(CFLAGS=-O3)" > ~/.rvmrc
この記事からの代替:
$ echo 'rvm_configure_env=(CFLAGS="-march=native -O2")' > ~/.rvmrc
それから:
$ rvm reinstall your.ruby.version
ただし、今のところまだ簡単です:
$ rvm get head && rvm reinstall your.ruby.version
さらに、Rubyの最新バージョン(特にアプリケーションの読み込み時)をさらに高速にするRubyのファニーファルコンの悪名高いパッチ -1.9.3-p327は、RVMの「ヘッド」バージョンで利用できます。 インストールも簡単です。
$ rvm install 1.9.3 -n perf --patch falcon $ rvm use 1.9.3-perf --default
再インストール後、サーバーは2倍以上の速度の増加を示しました。
$ time ruby -e "count = 0; while(count < 100000000); count = count + 1; end; puts count" 100000000 real 0m4.117s user 0m4.032s sys 0m0.012s
サーバーをチェックして、アプリケーションを高速化します。