ulimit、lsof、cat /proc/sys/fs/file-maxの違い

ulimit、lsof、cat /proc/sys/fs/file-maxの違い

1000個のパーティションを持つトピックを使用してKafkaインスタンスを実行できないため、java.io.IOException: Too many open filesec2 VMのファイル記述子の制限を調べ始めました。次のコマンドはすべて異なる結果を生成するため、Centos 7システムでファイルを開くときの正確な制限を理解するのが困難です。コマンドは次のとおりです。

  • ulimit -a: ファイル1024を開く
  • lsof | wc -l:298280
  • cat /proc/sys/fs/file-max:758881(と一致する/proc/sys/fs/file-nr

実際の制限が最後のコマンドによって生成された制限である場合、それよりはるかに低くなります(lsof | wc -l:298280)。しかし、この場合、ulimit開いているファイルが1024個よりはるかに多いため、コマンドの出力は非常に不明です。

公式文書によると、Centosでファイル記述子をチェックする最良の方法は/proc/sys/fs/file-maxfileしかし、これらの命令の間に「不一致」のように見えるものはすべてありますか?

ベストアンサー1

  1. file-maxシステム全体で開くことができるファイルの最大数。これはカーネルレベルで行われます。

  2. マニュアルページには次のように記載されていますlsof

オプションがない場合、lsof はすべてのアクティブ・プロセスに属するすべてのオープン・ファイルをリストします。

報告されたファイルの数が設定lsofよりはるかに少ないため、これは観察内容と一致します。file-max

  1. 最後に、ulimitユーザーレベルでリソース制限を適用するために使用されます。 「オープンファイル数」パラメータはユーザーレベルで設定されますが、そのユーザーが開始したすべてのプロセスに適用されます。この場合、単一のKafkaプロセスは最大1024のファイルハンドルを開くことができます(ソフトリミット)。

この制限を4096というハード制限に直接増やすことができます。ハード制限を増やすには、ルートアクセスが必要です。

Kafkaが単一のプロセスとして実行されている場合lsof -p [PID]

問題が解決することを願っています。

おすすめ記事