2008-11-14 6 views
37

Wenn ich die Verwendung von Leistungsindikatoren als die .NET-basierte Website meiner Unternehmen in Betracht ziehe, frage ich mich, wie groß der Aufwand dafür ist.Was ist der Leistungseinfluss von Leistungsindikatoren?

Möchte ich, dass meine Website fortlaufend die Zähler aktualisiert, oder mache ich es besser, wenn ich nur Messungen durchführe?

Antwort

20

Der Leistungseinfluss ist vernachlässigbar bei der Aktualisierung. Microsofts Absicht ist, dass Sie immer in die Leistungsindikatoren schreiben. Die Überwachung (oder Erfassung) dieser Leistungsindikatoren führt zu einer Leistungsminderung. Also nur, wenn Sie etwas wie perfmon verwenden, um die Daten zu erfassen.

Im Endeffekt werden die Leistungsindikatorobjekte nur dazu führen, "es zu tun, wenn Sie messen".

+0

Danke. Kannst du mich auf einige Zahlen verweisen? Ich bin neugierig, wie gut sie es bekommen haben ... – Boaz

+0

Ich habe es noch nie gezeigt, aber ich habe keinen Grund, daran zu zweifeln. Es wäre einfach in einer Anwendung zu beweisen. – dpurrington

+0

Hallo dpurrington. Durch "es ist die Überwachung ... die zu einer Verschlechterung der Leistung führt" meinen Sie, dass die Verschlechterung in dem Prozess, der die Zähler aktualisiert oder veröffentlicht, oder durch den Prozess, der sie überwacht, gesehen wird? – urig

1

Die Sache, die ich gefunden habe, ist, dass es für die Mehrheit der Anwendungen nicht so langsam ist. Ich würde keinen in eine enge Schleife bringen, oder etwas, das tausende Male pro Sekunde aufgerufen wird.

Zweitens fand ich, dass die Erstellung der Leistungsindikatoren programmatisch sehr langsam ist, also stellen Sie sicher, dass Sie sie vor Hand und nicht im Code erstellen.

2

Ich stimme mit famoushamsandwich überein, würde aber hinzufügen, dass, solange Ihre Abtastrate vernünftig ist (5 Sekunden oder mehr) und Sie einen vernünftigen Satz von Zählern überwachen, der Einfluss der Messung ebenfalls vernachlässigbar ist (in den meisten Fällen) .

7

Ein Leistungsindikator ist nur ein Zeiger auf 4/8 Bytes in gemeinsam genutztem Speicher (aka Memory-Mapped-Datei), so dass ihre Kosten sehr ähnlich zu dem Zugriff auf eine int/long Variabel sind.

27

Der Aufwand beim Einrichten der Leistungsindikatoren ist im Allgemeinen nicht hoch genug, um sich Sorgen zu machen (Einrichten einer gemeinsamen Speicherregion und einiger .NET-Objekte zusammen mit CLR-Aufwand, da die CLR die Verwaltung für Sie übernimmt). Ich beziehe mich hier auf Klassen wie PerformanceCounter.

Der Aufwand für die Registrierung der Leistungsindikatoren kann recht langsam sein, ist aber im Allgemeinen kein Problem, da es nur einmal zur Einrichtung stattfinden soll, weil Sie den gesamten Zustand der Maschine ändern möchten. Es wird durch jedes Kopieren, das du machst, in den Schatten gestellt. Es ist nicht generell etwas, das Sie zur Laufzeit tun möchten. Hier beziehe ich mich auf PerformanceCounterInstaller.

Der Aufwand beim Aktualisieren eines Leistungsindikators ist im Allgemeinen auf die Kosten für die Ausführung einer Interlock-Operation im gemeinsam genutzten Speicher zurückzuführen. Dies ist langsamer als der normale Speicherzugriff, ist aber ein Prozessor-Grundelement (so erhält es atomare Operationen über das gesamte Speichersubsystem einschließlich Caches). Im Allgemeinen sind diese Kosten nicht hoch, um die man sich kümmern muss. Es könnte 10 mal eine normale Speicheroperation sein, möglicherweise schlechter, abhängig von der Aktualisierung und wie die Konkurrenz zwischen Threads und CPUs ist. Aber denken Sie daran, es ist buchstäblich unmöglich, besser als verzahnte Operationen für die prozessübergreifende Kommunikation mit atomaren Updates zu arbeiten, und es werden keine Sperren gehalten. Hier verweise ich auf PerformanceCounter.Increment und ähnliche Methoden.

Der Aufwand beim Lesen eines Leistungsindikators ist in der Regel ein Lesen aus dem gemeinsamen Speicher. Wie andere bereits gesagt haben, möchten Sie in einem vernünftigen Zeitraum (wie bei jeder anderen Sampling-Probe) probieren, aber denken Sie einfach an PerfMon und versuchen Sie, das Sampling auf einer menschlichen Skala zu halten (Sekunden statt Millisekunden) und Sie werden wahrscheinlich keine haben Probleme.

Endlich ein Appell an Erfahrung: Leistungsindikatoren sind so leicht, dass sie überall in Windows verwendet werden, vom Kernel über Treiber bis zu Benutzeranwendungen. Microsoft verlässt sich intern auf sie.

Hinweis: Die wirkliche Frage mit Leistungsindikatoren ist die Lernkurve im Verständnis (die moderat ist) und eine Messung der richtigen Dinge (scheint einfach, aber oft verstehst du es falsch).

8

Ich habe diese eine Menge getestet.

Auf einer alten compaq 1Ghz 1 Prozessor Maschine konnte ich etwa 10.000 Zähler erstellen und sie remote für etwa 20% CPU-Auslastung überwachen. Dies sind keine benutzerdefinierten Zähler, nur die CPU oder was auch immer überprüfen.

Grundsätzlich können Sie alle die Zähler auf jeder anständigen neueren Maschine mit sehr wenig Auswirkungen überwachen.

Die Instanziierung des Objekts kann eine lange Zeit dauern, einige Sekunden bis zu einigen Minuten. Ich schlage vor, dass Sie dies für alle Zähler, die Sie sammeln, multithread, sonst wird Ihre App für immer dort sitzen diese Objekte zu erstellen. Nicht sicher, was MS tut, sobald Sie es erstellen, das so lange dauert, aber Sie können es für 1000 Zähler mit 1000 Threads in der gleichen Zeit tun, die Sie für 1 Counter und 1 Thread tun können.

Verwandte Themen