Linuxでは基本的に、あらゆるものがファイルとして扱われて管理される仕組みとなっています。
データをはじめとして、ハードディスク・SSDなどのストレージやLANカード、cpu、ターミナルなどはすべてファイルとして扱われています。
こういった構造のため、TCP通信などで作られる”TCPソケット”も、Linux上ではファイルとして扱われます。
Linuxではこういったデータ以外の特殊なファイルも含めたすべてのファイルにおいて、1つのプロセスが同時に開くことができる数があらかじめ指定されています。
つまり、1つのサーバーで受けられるコネクション数の上限は、この”ファイルディスクリプタ”の影響を受けることになります。
ファイルディスクリプタの数を確認するには次のコマンドで確認できます。
ulimit -Sn
$ ulimit -Sn
1024
上記の例の場合は、1つのプロセスが一度に1024ファイルを開くことができる、という指定になっています。
1プロセスが同時に開けるファイル、という単位なので、単純な計算は難しいですが、もしこれから立ち上げるサービスが、同時に1024以上のTCPコネクションを張る可能性があるのであれば、この上限値を変えておく必要があります。
次のようにすることで一般ユーザー・管理者ユーザー問わずファイルディスクリプタを変更することができます。ただし、”ハードリミット”を超える値は指定できません。
ulimit -Sn 2048
ハードリミットは次のコマンドで確認できます。
ulimit -Hn
$ ulimit -Hn
4096
なお、rootユーザーであればハードリミットの値も変更できます。
ulimit -Hn 60000