次の方法で共有


プロセスへのCPU割り当てについて

質問

2015年2月19日木曜日 6:37

お世話になります。

特定のプロセスがマルチCPUの全リソースを食いつぶしてしまい、OS全体のパフォーマンスが低下することがあります。

対象プロセスは、dfsrs.exeです。

タスクマネージャからこのプロセスを指定して、「関係の設定」で適用するCPUを1つ外すだけで求める性能が発揮できることがわかっています。

OS起動時にも自動でdfsrs.exeに対してCPUのaffintyを設定したいのですが、このプロセスはWindowsのサービス"DFSR"に登録されています。

よって、cmd /c start "" /affinity 1 "C:\Windows\System32\dfsrs.exe" というコマンドでは起動できません。

どのようにすれば、OS起動時にaffintyを設定することができますでしょうか。

助言をお願いいたします。

すべての返信 (2)

2015年2月19日木曜日 8:54 ✅回答済み | 1 票

チャブーンです。

GUIでしかできない、ということのようですから、「GUIと同じこと」をコマンドで実行するといいでしょう。このコマンドをスクリプト化して、DFS Replicationイベントログに記録される、イベントID:1004/ソース:DFSRの「イベントにタスクを設定」することで、このタスクで実行させます。1004はDFS Replicationが完全に起動したことを通知するイベントです。

(Get-Process "dfsrs").ProcessorAffinity=1

http://waynes-world-it.blogspot.jp/2009/06/processor-affinity-on-windows-server.html

スクリプト化したコマンドは、タスク登録時に以下のように設定します。タスクの設定で「ログオンにかかわらず実行する」と「最上位の権限で実行する」への変更も忘れずに。

powershell.exe -file <スクリプトのフルパス>

こうすることで、起動時にaffinity 1の状態でプロセスが実行されます。簡単に試したところ、想定通りに動作しました。ただし、このような動作をMSがサポートしているかどうかはわかりませんので**、自己責任で実施**してください。

ちなみにdfsrs.exeプロセスをWMIで監視してコマンドを実行する方法もあるよう。したの参考情報をご覧になってください。

http://blogs.technet.com/b/junichia/archive/2012/03/30/3489331.aspx
https://powerevents.codeplex.com/

追記:内容を若干変更しました。


2015年2月19日木曜日 23:58 ✅回答済み

チャブーン様

お世話になります。

早急且つ適切な助言を賜りありがとうございます。

>(Get-Process "dfsrs").ProcessorAffinity=1

この部分だけでも当方の目的に合致します。

>DFS Replicationイベントログに記録される、イベントID:1004/ソース:DFSRの「イベントにタスクを設定」することで、このタスクで実行させます。

さらに踏み込んだ助言までいただき、とても感謝をしております。

誠にありがとうございました。