実稼働Linuxシステムでは、基本的にファイルハンドル数の制限を解除する必要があります。その理由は、Linuxシステムのデフォルト値が1024であるためです。つまり、プロセスは最大1024のソケット接続を受け入れることができますが、これでは十分とは言えません。
ファイルハンドルは、ファイル記述子とも呼ばれます。Linuxシステムでは、ファイルは通常のファイル、ディレクトリファイル、リンクファイル、およびデバイスファイルに分割できます。
ファイル記述子は、開かれたファイルを効率的に管理するためにカーネルによって作成されるインデックスであり、開かれたファイルを参照する非負の整数(通常は小さな整数)です。すべてのIOシステムコール(ソケットの読み取りおよび書き込み呼び出しを含む)は、ファイル記述子を介して行われます。
Linuxでは、ulimitコマンドを呼び出すことにより、プロセスが開くことができるファイルハンドルの最大数を確認できます。このコマンドの具体的な使用法は次のとおりです。
ulimit -n
复制代码
ulimitコマンドは、現在のユーザープロセスを表示および変更するために使用される基本的なlimitコマンドです。-nオプションは、現在のファイルハンドル数の制限値を参照または設定するために使用されます。Linuxシステムのデフォルト値は1024です。
1つのプロセスで開かれたファイルハンドルの数がシステムで設定された上限を超えると、“Socket/File:Can't open so many files”
エラーメッセージが発行されます。
これらの2つのパラメーターは、ulimitを介して次のように設定できます。
ulimit -n 1000000
复制代码
ulimitコマンドの使用には欠陥があります。つまり、このコマンドは現在のユーザー環境のいくつかの基本的な制限のみを変更でき、現在のユーザー環境でのみ有効です。つまり、現在のターミナルツールが現在のシェルに接続されている間、変更は有効です。ユーザーセッションが切断されるか、ユーザーがLinuxを終了すると、その値はシステムのデフォルトである1024に戻ります。また、システムの再起動後、ハンドルの数はデフォルト値に戻ります。
ulimitコマンドは、一時的な変更にのみ使用できます。最大数のファイル記述子を永続的に保存する場合は、/ etc / rc.localスタートアップファイルを編集して、次のコンテンツをファイルに追加できます。
ulimit -SHn 1000000
复制代码
オプション-Sはソフト制限を意味し、-Hはハード制限を意味します。
ハード制限は実際の制限です。つまり、最大値は100万、それ以上にすることはできません。
ソフト制限は、システムが警告を発行する制限です。この制限を超えると、カーネルは警告を発行します。
通常のユーザーは、ulimitコマンドを使用して、ソフト制限値をハード制限値の最大設定値に変更できます。ハード制限値を変更する場合は、rootユーザー権限が必要です。
要彻底解除Linux系统的最大文件打开数量的限制,可以通过编辑Linux的极限配置文件/etc/security/limits.conf来做到。修改此文件,加入如下内容:
soft nofile 1000000
hard nofile 1000000
复制代码
在使用和安装目前流行的分布式搜索引擎ElasticSearch时,必须修改这个文件,以增加最大的文件描述符的极限值。当然,在生产环境运行Netty时,也需要修改/etc/security/limits.conf文件来增加文件描述符数量的极限值。