Skrip Shell yang memantau penggunaan CPU dan mengakhiri layanan dengan pemanfaatan CPU yang tinggi

1

Kami memiliki server Windows 2003 di mana 3 layanan berjalan terus-menerus. Terkadang layanan ini mengonsumsi lebih dari 90% CPU. Restart layanan ini mengembalikan normal. Saya membutuhkan skrip / program yang akan terus memantau penggunaan CPU dan jika penggunaannya tinggi maka restart layanan tersebut.

Setelah sedikit riset saya menemukan skrip ini untuk memantau penggunaan CPU dari Technet .

Script untuk memantau penggunaan CPU:

(get-counter -Counter "\Processor(_Total)\% Processor Time"
-SampleInterval 1 -MaxSamples 10 |
    select -ExpandProperty countersamples | select -ExpandProperty
cookedvalue | Measure-Object -Average).average

Ini memantau penggunaan CPU selama 10 detik dan kemudian menampilkan output rata-rata.

Juga dari Stack Overflow dan Server Fault saya menemukan skrip untuk me-restart layanan Windows. ( Mana yang lebih baik? )

Sekarang yang saya butuhkan adalah skrip penggunaan CPU untuk memanggil skrip restart layanan ketika kondisi penggunaan> 90% terpenuhi. Bantuan apa pun akan dihargai.

Gh0sT
sumber
layanan mana yang menyebabkan tingginya penggunaan CPU? Gunakan xperf untuk melihat fungsi mana yang menyebabkan penggunaan.
magicandre1981
Kami menjalankan aplikasi EPABX di server .. layanan terkait dengan yang sama ... Saya tahu layanannya .. Saya hanya perlu jalan keluar untuk memulai kembali secara otomatis ketika mereka secara otomatis ketika mereka mulai sumber daya memonopoli.
Gh0sT
Ya ... akan lebih bagus jika Anda dapat menentukan jenis sistem operasi apa yang Anda butuhkan. Solusi untuk Linux sangat mudah - mpstat -A | grep all | head -1 akan memberi Anda penggunaan CPU dan berdasarkan nilainya Anda dapat memulai kembali layanan. Di windows saya akan menyarankan untuk menggunakan PowerShell Get-WmiObject win32_processor | select LoadPercentage |flyang akan memberi Anda penggunaan CPU dan untuk me-restart layanan menggunakan perintah scdengan switch / parameter yang tepat.
mnmnc
Ini Server 2003. @mnmnc Saya pikir skrip WMI yang Anda tunjukkan akan menunjukkan penggunaan CPU pada saat tertentu. Sekarang ada beberapa alasan mengapa penggunaan CPU tiba-tiba meningkat. Saya secara khusus membutuhkan skrip yang akan memantau penggunaan untuk jangka waktu tertentu (katakanlah 10 detik) maka jika> 90%, akan memulai kembali beberapa layanan tertentu. Saya mungkin menambahkan bahwa layanan tidak berhenti secara instan ... jadi kita perlu menunggu beberapa saat / memeriksa status mereka untuk memulainya lagi. Bantuan apa pun akan sangat dihargai. Terima kasih sebelumnya.
Gh0sT
2
Anda harus menghubungi pembuat alat dan bertanya kepada mereka mengapa layanan ini memakan CPU.
magicandre1981

Jawaban:

4

Hanya sebagai catatan .. ada jawabannya :

$cpuutil=(get-counter -Counter "\Processor(_Total)\% Processor Time" -SampleInterval 1 -MaxSamples 5 |
    select -ExpandProperty countersamples | select -ExpandProperty cookedvalue | Measure-Object -Average).average

If ($cpuutil -ge 90)
{Restart-Service MyService1, "My Service2", MyService3}
Else
{Exit}

Powershell benar-benar membuat hidup lebih sederhana!

Gh0sT
sumber
0

Jika solusi komersial OK, periksa Pelindung Layanan kami . Ini akan menjaga setiap layanan windows dan memulai kembali jika terlalu lama memakan CPU.

CoreTech
sumber
Seperti yang saya sebutkan sudah ... ini BUKAN layanan windows
Gh0sT
@ gh0sT - Saya bingung - Anda telah mengatakan bahwa OS adalah server Win2003 dan sekarang itu bukan layanan Windows. Saya kira Anda mungkin berarti bahwa layanan tidak dibuat oleh Microsoft seperti pada 'tidak dikirim dengan Sistem Operasi' tetapi layanan pihak ketiga yang berjalan di server Windows2003. Apakah saya benar?
mnmnc
Ya..tepatnya..Ini adalah layanan pihak ketiga
Gh0sT