Avatar billede bgo Nybegynder
17. maj 2008 - 13:52 Der er 3 kommentarer og
1 løsning

Service: CPU-forbrug og restart

Nu er jeg total n00b med vb.net (og windows-programmering i det hele taget), så jeg er lidt lost i øjeblikket mht. hvad jeg skal søge efter.

Jeg har et problem med en en process (httpd) der ind imellem går amok, og konstant kører 50% eller 97% på cpu'en. Den eneste måde at rette op på dette er ved at genstarte wampapache servicen. Der er selvfølgelig et eller andet galt somewhere, men jeg har indtil videre ikke kunnet identificere hvad.

Nu kom jeg så til at tænke på, at som en midlertidig løsning kunne jeg lave en service der checkede processens cpu-forbrug, og hvis den var for høj i en vis periode, så genstarte servicen.

Som total n00b er der så nogle ting jeg ikke ved hvordan jeg gør:

1) Checke cpu-forbrug på en process
2) Genstarte en "fremmed" service
3) Tage tid

Jeg håber nogle kan hjælpe mig på rette vej.

Jeg arbejder med Visual Studio 2008, iøvrigt
Avatar billede arne_v Ekspert
17. maj 2008 - 15:17 #1
re 1)

Du bør kunne få noget inspiration her:

Imports System
Imports System.Diagnostics
Imports System.Threading

Namespace E
    Public Class Program
        Public Shared Sub Main(args As String())
            While True
                Dim p As Process() = Process.GetProcessesByName("firefox")
                If p.Length > 0 Then
                    Dim p0 As Process = p(0)
                    Dim t1 As Long = DateTime.Now.Ticks
                    Dim p0t1 As Long = p0.TotalProcessorTime.Ticks
                    Thread.Sleep(100)
                    Dim t2 As Long = DateTime.Now.Ticks
                    Dim p0t2 As Long = p0.TotalProcessorTime.Ticks
                    Dim pct As Integer = CInt((100 * (p0t2 - p0t1) \ (t2 - t1)))
                    Console.WriteLine(pct)
                Else
                    Exit While
                End If
            End While
        End Sub
    End Class
End Namespace
Avatar billede arne_v Ekspert
17. maj 2008 - 15:20 #2
re 2)

Dim sc As ServiceController = New ServiceController("Foobar")
sc.Stop()
Thread.Sleep(1000)
sc.Start()
Avatar billede bgo Nybegynder
18. maj 2008 - 16:05 #3
hey, lige hvad jeg skulle bruge for at komme videre - tak :) Til ServiceController skal jeg så blot huske at tilføje en reference til System.ServiceProcess, og så kan jeg sandsynligvis bruge .WaitForStatus til at afgøre hvornår det er muligt at starte servicen igen :)

Og med processen fik jeg lige det input jeg skulle bruge for at finde det hul jeg skulle bruge :) httpd står på listen to gange, men med hjælp af det du gav mig, kunne jeg finde frem til at lave min egen liste, med process id, og så kan jeg checke cpu-forbruget på begge processer via id'en (.GetProcessesById)

Takker mange gange :) Smider du et svar, så er der point :)
Avatar billede arne_v Ekspert
18. maj 2008 - 16:27 #4
svar
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester