I have a Windows Server 2008 system, which has 12GB of RAM.
If I list all processes in the Task Manager, and SUM() the memory of each process (Working Set, Memory (Private Working Set), Commit Size, ...), I never reach more than 4-5GB that should be "in use". However, task manager reports this server has 11GB in use via the "Performance" tab.
I'm failing in determining where all that used RAM is going. It doesn't seem to be system cache, but I can not be sure.
It might be a memory leak in one of the appliances, but I'm struggling to find out which one. The server's memory keeps filing up, and eventually forces us to reboot the device to clear it.
I've been reading up on how RAM assignments work on Windows Server:
- RAM, Virtual Memory, Pagefile and all that stuff: http://support.microsoft.com/kb/2267427
- What's the best way to measure? http://www.zdnet.com/blog/bott/windows-7-memory-usage-whats-the-best-way-to-measure/1786
- Configure the file system cache in Windows: http://smallvoid.com/article/winnt-system-cache.html
But I fear I'm stuck without ideas at the moment.
Windows memory management is a mammoth topic. Entire books can and have been written on just this topic. The first thing I would do is watch the video series, "Mysteries of Windows Memory Management Revealed" parts 1 and 2, on MSDN Channel 9:
http://channel9.msdn.com/Events/TechEd/Europe/2010/WCL401
http://channel9.msdn.com/Events/TechEd/Europe/2010/WCL402
(There are North American and European versions of this session, as he gave these talks at both TechEd in America and again at TechEd Europe.)
Task Manager and Resource Monitor are OK, and are enough for 99% of Windows users, but Sysinternals tools are really stellar when it comes to those of us who are in the last 1% and want to see as much detail as possible.
Start with RAMMap. You can get it at \\live.sysinternals.com\Tools\ . Then to get a better zoomed-in look at how a specific process is using memory, use VMMap.
Let's not go in to trying to define what all those different kinds of memory mean right now. Your problem is that you fear a memory leak. Your symptom is that your server becomes unusable for lack of memory and you're forced to reboot it.
You should never need to reboot a server on a regular basis just from normal operation. Ideally, it should be a self-maintaining system that only needs to be rebooted from patching and configuration changes. So yes, I would say you probably have a problem, assuming you are rebooting your server for a good reason, such as it actually becomes unstable/unusable. Not just because Task Manager is telling you that almost all of your RAM is in use. Modern versions of Windows aggressively cache things and map files and data in RAM, even if you aren't using them right that minute. Note the difference between "Free" memory and "Available" memory in Task Manager.
However, I'm not sure what you mean by "It might be a memory leak in one of the appliances." What do you mean appliance? I thought we were talking about a Windows server here?
You may have a memory leak in several different kinds of memory, such as a processes' private memory, or shared memory, or maybe even pool memory - paged or non-paged. In any of those cases, use those tools that I mentioned and watch those different memory categories for processes that keep rising in memory usage and never come back down. That would be a leak.
Hope this helps.
The Task Manager by default never shows the actual, full memory usage of each process; but you can have it show additional informations, which are a lot more accurate.
See here:
http://windows.microsoft.com/en-US/windows7/What-do-the-Task-Manager-memory-columns-mean