If your server is currently experiencing symptoms of a memory leak, you may be wondering how you can distinguish a memory leak from other types of performance problems.
There is no obvious message displayed indicating that a server is running a leaky application. Locating a memory leak usually involves watching various Performance Monitor counters and interpreting the results.
In the real world, it can be hard to tell if an application "leaks" unless you have something to compare it to. Fortunately, a Microsoft utility called Leakyapp does one thing: Creates a memory leak. This tool can help you observe how Performance Monitor behaves in memory leak situations.
Note: The Leakyapp utility causes a fairly serious memory leak to occur. Therefore, Performance Monitor data collected in the real world may not always be as dramatic as what you would observe using Leakyapp. When you look for memory leaks on production systems using Performance Monitor, the signs of a memory leak can be subtle.
If you want to learn how Leakyapp works, try this Leakyapp download, which consists of a 5.12 KB ZIP file.
Using Performance Monitor
Access Performance Monitor by entering the PERFMON command at the server's Run prompt. When Performance Monitor opens, several counters (mechanisms that Performance Monitor uses to measure some individual aspect of the server's performance) will already have been loaded. Click the X icon repeatedly until all default counters have been removed. You can now load new counters by clicking the + icon.
Individual counters are organized into performance objects, which are simply categories under which Performance Monitor counters are stored. From hereon, I will refer to individual counters in performance object/counter format. For example, Processor/% Processor Time refers to the % Processor Time counter found in the Processor performance object.
To detect a memory leak using Performance Monitor, monitor these counters:
- The Memory/Available Bytes counter lets you view the total number of bytes of available
memory. This value normally fluctuates, but if you have an application with the memory leak, it
will decrease over time.
- TheMemory/Committed Bytes counter will steadily rise if a memory leak is occurring,
because as the number of available bytes of memory decreases, the number of committed bytes
- The Process/Private Bytes counter displays the number of bytes reserved exclusively for
a specific process. If a memory leak is occurring, this value will tend to steadily rise.
- The Process/Page File Bytes counter displays the size of the pagefile. Windows uses
virtual memory (the pagefile) to supplement a machine's physical memory. As a machine's physical
memory begins to fill up, pages of memory are moved to the pagefile. It is normal for the pagefile
to be used even on machines with plenty of memory. But if the size of the pagefile steadily
increases, that's a good sign a memory leak is occurring.
- I also want to mention the Process/Handle Count counter. Applications use handles to identify resources that they must access. If a memory leak is occurring, an application will often create additional handles to identify memory resources. So a rise in the handle count might indicate a memory leak. However, not all memory leaks will result in a rise in the handle count.
How to detect a memory leak in Microsoft Windows
Memory leaks: Finding a memory leak in Microsoft Windows
Finding memory leaks using Performance Monitor
Memory leaks: Determine an applications CPU consumption
This was first published in February 2007