2

共有 *NIX サーバー (Site5 が実行) で実行しています。バックグラウンドで時折オフライン計算を実行するphpスクリプトがあります。実行中は約 100% の CPU を使用します。私は次のようにナイスしてみました:

nice -n 19 php script.php

しかし、それは何の違いもないようです。

4

5 に答える 5

8

コードを通じて usleep ( int $micro_seconds ) を分散させることができます。これにより、スクリプトが一時的に停止し、CPU が他のことのために解放されます。

しかし、それは必要でしょうか?スクリプトの優先度が低い場合、それが CPU の 100% を使用していることは重要ですか...優先度の高い他のプロセスが必要な場合、CPU は必要な時間を取得できず、スクリプトは残りを取得します (最大100%)?

于 2008-12-19T19:09:20.517 に答える
5

たとえ利用可能であれば、CPU を 100% 使用します。ただし、カーネルは、発生する他の (Nice ではない) プロセスを優先します。

于 2008-12-19T19:09:04.683 に答える
4

システムの応答性が高く、実行中に他の作業を実行できる限り、私は心配しません。システムで分散コンピューティング クライアントを実行していますが、使用可能な CPU サイクルをすべて消費しています。最も低い優先度で実行されるため、他のすべてのプロセスが必要に応じてプリエンプトします。

于 2008-12-19T19:40:39.690 に答える
1

コンテキストスイッチにかなりのプロセスがある場合、phpが100%CPUになる頻度を変更しますが、その量は変更しません。

プログラムがシステムコールを実行した瞬間、カーネルは実際のジョブを実行する前にCPUを別のプロセスに譲ることができます。フルスピードで実行している場合、PHPはシステムコールを行わないようです。つまり、ブロッキングI / O(ソケット、ファイルなど)を作成していません。コードブロックがビジーウェイトでスタックしていないかどうかを確認します。

于 2008-12-19T21:38:17.720 に答える
1

プロセスがバックグラウンドであり、CPU を 100% 使用しているため、プロセスが CPU バウンドのようです。これはバックグラウンドであるため、ユーザー バウンドは想定されないため、唯一の代替手段は IO バウンドです。プロセスが実際に興味深い IO を行うべきではない場合、スクリプト自体はバグがあるだけでなく、CPU バウンドであると予想されます。

プロセスは常に可能な限り速く進めようとします。IO バウンドの場合は 100% の IO を使用し、CPU バウンドの場合は 100% の CPU を使用しようとします。適切に作成されたプロセス スケジューラは、すべてのプロセスに公平感を与えることを自動的に目指します。つまり、大きなプロセスほど優先度が低くなります。nice を使用すると、優先度をさらに下げることができます。CPU 使用率がまだ約 100% であるという事実は、現在 CPU バウンドになっている他のプロセスがなく、ネットワークからの入力を待っている可能性が高いことを意味します。

于 2008-12-19T20:39:34.920 に答える