GNU/Linux >> Linux の 問題 >  >> Linux

大量のファイルがあるNfsディレクトリでLsコマンドの割り込みが遅いのはなぜですか?

NFS上のファイルがたくさんあるディレクトリで気づきました

ls *

次に、Ctrl-Cを押すと、lsが戻るまでにしばらく(たとえば20秒)かかる場合があります。

なんで? lsコマンドを修正して応答性を高めることはできますか?

承認された回答:

ls *を実行すると 、最初に発生するのは、シェルが現在のディレクトリのリストを取得することです。ディレクトリが巨大でサーバーが遅い場合、これにはしばらく時間がかかる可能性があります。

シェルは、現在のディレクトリ内のファイルの名前のリストを取得すると、そのリストを並べ替え(ネットワークの相互作用と比較して非常に高速です)、lsを呼び出します。 。 ls コマンドは各ファイルを順番に検索し、そのメタデータを取得します(stat 呼び出し)それがディレクトリであるかどうかを確認します。ファイルがディレクトリの場合、ls ディレクトリ自体ではなく、その内容を一覧表示します。

Ctrlを押したとき + C 、これは現在のNFS操作を中断しません。システムが一貫性のない状態になる可能性があるため、ファイルシステムの操作をどこでも中断することはできません。ファイルを読み取るだけでも、アクセス時間が更新される可能性があります。ほとんどの場合、ファイルに対する基本的な読み取りまたは書き込み操作は、人間の標準では瞬時に行われますが、NFSは例外であり、特に低速のネットワーク上に大量のデータがある場合は例外です。

したがって、 Ctrlを押します + C 有効になるのは次のとおりです:

  • シェルが現在ファイル名のリストを生成している場合、そのリストが完全に取得されたとき。
  • lsの場合 サーバーがメタデータを提供するときに、が開始され、現在ファイルに関するメタデータを取得しています。
  • lsの場合 リストが完全に取得されたとき、または少なくともそのチャンクの後に、が開始され、現在ディレクトリをリストしています。

lsのせいではありません コマンド(まだ開始されていない可能性があります)。それはシェルのせいでもありません。それはNFSのせいです。 NFSはかなり遅いです。


Linux
  1. Rmが読み取り専用ファイルを削除できるのはなぜですか?

  2. ディレクトリ付きの猫ファイル?

  3. chownコマンドでファイルとディレクトリの所有権を変更する方法

  1. Duコマンドで–excludeを使用しますか?

  2. Linuxでduコマンドを使用してディレクトリサイズを確認する

  3. 「引数リストが長すぎます」というエラーでディレクトリからファイルを削除できない

  1. 例を含むLinuxzforceコマンドチュートリアル

  2. 例を含むLinuxCDコマンド

  3. OSX端末コマンドでディレクトリ内のファイル数をカウントする