先日、と言っても、だいぶ前か?
監視サーバを構築した。
監視
対象のredmineサーバを監視するために、リソースを取得して、グラフ化する設定をする。
デフォルトで用意されている物を使って、データを取得し、グラフを確認。
用意されていない物は、batでデータを取ってくるようにする。
スワップ
グラフ化したので、日々グラフを確認する。
当初はスワップかと思ってたんだけど、スワップ容量は割と一定。
と、いうかメモリに空きがあるのに何でスワップ使ってるの?
Windows意味不明すぎる。
メモリ
スワップではなさそうなので、メモリを確認するが、上に書いたように空きはある状態。
CPU
使用率を見ていると、反応が遅くなる時にCPU使用率が100%に張り付いている。
なるほど、CPUか。
プロセス
redmineに関連するプロセスを監視に追加する。
すると、事象発生時にrubyプロセスがCPU食いまくっていた。
rubyプロセスは2個あるんだが、片方が食いまくったり、両方食っていたり。
GC
rubyプロセスでCPU食うって、何だろう?と考えて、GCかなと適当なあたりをつける。
GCの回数を取得するbat作って、監視に追加。
あれ?回数増えない。全然増えない。
プロセス再起動
早朝にrubyプロセス再起動してた。その方が1日問題なく動くだろうと思って。
試しに再起動をやめたら、、、事象発生しねぇぇw
まぢかぁぁぁ、よかれと思って再起動設定したのに、無駄というか害だった。
推測
結果からの推測だけど、ブラウザで読み込むrubyファイル内のクラスをメモリにキャッシュしてて、キャッシュがあれば動作は早いが、キャッシュがないと読込みに時間がかかる、のか?
そんな事ある?
クラスのインスタンス化にCPU使いまくるんだろうか。
実際、プロセス再起動しないとメモリ使用量がじわじわ増えていく。
ただ、メモリを全部食いつくす事はない。
この状態だと、ほぼ事象が発生しない。
結論
Railsで構築したシステムは、むやみに再起動するな。