Issue:-
Windows-Resource-Exhaustion-Detector_2004: Windows successfully diagnosed a low virtual memory condition. The following programs consumed the most virtual memory: sqlservr.exe (1668) consumed 4012085248 bytes, svchost.exe (848) consumed 18599444
Problem:-
What is 2004 Error No.:-
The Resource Exhaustion Detector component of Windows Resource Exhaustion Detection and Resolution (RADAR) identifies the top three consumers of committed memory and warns you when the system commit charge reaches a critical level.
What is Commit charge:-
Virtual Memory is combined with Physical Memory and page files on disk. Committed Memory, also called committed virtual memory, is used or allocated Virtual Memory.
The amount of committed virtual memory for all the active processes is called the current commit charge. When a process commits a region of virtual memory, the operating system guarantees that it can maintain all the data the process stores in the memory either in physical memory or on disk. That means that a process can run up against another limit: the commit limit.
The amount of committed virtual memory for all the active processes is called the current commit charge. When a process commits a region of virtual memory, the operating system guarantees that it can maintain all the data the process stores in the memory either in physical memory or on disk. That means that a process can run up against another limit: the commit limit.
Link:- http://blogs.technet.com/b/markrussinovich/archive/2008/11/17/3155406.aspx
Coming to Memory\% Committed Bytes in Use
-------------------------------------------------------
Memory\% Committed Bytes in Use This measures the ratio of Committed Bytes to the Commit Limit—in other words, the amount of virtual memory in use. This indicates insufficient memory if the number is greater than 80 percent.
on the problematic server we can find this value in task manager too, i.e. Commit (GB) 10/11. [Highlighted]
Here 10 GB is Committed Bytes and
here 11 GB is Committed Limit
What is %~Committed~Bytes~in~Use"
=============================
% Committed Bytes in Use is the ratio of Memory<\\Committed Bytes to the Memory\\Commit Limit>.
Committed memory is the physical memory in use for which space has been reserved in the paging file should it need to be written to disk.
The commit limit is determined by the size of the paging file. If the paging file is enlarged, the commit limit increases, and the ratio is reduced. This counter displays the current percentage value only; it is not an average.
11 GB = Installed Memory 8.00 GB + Page File
This System has 8 GB Installed RAM + Currently allocated 4 GB Page File.
In this problematic server, static page file is set of Min 2048 MB to Max 2048 MB which is >= 2 GB
one for C:\ and other from D:\ drive.
Hence, The approx commit limit is 12 GB.
This 10 GB is nothing but a Commit byte to the memory -- > Committed Bytes is the amount of committed virtual memory, in bytes for all processes [SQL server process + other processes running on the system].
10/11 = 0.90. = 90%. if this value is greater than 85%, then 2004 Error will also come Which means,
in this server system commit charge reaches a critical level.
How to resolve this issue:-
=========================
1 In case if we are getting SQL or OS getting hang, We should increase the physical RAM in the system
Or
2.Increase the page file size
In This case, even Windows paging system recommending us to increase the page file.
Thanks for Reading...