.Net CLR
Memory Counters
Large Object Heap Size:
This counter displays the current size of the Large Object
Heap in bytes. Objects greater than 20 Kbytes are treated as large objects by
the Garbage Collector and are directly allocated in a special heap; they are
not promoted through the generations. This counter is updated at the end of a
GC; it is not updated on every allocation.
% Time in GC:
Time in GC is the percentage of
elapsed time that was spent in performing a garbage collection (GC) since the
last GC cycle. This counter is usually an indicator of the work done by the
Garbage Collector on behalf of the application to collect and compact memory.
This counter is updated only at the end of every GC, and the counter value reflects
the last observed value; it is not an average.
# Bytes in all Heaps
This
counter is the sum of four other counters; Gen 0 Heap Size; Gen 1 Heap Size;
Gen 2 Heap Size; and the Large Object Heap Size. This counter indicates the
current memory allocated in bytes on the GC heaps.
# Gen 0 Collections:
The
youngest, most recently allocated are garbage collected (Gen 0 GC) since the
start of the application. Gen 0 GC occurs when the available memory in generation
0 is not sufficient to satisfy an allocation request. This counter is
incremented at the end of a Gen 0 GC. Higher generation GCs include all lower generation
GCs. This counter is explicitly incremented when a higher generation (Gen 1 or
Gen 2) GC occurs. _Global_ counter value is not accurate and should be ignored.
This counter displays the last observed value.
# Gen 1 Collection:
This
counter displays the number of times the generation 1 objects are garbage
collected since the start of the application. The counter is incremented at the
end of a Gen 1 GC. Higher generation GCs include all lower generation GCs. This
counter is explicitly incremented when a higher generation (Gen 2) GC occurs.
_Global_ counter value is not accurate and should be ignored. This counter
displays the last observed value.
# Gen 2 Collections:
This
counter displays the number of times the generation 2 objects (older) are
garbage collected since the start of the application. The counter is incremented
at the end of a Gen 2 GC (also called full GC). _Global_ counter value is not
accurate and should be ignored. This counter displays the last observed value.
# of Pinned Objects:
This
counter displays the number of pinned objects encountered in the last GC. This
counter tracks the pinned objects only in the heaps that were garbage collected;
e.g., a Gen 0 GC would cause enumeration of pinned objects in the generation 0
heap only. A pinned object is one that the Garbage Collector cannot move in
memory.
Exceptions:
# of Exceps Thrown/Sec:
This
counter displays the number of exceptions thrown per second. These include both
.NET exceptions and unmanaged exceptions that get converted into .NET exceptions;
e.g., null pointer reference exception in unmanaged code would get rethrown in
managed code as a .NET System.NullReferenceException; t his counter includes
both handled and unhandled exceptions. Exceptions should only occur in rare situations
and not in the normal control flow of the program; this counter was designed as
an indicator of potential performance problems due to large (>100s) rate of
exceptions thrown. This counter is not an average over time; it displays the
difference between the values observed in the last two samples divided by the
duration of the sample interval.
Throw to Catch Depth/Sec:
This counter
displays the number of stack frames traversed from the frame that threw the
.NET exception to the frame that handled the exception per second. This counter
resets to 0 when an exception handler is entered; so nested exceptions would
show the handler to handler stack depth. This counter is not an average over time;
it displays the difference between the values observed in the last two
Locking and Threading:
Contention Rate/Sec:
Rate at which threads in the runtime attempt to acquire a managed lock unsuccessfully. Managed locks can be acquired in many ways: by the "lock" statement in C# or by calling System.Monitor.Enter or by using MethodImplOptions.Synchronized custom attribute.
Rate at which threads in the runtime attempt to acquire a managed lock unsuccessfully. Managed locks can be acquired in many ways: by the "lock" statement in C# or by calling System.Monitor.Enter or by using MethodImplOptions.Synchronized custom attribute.
# of Current Logical Threads:
This
counter displays the number of current .NET thread objects in the application.
A .NET thread object is created either by new System.Threading.Thread or when
an unmanaged thread enters the managed environment. This counter maintains the
count of both running and stopped threads. This counter is not an average over
time; it just displays the last observed value.
# of Current Physical Threads:
This
counter displays the number of native OS threads created and owned by the CLR
to act as underlying threads for .NET thread objects. This counter’s value does
not include the threads used by the CLR in its internal operations; it is a
subset of the threads in the OS process.
# of Current Recognized Threads:
This
counter displays the number of threads currently recognized by the CLR; they
have a orresponding .NET thread object
associated with them. These threads are not created by the CLR; they are
created outside the CLR but have since run inside the CLR at least once. Only
unique threads are tracked; threads with the same thread ID reentering the CLR
or recreated after thread exit are not counted twice.
No comments:
Post a Comment