1000個のパーティションを持つトピックを使用してKafkaインスタンスを実行できないため、java.io.IOException: Too many open files
ec2 VMのファイル記述子の制限を調べ始めました。次のコマンドはすべて異なる結果を生成するため、Centos 7システムでファイルを開くときの正確な制限を理解するのが困難です。コマンドは次のとおりです。
ulimit -a
: ファイル1024を開くlsof | wc -l
:298280cat /proc/sys/fs/file-max
:758881(と一致する/proc/sys/fs/file-nr
)
実際の制限が最後のコマンドによって生成された制限である場合、それよりはるかに低くなります(lsof | wc -l
:298280)。しかし、この場合、ulimit
開いているファイルが1024個よりはるかに多いため、コマンドの出力は非常に不明です。
公式文書によると、Centosでファイル記述子をチェックする最良の方法は/proc/sys/fs/file-max
fileしかし、これらの命令の間に「不一致」のように見えるものはすべてありますか?
ベストアンサー1
file-max
システム全体で開くことができるファイルの最大数。これはカーネルレベルで行われます。マニュアルページには次のように記載されています
lsof
。
オプションがない場合、lsof はすべてのアクティブ・プロセスに属するすべてのオープン・ファイルをリストします。
報告されたファイルの数が設定lsof
よりはるかに少ないため、これは観察内容と一致します。file-max
- 最後に、
ulimit
ユーザーレベルでリソース制限を適用するために使用されます。 「オープンファイル数」パラメータはユーザーレベルで設定されますが、そのユーザーが開始したすべてのプロセスに適用されます。この場合、単一のKafkaプロセスは最大1024のファイルハンドルを開くことができます(ソフトリミット)。
この制限を4096というハード制限に直接増やすことができます。ハード制限を増やすには、ルートアクセスが必要です。
Kafkaが単一のプロセスとして実行されている場合lsof -p [PID]
。
問題が解決することを願っています。