Solutions for typical problems of Linux(Centos 6.3)
システムリソース関係
Too many open files
「Too many open files」は Linux でプロセスが開けるファイルディスクリプタの上限に達してしまうと発生するエラーです。
「ファイルディスクリプタ」という名前ですが、 Linux ではソケットもファイルディスクリプタなので、ファイルを開いた場合だけでなく、ソケットを使って通信を行う場合にもファイルディスクリプタが使用されます。
そのため、Apache や Tomcat などで高負荷なサイトを運用している場合などには、比較的遭遇する確率が高い。
1 PAM認証モジュールの設定ファイル(limits.conf)を更新する。
==limits.conf は PAM認証のモジュールである pam_limits.so の設定ファイルで、ログインの際に読み込まれるファイルです。
なので、一旦 su - して再読み込みをした後に再度値を確認します。==
vi /etc/security/limits.conf
下記を追記
* hard nofile 500000
* soft nofile 500000
root hard nofile 500000
root soft nofile 500000
2 デーモンプロセスの場合、PAM認証を通らないため、limits.confの設定が反映されない。
OS 起動時のデーモンは PAM 認証を通らないため、limits.conf の設定が反映されません。
この現象を回避するためには init.d 以下の起動スクリプト内で個別に「ulimit -n 65536」を指定すればいいのですが、複数のプロセスに指定する必要がある場合など、設定変更の度にいちいち個別のファイルを編集するのは面倒です。
何か良い方法はないかと思っていろいろと調べてみたところ、自動起動する全てのデーモンに設定を反映するための方法がちゃんと用意されていました。参考
vi /etc/sysconfig/init
ファイルの末尾に下記を追記
ulimit -n 65536
==※リブート後、反映される。==
2 システム全体のファイルリミットを増やす
vi /etc/sysctl.conf
下記を追記
fs.file-max = 2097152
設定を反映
sysctl -p
3 ファイルリミットを確認
cat /proc/sys/fs/file-max
2097152
ulimit -Hn
500000
ulimit -Sn
500000
ユーザーsoushiの上限を確認
su - soushi -c 'ulimit -aHS' -s '/bin/bash'
core file size (blocks, -c) 0
data seg size (kbytes, -d) unlimited
scheduling priority (-e) 0
file size (blocks, -f) unlimited
pending signals (-i) 78867
max locked memory (kbytes, -l) 64
max memory size (kbytes, -m) unlimited
open files (-n) 500000
pipe size (512 bytes, -p) 8
POSIX message queues (bytes, -q) 819200
real-time priority (-r) 0
stack size (kbytes, -s) 10240
cpu time (seconds, -t) unlimited
max user processes (-u) 1024
virtual memory (kbytes, -v) unlimited
file locks (-x) unlimited
セキュリティ関係
SSH接続で、SSHクライアントが実行できるコマンドを制限したい
1 authorized_keysファイルに、次のように記述する。
command="free" ssh-rsa AAAAB3N…QOID== jpetazzo@tarrasque