Regarding ionice - on linux the impact of the ionice -c3 class is similar to that of nice, because the CPU "niceness" is taken into account when calculating the io niceness.
proc_nice
(PHP 5)
proc_nice — 現在のプロセスの優先度を変更する
説明
bool proc_nice
( int $increment
)
proc_nice() は、現在のプロセスの優先度を increment で指定された値に変更します。 increment が正数の場合、 現在のプロセスの優先度をより低くし、increment が負数の場合は優先度が上がります。
proc_nice() は、proc_open() やそれに関連する関数とは関係ありません。
パラメータ
- increment
-
変更する優先度の増加値
返り値
成功した場合に TRUE を、失敗した場合に FALSE を返します。 ユーザーが優先度を変更する権限を持っていないなど、 エラーが発生した場合は E_WARNING レベルのエラーも発行されます。
注意
注意: 可用性
proc_nice() は、使用しているシステムが 'nice' の機能を持っている場合のみ利用可能です。 'nice' は次のシステムに準拠しています: SVr4, SVID EXT, AT&T, X/OPEN, BSD 4.3 。 これは Windows では proc_nice() を利用できないことを意味します。
Marek
19-Jan-2011 08:40
php at richardneill dot org
24-Jun-2010 12:14
If a process is reniced, then all its children inherit that niceness. So a PHP script can call proc_nice on itself, then invoke system(), and the command executed via system() will also be niced.
Also worth making a note of ionice. There's no PHP function for this, but it's important. A nice'd program will happily try to chew up all i/o bandwidth with very little CPU usage, it can therefore make the entire computer non-responsive despite the programmer's intention. Use "ionice -c3" or see "man ionice"
pandi at home dot pl
25-Nov-2008 05:22
Simple function for check process nice, by default returns nice of current process:
<?php
public static function getProcessNice ($pid = null) {
if (!$pid) {
$pid = getmypid ();
}
$res = `ps -p $pid -o "%p %n"`;
preg_match ('/^\s*\w+\s+\w+\s*(\d+)\s+(\d+)/m', $res, $matches);
return array ('pid' => (isset ($matches[1]) ? $matches[1] : null), 'nice' => (isset ($matches[2]) ? $matches[2] : null));
}
?>
php at riggers dot me dot uk
12-Aug-2004 04:20
Just an addition to the previous note re: exec('renice...'). The exit_func() will not set the priority back to normal (0) (at least on linux), unless the user that the webserver is running as is a super user (bad idea). You can decrease the priority of the running task, but not increase it again. See man page for renice.
To prevent subsequent requests running at the lower priority I called apache_child_terminate() on shutdown.
griph at dd dot chalmer dot se
10-Nov-2003 02:34
If you don't have PHP5 and needs to nice your process this works good.
<?php
function proc_nice($priority) {
exec("renice +$priority ".getmypid());
}
//You also need a shutdown function if you don't want to leave your http deamons with a modified priority
function exit_func(){
// Restore priority
proc_nice(0);
}
register_shutdown_function('exit_func');
?>
