メモリー開放作戦
1.事始め
現在進行形で運用しているサーバのメモリー使用量が残念なことになっています。
この画像自体はQiitaに載せたものそのままですが、usedとfreeの値が逆じゃないかと疑うぐらいにメモリーが沢山食べられてます。 現状、サーバーのメモリーは4GBで運用していますが、メモリーの追加購入をしようとか考えてます。が、その前にチューニングとかしてみようとか思ったり。
2.環境
- OS : CentOS 7
基本的にSSHで作業しました。至ってシンプル。
3. 現状のおさらい
冒頭に会った画像の通り、メモリーがかつかつです。
総合計で 3500MB ぐらい あるところ、 free -m
での検査結果 *1、
使用量(used) が 約1300MBとなってました。これは痛いです。
今回の目標は、
- used を 1000 (MB) 以下にする
- free を 2000 (MB) 前後にする
として、いざ設定の見直し開始です。
4.調査
どこから手を付けて良いかわからないので、とりあえず調べることに。
こちらのサイトの ps aux --sort rss
をお借りして、調べてみると、次の3つのプロセスがバカ食いしていると判明しました。
どれもこれも使っているものなので、下手に殺せませんが、一つ一つ見ていきましょう。
5.対策
5.1 Tomcat
主な使用用途は GitBucket です。最近は使っていないので、一旦停止します。すると、メモリーが大分開きました。
まあ、問題あるといえばあるのですが、一時停止ということで。
5.2 MariaDB
こいつを使っているのは、主にOwncloudでした。とりあえず、参考にしたサイトはこちら
実際にやってみたこと*2は、
/etc/my.cnf
の編集cp my-huge.cnf /etc/my.cnf
- ib_logfile0 , ib_logfile1 の削除
で、再起動すると、昔のデータにアクセス出来ないし、メモリー使用量は逆に増えてしまいました。
と、言う訳で、こいつは空振り。元に戻しておきました。
5.3 php-fpm
こいつを何で使っているかは明確に分かりませんが、おそらくOwncloudのPHPで使用しているのでは...?と、推測を立てました。
参考サイトはこちら
このサイトの中腹辺りにある、php-fpmの設定の確認 のパラメーター設定をしたところ、プロセス数が一気に減り、メモリーも解放できました。
設定内容は、ほぼ書かれているとおりなので、省略です。
6. Tomcat 実行
ここまで減らせたので、Tomcat を動かしても、used が 1000MB を切ってくれると思った私は、思いっきり起動させてみました。 すると...
みるみるメモリーを食っていくじゃねーか(怒
と、言う訳で、Tomcatのチューニングをすることに
6.1 Tomcat の設定
このサイトにあるように、Tomcatは実行時にJavaの引数を設定できるようです。 *3 なので、実際に突っ込んでみることに。
設定していった順番は、
/usr/sbin/tomcat
にCATALINA_OPTS
の内容追記 後 tomcat 再起動export CATALINA_OPTS
で設定後、tomcat 再起動/usr/libexec/tomcat/server
にCATALINA_OPTSの内容を直接追記後、 tomcat 再起動
と、ここまでやって、やっと有効になりました。有効無効の確認は、再起動後、
ps axuwwwf | grep tomcat
を実行して、追加したオプションが有るかどうかを確認しました。 個人的には、この追記は結構危険*4だと思うので、覚悟の上でお願いします。
このおかげで、メモリーもいい感じに調整されてTomcatが起動しました。
6.2 キャッシュのクリア
秘儀、メモリーのキャッシュのクリアです。ここに書かれているとおりです。 そうすると、先ほどの画像のように、キャッシュのクリアされます。freeがたくさん増えました。
7.最後に
これで、最初に上げた目標はクリアーです。
そして、これまで使うときにしか起動しなかったMinecraftと、先日構築したTeamSpeakを常駐させてみると、こんな感じ。
なかなかいい感じです。起動直後なので、これから使用していくに連れてメモリーの使用量が増えそうですが。
と、いうわけで、「あれ?これメモリー買わなくてもいいんじゃね?」とか思えるぐらいには設定し直すことができたと思います。 でも心なしか寂しいので、8GBか16GBぐらいは買おうかな...?
8.おまけ
この作業中に、友人から借りたごちうさ1期のサントラをループして聞いてました。こういうサウンド好きです。 精神的にゆったりと作業できました。
9.追記
'15/12/02 : インデントが崩れているのを修正。コードはGist経由にしたほうが綺麗かと思い始める。