鯖構築運用雑記

管理してる鯖関連とか技術とかの雑記をメモしておく。

メモリー開放作戦

1.事始め

現在進行形で運用しているサーバのメモリー使用量が残念なことになっています。

f:id:kayo_tozaki:20151030132325p:plain

この画像自体はQiitaに載せたものそのままですが、usedとfreeの値が逆じゃないかと疑うぐらいにメモリーが沢山食べられてます。 現状、サーバーのメモリーは4GBで運用していますが、メモリーの追加購入をしようとか考えてます。が、その前にチューニングとかしてみようとか思ったり。

2.環境

基本的にSSHで作業しました。至ってシンプル。

3. 現状のおさらい

冒頭に会った画像の通り、メモリーがかつかつです。 総合計で 3500MB ぐらい あるところ、 free -m での検査結果 *1、 使用量(used) が 約1300MBとなってました。これは痛いです。

今回の目標は、

  • used を 1000 (MB) 以下にする
  • free を 2000 (MB) 前後にする

として、いざ設定の見直し開始です。

4.調査

どこから手を付けて良いかわからないので、とりあえず調べることに。

qiita.com

こちらのサイトの ps aux --sort rss をお借りして、調べてみると、次の3つのプロセスがバカ食いしていると判明しました。

どれもこれも使っているものなので、下手に殺せませんが、一つ一つ見ていきましょう。

5.対策

5.1 Tomcat

主な使用用途は GitBucket です。最近は使っていないので、一旦停止します。すると、メモリーが大分開きました。

f:id:kayo_tozaki:20151030133933j:plain

まあ、問題あるといえばあるのですが、一時停止ということで。

5.2 MariaDB

こいつを使っているのは、主にOwncloudでした。とりあえず、参考にしたサイトはこちら

blog.fkoji.com

app.road.jp.net

www.sakc.jp

実際にやってみたこと*2は、

  • /etc/my.cnf の編集
  • cp my-huge.cnf /etc/my.cnf
  • ib_logfile0 , ib_logfile1 の削除

で、再起動すると、昔のデータにアクセス出来ないし、メモリー使用量は逆に増えてしまいました。

f:id:kayo_tozaki:20151030134902j:plain

と、言う訳で、こいつは空振り。元に戻しておきました。

5.3 php-fpm

こいつを何で使っているかは明確に分かりませんが、おそらくOwncloudのPHPで使用しているのでは...?と、推測を立てました。

参考サイトはこちら

www.crystalsnowman.com

このサイトの中腹辺りにある、php-fpmの設定の確認 のパラメーター設定をしたところ、プロセス数が一気に減り、メモリーも解放できました。

設定内容は、ほぼ書かれているとおりなので、省略です。

f:id:kayo_tozaki:20151030135213j:plain

6. Tomcat 実行

ここまで減らせたので、Tomcat を動かしても、used が 1000MB を切ってくれると思った私は、思いっきり起動させてみました。 すると...

f:id:kayo_tozaki:20151030135633j:plain

みるみるメモリーを食っていくじゃねーか(怒

と、言う訳で、Tomcatのチューニングをすることに

6.1 Tomcat の設定

www.kumoyanet.com

このサイトにあるように、Tomcatは実行時にJavaの引数を設定できるようです。 *3 なので、実際に突っ込んでみることに。

設定していった順番は、

  1. /usr/sbin/tomcatCATALINA_OPTS の内容追記 後 tomcat 再起動
  2. export CATALINA_OPTSで設定後、tomcat 再起動
  3. /usr/libexec/tomcat/serverにCATALINA_OPTSの内容を直接追記後、 tomcat 再起動

と、ここまでやって、やっと有効になりました。有効無効の確認は、再起動後、

ps axuwwwf | grep tomcat

を実行して、追加したオプションが有るかどうかを確認しました。 個人的には、この追記は結構危険*4だと思うので、覚悟の上でお願いします。

このおかげで、メモリーもいい感じに調整されてTomcatが起動しました。

f:id:kayo_tozaki:20151030140355j:plain

6.2 キャッシュのクリア

Linux のメモリキャッシュをクリアする

秘儀、メモリーのキャッシュのクリアです。ここに書かれているとおりです。 そうすると、先ほどの画像のように、キャッシュのクリアされます。freeがたくさん増えました。

7.最後に

これで、最初に上げた目標はクリアーです。

そして、これまで使うときにしか起動しなかったMinecraftと、先日構築したTeamSpeakを常駐させてみると、こんな感じ。

f:id:kayo_tozaki:20151030140625j:plain

なかなかいい感じです。起動直後なので、これから使用していくに連れてメモリーの使用量が増えそうですが。

と、いうわけで、「あれ?これメモリー買わなくてもいいんじゃね?」とか思えるぐらいには設定し直すことができたと思います。 でも心なしか寂しいので、8GBか16GBぐらいは買おうかな...?


8.おまけ

この作業中に、友人から借りたごちうさ1期のサントラをループして聞いてました。こういうサウンド好きです。 精神的にゆったりと作業できました。

9.追記

'15/12/02 : インデントが崩れているのを修正。コードはGist経由にしたほうが綺麗かと思い始める。

*1: freeのusedの値は、total - free の結果ということを、記事を書きながら知りました。まあ、簡単に調べるということで、今回はこれで統一します。

*2: コピペのみしかやってませんが

*3:私はMinecraftのメモリー設定で知りましたが

*4:根拠はないですが