サーバー上のRubyはRVMにより2倍遅くなることがあります



今日、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
      
      





サーバーをチェックして、アプリケーションを高速化します。



All Articles