Edited at

開発者の為のサーバチューニング(LinuxOS編)

More than 5 years have passed since last update.

サーバを立てる上で最低限必要なチューニングポイントを整理したいと思います。

とは言っても、立ててしまえば割となんとかなるので、一定の負荷がないサービスでは

ただの自己満足になる可能性もあります。

※若干うろ覚えなので一応調べて書いてますが、間違ってたらすいません。。。


OS編

チューニングという意味で主に触るのはカーネルパラメータぐらいだと思います。

というか片手間で出来るのはこのラインぐらいまでが限界な気がします。

今回書きませんが、自分が意識する事についてキーワードだけ書いておくと

* DISKのブロックサイズを指定してフォーマット

* プロセスの優先順位変更

* RAID0(AWSでも可能)

などがありますが、RAID0以外はあまり力を入れなくても。。。という感じです。

とは言え、依存性の高い設定が多いと運用がし辛くなるので、バランスが必要な気もします。

以下、主要なケース毎に書いていきます。

カーネルパラメータは以下のコマンドで確認できます。

この2つのコマンドを知れば取りあえず事足りると思います。

$ ulimit -a

$ sysctl -a

以下、注意すべき点について書いていきます。


DBサーバなどでテーブルが開けない(too many open files)

プロセス毎に同時に開けるファイル数を制限するパラメータが存在します。

$ ulimit -a

open files (-n) 1024

変えたい場合は
$ ulimit -n 8192
その後、対象プロセスの再起動も必要です
恒久的な設定ではないので、
~/.bash_profile , ~/.bashrc などへ必要に応じてコマンドを書いておく必要があります。
// もしくは、 /etc/security/limits.conf などで設定します

参考URL:http://open-groove.net/linux/memo-etcsecuritylimits-conf/

特にMySQLでMyISAMを使用して運用している場合、

このケースに遭遇する事は多いかと思います。

後、雑なシステムだと不要なログだったりゴミの様なテーブルを大量に残していて、

そのテーブルに対してのファイルハンドラが開いたままだった為、ファイル数の上限に

引っかかってしまうケースなどがあると思います。

MyISAMの場合、一つのテーブルに対して3つぐらいファイルを必要とする為、

とくに注意が必要かと思います。

ちなみに、どれぐらいのファイルを開いているのか調べる方法ですが、

$ ps aux | grep mysql

でプロセスIDを特定
$ ls /proc/{PID}/fd | wc -l
で確認できます。
これは、他のプロセスも同様に調査できます。

参考URL

http://studio3104.hatenablog.com/entry/20121030/1351587278

Tomcatなどで運用しているシステムであれば


プロセスが落ちたのにコアダンプが出ない

$ ulimit -a

core file size (blocks, -c) 0
// 変えたい場合は
$ ulimit -c unlimited
// その後、対象プロセスの再起動も必要です

先ほどのURLにも書いていますが、Javaを利用している様なシステムでは

慎重に設定しておく必要があります。

これをちゃんと出せるようにしていないと、なんで落ちたのか調べる手だてが途絶えてしまう

可能性があります。


なんかプロセスが落ちる

APやDBサーバなどで大量にメモリを利用しているケースに発生する可能性があります。

LinuxではOOM Killer という仕組みが動作しており、

メモリが足りなくなると足りるようになるまでプロセスを殺し続ける機能があります。

詳しくは、

http://passingloop.tumblr.com/post/11957331420/overcommit-and-oom-killer

のURLが大変わかりやすいので是非読んでください。

$ sysctl -a | grep overcommit

vm.overcommit_memory = 2
vm.overcommit_ratio = 99
変更は、以下のファイルで
$ vim /etc/sysctl.conf
反映する時は、
$ sysctl -p

多分、普段意識しなくてもうまく動いてまうので、何かある前に

見直してみると良いかと思います。