2008年9月1日月曜日

startコマンドで優先度を変更してタスク実行@WindowsServer

サーバ管理のために作ったバッチファイルがやたら重くて、肝心のサーバアプリケーション(IISやファイル共有など)にレスポンス低下などの影響を及ぼすことがある。
 
運用管理を楽にしようと集計などの自動化を図っても、サーバレスポンス低下によるユーザの苦情に追われるようになっては始末が悪い。WindowsServer標準の startコマンド(参考:TechNet) を使ってみると、そんな軽い二律背反な状況を回避できたりする。
 
 

要はバッチの優先度を低くして実行するだけなんですが、これが意外と効く。少なくともCPUのリソースをバッチが大きく食っているならかなり顕著に効果が出ます。
Startコマンド のヘルプを下記に一部抜粋。
 

> start /?
指定されたプログラムまたはコマンドを実行するためにウィンドウを開きます。
(略)
B 新しいウィンドウを作成せずにアプリケーションを起動します。
(略)
/LOW IDLE 優先度クラスでアプリケーションを起動します。
/NORMAL NORMAL 優先度クラスでアプリケーションを起動します。
/HIGH HIGH 優先度クラスでアプリケーションを起動します。
/REALTIME REALTIME 優先度クラスでアプリケーションを起動します。
/ABOVENORMAL
ABOVENORMAL 優先度クラスでアプリケーションを起動します。
/BELOWNORMAL
BELOWNORMAL 優先度クラスでアプリケーションを起動します。
(略)

 

お勧めは BELOWNORMAL(通常以下)、これで十分です。
たとえばタスクに登録したジョブがCPUを100%使っている状況でも、IISにリクエストがくればさくっと割り込みして処理してくれます。
 
 

一応叩き方の例を、
 

// バッチまたはコマンドを実行
> Start /B /BELOWNORMAL hogehoge.bat

 
// 応用、VBScriptを実行
> Start /B /BELOWNORMAL Cscript hogehoge.vbs

 
 

効果の保証はしないけど、特定のケースで実際役に立っています。