タスクマネージャを使用してプロセスの優先度を手動で変更せずに、低い優先度で自動的に開始するようにWindowsサービスプロセス(たとえばsquidNT、SQL Serverなど)を構成する方法はありますか?
タスクマネージャを使用してプロセスの優先度を手動で変更せずに、低い優先度で自動的に開始するようにWindowsサービスプロセス(たとえばsquidNT、SQL Serverなど)を構成する方法はありますか?
回答:
サービスの開始/停止を処理するサービスコントロールマネージャーには、開始するプロセスの優先順位を指定するメカニズムがありません(これまでのWindowsのどのバージョンでも)。
すでに実行中のプロセスの優先順位を変更できるため、最善の策はツールを使用することです。
プロセスの優先度を変更するマイクロソフトのコマンドラインツールは知りませんが、http://www.teamcti.com/pview/prcview.htmで利用可能な「PV」コマンドラインにも優先度を設定する機能があります。
pv -pb process-name.exe
これにより、「process-name.exe」の優先度が「通常以下」に設定されます。
プロセスを変更するまで「通常」の優先度でプロセスを実行できる場合は、「スケジュールされたタスク」として実行されるスクリプトを使用して、サービスが頻繁に起動するようにすることができます。バウンス)。
それは手早くて汚いハックですが、人生の多くの財産は仕事を成し遂げる手早くて汚いハックに負うところです!
上記の答えは私にはうまくいきませんでした。次のPowerShellスクリプトの作成を終了しました。
ChangePriority.ps1
Get-WmiObject Win32_process -Filter 'name="ProcessName.exe"' | ForEach-Object {$_.SetPriority(128)}
そして、5分ごとに呼び出すタスクを作成しました。管理者プロンプトまたはバッチスクリプト:
schtasks /Create /tn "Process Priority Change" /sc MINUTE /mo 5 /ru SYSTEM /tr "powershell -noprofile -executionpolicy bypass -file \"%cd%\ChangePriority.ps1\""
ここでwmic
説明したように使用しようとしましたたようて、ファイルに依存しないスケジュールされたタスクを失敗させようとしました。同様に、powershellスクリプトを使用します。インラインスクリプトでタスクを作成する単一のコマンドを作成することはできませんでした。あなたがそれをやり遂げて別の答えを追加できた場合は感謝します。
powershellスクリプトの優先順位の値は、ここで見つけることができます[1]。
以下も動作する可能性があります。ImagePathレジストリキーを編集し、cmd.exeからstartコマンドを使用します。
START ["title"] [/Dpath] [/I] [/MIN] [/MAX] [/SEPARATE | /SHARED]
[/LOW | /NORMAL | /HIGH | /REALTIME | /ABOVENORMAL | /BELOWNORMAL]
[/WAIT] [/B] [command/program]
[parameters]
ImagePath
はWindowsサービスのインターフェイスを尊重する必要があるため、これはまったく機能しません。また、実行されている実行可能ファイルにstart
実装もルーティングもされません。
teamcityのCPU使用量を減らすために、それをしなければなりませんでした。また、teamcityが実行している唯一のJavaアプリであるため、このソリューションは完全に機能します。
サービスを開始するバッチファイルを作成し、次のように優先度を下げます。
net start tcbuildagent
net start teamcity
wmic process name = "java.exe" CALL setpriority "below normal"
TaskSchedulerトリガーを1分の遅延で構成し、他のサービスの開始を妨げないようにしました。
psまた、すべてのサービスのスタートアップを手動として設定し、そのバッチファイルを使用して、必要な順序ですべてのサービスを開始することもできます。SQL、IISなど