Apakah ada cara untuk mengkonfigurasi proses layanan Windows (mis. SquidNT, SQL Server, dll) untuk memulai secara otomatis dengan prioritas rendah tanpa mengubah prioritas proses secara manual melalui Task Manager?
Apakah ada cara untuk mengkonfigurasi proses layanan Windows (mis. SquidNT, SQL Server, dll) untuk memulai secara otomatis dengan prioritas rendah tanpa mengubah prioritas proses secara manual melalui Task Manager?
Jawaban:
Service Control Manager, yang menangani layanan permulaan / penghentian, tidak memiliki mekanisme apa pun (dalam versi Windows apa pun sebelumnya) untuk menentukan prioritas pada proses yang dimulai.
Karena Anda dapat memodifikasi prioritas pada proses yang sudah berjalan, taruhan terbaik Anda mungkin menggunakan alat untuk melakukan itu.
Saya tidak mengetahui alat baris perintah Microsoft untuk mengubah prioritas proses, tetapi baris perintah "PV" juga tersedia di http://www.teamcti.com/pview/prcview.htm memiliki fungsi untuk menetapkan prioritas .
pv -pb process-name.exe
Itu akan mengatur "process-name.exe" menjadi prioritas "Below Normal".
Jika Anda dapat hidup dengan proses mulai dari prioritas "Normal" hingga Anda mengubahnya, Anda dapat melakukannya dengan skrip yang dijalankan sebagai "Tugas Terjadwal" untuk mematikan setiap-sesekali (jika layanan mendapatkan memantul).
Ini peretasan yang cepat dan kotor, tetapi saya berhutang banyak pada kehidupan saya karena peretasan yang cepat dan kotor yang menyelesaikan pekerjaan!
Jawaban di atas tidak bekerja untuk saya. Saya akhirnya membuat skrip PowerShell berikut:
ChangePriority.ps1
Get-WmiObject Win32_process -Filter 'name="ProcessName.exe"' | ForEach-Object {$_.SetPriority(128)}
Dan kemudian saya membuat tugas yang dijadwalkan yang menyebutnya setiap 5 menit. Dari skrip Administrator atau skrip batch:
schtasks /Create /tn "Process Priority Change" /sc MINUTE /mo 5 /ru SYSTEM /tr "powershell -noprofile -executionpolicy bypass -file \"%cd%\ChangePriority.ps1\""
Diusahakan untuk digunakan wmic
sebagaimana dibahas di sini untuk membuat tugas yang dijadwalkan tidak tergantung pada file yang gagal. Similary menggunakan skrip powershell: Saya tidak bisa hanya membuat satu perintah yang hanya membuat tugas dengan skrip inline. Dihargai jika Anda berhasil melakukannya dan menambahkan jawaban lain.
Nilai untuk prioritas dalam skrip powershell dapat ditemukan di sini [1].
Berikut ini mungkin juga berfungsi. Edit kunci registri ImagePath, dan gunakan perintah mulai dari cmd.exe:
START ["title"] [/Dpath] [/I] [/MIN] [/MAX] [/SEPARATE | /SHARED]
[/LOW | /NORMAL | /HIGH | /REALTIME | /ABOVENORMAL | /BELOWNORMAL]
[/WAIT] [/B] [command/program]
[parameters]
ImagePath
harus menghormati antarmuka untuk layanan Windows, dan start
tidak mengimplementasikan atau tidak akan merutekan ini ke executable yang diluncurkan.
Saya harus melakukan itu untuk membuat teamcity mengambil cpu lebih sedikit. Dan, karena teamcity adalah satu-satunya aplikasi java yang kami jalankan, solusi itu bekerja dengan sempurna.
Buat file batch, yang akan memulai layanan Anda, dan turunkan prioritas, seperti:
net start tcbuildagent
net start teamcity
proses wmic di mana nama = "java.exe" CALL setpriority "di bawah normal"
Saya mengkonfigurasi pemicu TaskScheduler dengan penundaan 1 menit, agar tidak mengganggu layanan lainnya.
ps Anda juga dapat mengatur semua startup layanan Anda sebagai manual, dan menggunakan file batch itu untuk memulai semuanya sesuai urutan yang Anda inginkan! SQL, IIS, dll.