«前の日記(2009-12-31 (木)) 最新 次の日記(2010-01-17 (日))»  

まちゅダイアリー


2010-01-16 (土)

日記のサーバを移設 → 元に戻した

この日記はCPIのVPSサーバというサービスで動かしているんだけど、どうもサーバのリソース制限(メモリ)に引っかかっていてレスポンスが悪くなっている。 monit を使ってサービス監視していて、リソース制限に引っかかってサーバプロセスが落ちた場合でも自動的に再起動しているんだけど、アラートが頻発している状態が続いている。

なので、仮に CPI の VPS サーバから、以前設置していたさくらのレンタルサーバに戻してみた。 (CPI から mod_proxy を使ってさくら側に転送している)

サーバの応答時間

  • CPI の VPS サーバ … 8852 msec
  • さくらインターネット … 2622 msec

応答時間はかなり早くなったんだけど、今度は503エラーが発生するようになった。 CPUに負荷がかかっているんだろうか。

今の状況

  • CPI の VPS サーバ(一番安いプラン) … メモリ不足が発生。
  • さくらインターネット(スタンダード) … CPU制限が発生。

VPSサーバのメモリは180MBなんだけど、近いうちに倍に増強されるみたい。 早く安定させたいところだけど、メモリが増強されるまで様子を見るしかないかな。

追記

tDiary を 2.3.3.20090826 から svn の最新版に追従して、 ruby 1.9 をp0からp378に入れ替えたら、CPIでも応答時間が 8852 msec から 1231 msec へと劇的に改善された。 追従前後のプロファイル結果は以下の通り。

  %   cumulative   self              self     total                                                                     
 time   seconds   seconds    calls  ms/call  ms/call  name                                                              
 51.59    10.86     10.86   191735     0.06     0.08  Proc#call                                                         
 17.81    14.61      3.75        4   937.50  4812.50  Marshal.load                                                      
  8.79    16.46      1.85   191799     0.01     0.01  Kernel.respond_to?                                                
  7.13    17.96      1.50   127837     0.01     0.01  String#encoding                                                   
  5.56    19.13      1.17        3   390.00   390.00  Thread#join                                                       
  3.42    19.85      0.72   127866     0.01     0.01  BasicObject#==                                                    
  2.71    20.42      0.57    63934     0.01     0.01  String#force_encoding                                             
 %   cumulative   self              self     total                                                                     
 time   seconds   seconds    calls  ms/call  ms/call  name                                                              
 19.48     0.30      0.30        3   100.00   100.00  Thread#join                                                       
 19.48     0.60      0.30        7    42.86    80.00  ERB::Compiler::SimpleScanner2#scan                                
 18.18     0.88      0.28      212     1.32     5.38  Kernel.require                                                    
  3.25     0.93      0.05      440     0.11     0.11  ERB::Compiler#content_dump                                        
  3.25     0.98      0.05      132     0.38     3.71  Array#each                                                        
  3.25     1.03      0.05      107     0.47     2.80  BasicObject#instance_eval                                         
  2.60     1.07      0.04      933     0.04     0.04  Fixnum#>                                                          

ううん…。 Rubyが古かったのが原因なのか、tDiaryが古かったのが原因なのか、その両方なのか。 でも、これで安定するといいなぁ。

リソース制限内に収まるようになったので、さくらに戻すのはやめて、CPIで引き続き動かすことにした。

追記

プロファイルの結果を見ていると、改善前はProc#call, Kernel.respond_to?, String#encodingが20万回 (!) も呼ばれている。 昔からこうだったとは考えにくいので、 tDiary や Ruby のバージョンじゃなくて変に大量のデータがたまっていたのかもしれない。

Tags: tDiary