プロセスへの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の「イベントにタスクを設定」することで、このタスクで実行させます。
さらに踏み込んだ助言までいただき、とても感謝をしております。
誠にありがとうございました。