CPU / Speicherverbrauch hoch und schwankt



  • Hallo Leute,

    ich habe eine Server Applikation OO-programmiert.

    Bei dieser schwankt, während der Arbeit, die CPU Auslastung von 5% bis 20%.

    Das Problem ist, dass der Code zu groß ist um diesen zu posten.

    Allerdings wollte ich fragen, ob es gewisse Faustregeln gibt, die man beachten sollte, um sowas zu verhindern?

    Danke



  • Profiler nutzen und gucken was da so lange braucht? 🙂



  • Da musst du mich jetzt nochmal kurz aufklären in einem Satz 😃


  • Mod

    Kein aktives Warten. Dumme Sachen wie die in C++ leicht versehentlich erstellbaren unnötigen Kopien von großen Datenstrukturen vermeiden. Wenn du wissen willst, wo dran es genau hakt: Profiler benutzen, niemals selber raten!

    Für konkretere Antworten ist die Frage zu allgemein gestellt.



  • Ja, richtig SeppJ, die Frage is zu allgemein 😞 Aber genauer kann man sie in diesem Fall ohne den Code zu posten nicht stellen.

    Kann mir jemand einen Profiler empfehlen?

    Windoof Vista 🙂

    Danke



  • Bin mit AQTime ganz zufrieden, ist aber keine Freeware. Auf der Herstellerseite gibt´s aber eine Trial, keine Ahnung, welchen Einschränkungen die unterliegt.
    Von AMD gibt´s Code Analyst, scheint frei zu sein, habe ich aber noch nie verwendet.

    Sonst einfach mal google bemühen:
    very sleepy oder Shiny profiler, kenne ich beide nicht.



  • Von AQTime gibt es (neuerdings?) auch eine kostenlose Standardversion.
    http://smartbear.com/products/development-tools/performance-profiling/standard-vs-pro/



  • So, ich melde mich zurück:)

    Vielen Dank erstmal!

    Habe Sleepy genommen, scheint mir auf die Schnelle sehr übersichtlich 🙂

    http://s7.directupload.net/images/120111/je9fkk3d.jpg

    Hier der Auszug. Sehe ich es richtig, dass Sleep() vor Allem Schuld trägt?

    Steht WaitForSingleObjekt und WaitForMultipleObjekt in einem Zusammenhang zu Sleep(), da diese nicht im Sourcecode aufgerufen werden?

    Da es sich nun doch um WinApi Funktionen handelt, bitte verschieben wenn nötig.

    Danke



  • Sag mal was genau macht dein Programm eigentlich? 🙂



  • Wenn das das ist, was ich denke, dann machen die wait-funktionen etwas ähnliches wie sleep. Diese Funktionen dienen zur Synchronisation von Threads. Ein Thread wartet also, bis ein anderer ihm bescheid sagt, dass irgendetwas passiert oder bereit ist.
    Bei diesen Funktionen wird zwar die höchste Zeit angezeigt, diese sorgen aber gerade dafür, dass KEINE CPU-Zeit verbraucht wird, weil während des wartens der Prozess pausiert wird.
    Also guck am besten bei VirtualQuery und den Sachen die weiter unten stehen.



  • Das Programm empfängt Daten über Sockets, verarbeitet diese und stellt diese einer anderen API zur Verfügung, die diese Daten in ein Etikett umsetzt. Es ist im Endeffekt ein Printserver für Etiketten.

    Ja, das mit WaitForSingle/MultipleObjekts weiß ich. Allerdings werden diese nicht benutzt...Deshalb frage ich mich, warum diese aufgerufen werden...

    Soweit ich allerdings weiß, sollte Sleep doch keine wirkliche CPU Auslastung erzeugen oder habe ich mich falsch informiert?

    VirtualQuery wird von mir selbst auch nicht aufgerufen. Scheinbar über eine andere Funktion. Entweder hab ich eine Funktion, die VirtualQuery nutzt oder es liegt an der API der anderen Software..



  • Ich würde sagen du brauchst einen besseren Profiler 🙂
    z.B. einen der "sleep time" versteht, und entsprechend berücksichtigt.
    Idealerweise gleich einen der nen Callgraphen basteln kann, inklusive wie oft verschiedene Funktionen aufgerufen wurden, wo diese Aufrufe herkommen etc.

    Guck mal was die Standard-Version von AQTime so macht, vielleicht kann der das ja.

    Sonst...
    LIXObStatJobOpen sieht verdächtig aus.
    Die Zeit von LoadLibraryW ist auch etwas verdächtig.



  • Vielen Dank erstmal!!!

    Man sollte auch den DebugModus der anderen API ausschalten... 🙄

    Ist zwar noch immer schwankend zwischen 3% und 9% ..

    LIXObStatJobOpen brauch leider viel Auslastung..

    Aber ich bin schon ein gutes Stück weiter, den Rest suche ich noch 🙂

    z.B. einen der "sleep time" versteht, und entsprechend berücksichtigt.

    Bestätigst du mich dann mit der Aussage, dass ein Sleep() eigentlich keine bemerkbare Rechenleistung benötigt?! 🙂

    Danke nochmals


Anmelden zum Antworten