現在の位置: ホーム> 最新記事一覧> PHPでPROC_NICEを使用してプロセスのCPU時間スライスの優先度を設定する方法は?

PHPでPROC_NICEを使用してプロセスのCPU時間スライスの優先度を設定する方法は?

gitbox 2025-05-29

proc_nice()とは何ですか?

proc_nice()は、PHPが提供するシステムコールインターフェイスであり、現在のプロセスの「値」を変更するために使用されます。いわゆる「値」は、UNIXのようなシステムでプロセスの優先順位を測定するための指標です。値が小さいほど、優先度が高くなります。値が大きいほど、優先度が低くなります。範囲は通常-20〜19で、デフォルトは0です。

 <?php
$originalNice = proc_nice(0); // 電流を照会します nice 価値
echo "現在のプロセス nice 価値为: $originalNice\n";

// 優先順位を向上させます(減らす nice 価値)
if (proc_nice(-10)) {
    echo "プロセスの優先順位を正常にアップグレードしました。\n";
} else {
    echo "プロセスの優先順位を改善できませんでした(必要になる場合があります root 権限)。\n";
}
?>

注意すべきこと

  1. 許可制限:値を下げる(優先度を上げる)には、通常、ルートなどのより高い許可が必要です。通常のユーザーは、デフォルトでのみ良い値を増やすことができます(つまり、優先順位を減らします)。

  2. 一時的な効果proc_nice()を使用すると、現在のスクリプトプロセスにのみ影響し、システム設定を永続的に変更しません。

  3. クロスプラットフォームの違い:Windowsシステムはproc_nice()をサポートせず、このプラットフォームでの呼び出しは失敗します。

典型的な使用シナリオ

画像圧縮バッチ処理ツールを作成し、ユーザーが一度に数百の画像をアップロードしているとしたら、処理プロセスに非常に時間がかかる場合があります。 proc_nice()を使用して、スクリプトの実行の優先度を増やして、できるだけ多くのCPUを使用し、総処理時間を短縮できます。

 <?php
proc_nice(-5); // プロセスの優先順位をわずかに増やすようにしてください

$images = glob('/path/to/uploads/*.jpg');

foreach ($images as $image) {
    $compressed = compressImage($image);
    file_put_contents('/path/to/compressed/' . basename($image), $compressed);
}

function compressImage($file) {
    // サンプル圧縮ロジック(擬似コード)
    $img = imagecreatefromjpeg($file);
    ob_start();
    imagejpeg($img, null, 60);
    $data = ob_get_clean();
    imagedestroy($img);
    return $data;
}
?>

タスクキュー(Redisベースのメッセージキューなど)と互換性がある場合は、スクリプトを処理するためにより高い優先度を設定することにより、CPUにタスクを優先することもできます。

CLIモードでより効果的です

ほとんどのWebサーバーはPHP(30秒など)で実行時間制限があり、動作環境が比較的限られているため、コマンドライン(CLI)モードでProc_nice()を使用することをお勧めします。

 php /var/www/gitbox.net/scripts/image_compress.php

これにより、素敵な値を自由に調整できるだけでなく、Crontab、SystemDなどを介してタスクをスケジュールすることもできます。


Advanced: Niceコマンドと組み合わせて使用

PHP内でPROC_NICE()を呼び出したり、制限付きホスト環境で実行できない場合は、オペレーティングシステムのNICEコマンドを使用してPHPスクリプトを外部的に開始できます。

 nice -n -10 php /var/www/gitbox.net/scripts/heavy_task.php

これにより、生産環境での展開に適した優先制御も可能になります。