web-dev-qa-db-ja.com

* nixで、topコマンドで「スリープ」が発生する原因は何ですか?

sleepingに表示されるこれらのtopプロセスの原因は何ですか? PHPのsleep()関数を呼び出すと、sleepingに表示されるtopカウントに追加されますか? sleepingに高い数値があることの不利な点はありますか?

16

プロセスがブロックされるとスリープ状態になり、何かを待機します。たとえば、read()を呼び出して、ネットワークストリームからのデータの到着を待機している可能性があります。

sleep()は、プロセスをしばらくスリープ状態にする1つの方法です。ただし、スリープは、計算量が多いプロセスを除くすべてのプロセスの通常の状態です。スリープは、基本的に、プロセスが他に何もしていないときに実行することです。ほとんどのプロセスがスリープ状態になっているのは正常な状態です。その場合、notの場合は、より多くのCPU馬力が必要であることを示している傾向があります。

20
caf

スリーププロセスは、中断されたプロセスのようなものです。プロセスは次の場合にスリープします。

  1. I/O操作を実行しています(I/Oのブロック)
  2. Sleep()でスリープするように注文した場合

プロセスのステータスは次のとおりです。

  • 準備完了:実行の準備ができており、特定の優先度でプロセッサ呼び出しを待機しているキューにある場合
  • スリープ:実行中で、I/O操作のためにブロックされたとき、またはsleep()を実行したとき
  • 実行中:プロセッサがプロセスを実行すると、実行されます。

ステータス意味

  • Rランナブル

  • T停止

  • PPageinを待っています

  • D I/Oを待機しています

  • Sスリープ<20秒

  • Iアイドル-20秒以上の睡眠

  • Zゾンビまたは廃止

10
Aboelnour

それらはCPU上で実行されていないプロセスです現在。これは必ずしも悪いことではありません。

スリープしているプロセスの数が膨大な場合(サーバーシステムでは10,000など)、それらを追跡するために使用されるメモリの量などにより、スリープしていないプロセスのシステムの効率が低下する可能性があります。

それ以外の場合は問題ありません。

ほとんどの通常のサーバーシステムには、ほとんどの場合100から1000があります。これは大したことではありません。

彼らが今何もしていないからといって、すぐにそうしないという意味ではありません。それらをメモリに保持し、準備ができていると、必要なときに待ち時間が短縮されます。

2
MarkR

ここでもう少し詳しく説明すると、S状態はプロセスがタイマーまたは低速デバイスで待機していることを意味し、D状態はプロセスが高速デバイスで待機していることを意味します。

高速デバイスと低速デバイスを構成するものは、それほど明確に定義されていませんが、一般に、すべてのシリアル、ネットワーク、および端末デバイスは低速デバイスであり、ディスクは高速デバイスです。

2
Chris Dodd