1

作業ディレクトリがGitリポジトリの場合、現在のリポジトリの名前を表示するBashプロンプトを作成しました。さらに、現在進行中のタスクとそれを実行するために費やした時間(自作の計時ツールから)が含まれています。もちろん、これは、プロンプトを表示するだけで2つのプロセスを実行することを意味します。

killallこれには、システムが何らかの理由でスラッシングしている場合、バイナリをロードするだけgitではそのような状態のシステムに要求するには多すぎるため、システムを保存するために必要なプロンプトを取得するのに永遠に時間がかかるという欠点があります。

そのため、現在、プロンプトはデフォルトで無効になっており、オンデマンドでのみ有効になっていますが、これはそれほど快適ではありません。で負荷を検出し.bashrc、システムが正常に実行されている場合(つまり、許容可能なディスク遅延がある場合)にのみプロンプトを有効にする方がよいでしょう。

このような状況では、CPUはかなり安価であり、ディスクだけが高価です。したがって、外部ユーティリティに依存せずにスラッシングを検出する方法が必要です。

ヒント:/proc何か役に立つかもしれません。たとえば/proc/loadavg、ボトルネックの原因がディスクではなくCPUである場合、私の問題は解決します。

4

2 に答える 2

2

vmstatあなたを助けることができます。使いたくない場合は、すべての情報がオンになっています

  • /proc/meminfo
  • /proc/stat
  • /proc/PID/統計
于 2010-07-19T06:31:18.907 に答える
2

最も簡単な方法は、 の最初のバイトをチェックし、/proc/loadavgそれが0

これはうまくいきます

loadavg=$(</proc/loadavg)
if [ "${loadavg:0:1}" = "0" ]; then echo "all clear"; fi

testただし、実行できる(または)はまだあります[が、これは bash に組み込まれている可能性があります。編集^ 2少なくともbash 3.2.39では組み込みですが、長い間組み込まれていると思われます。したがって、これはすべて別のプロセスなしで実行できます。

edit^3:更新、細かい制御のために:

if [ "${loadavg:0:1}${loadavg:2:2}" -lt "60" ]; then echo "below 0.6"; fi

編集^ 4:ディスク I/O が目前の問題のボトルネックであるとは想像できません。とにかくキャッシュされている場所から書き込みではなく読み取りのみを行う限り、これは純粋なメモリ/ CPUの問題です。

編集^ 5:もちろん、これは1 cpuの場合です。しきい値のパーセンテージにコア数を掛けます(HTプロセッサの場合、確実に「コア」の半分を取ります)

于 2010-07-19T06:31:48.560 に答える