Virtual Memory Too Low

I have just started using Windows 2003 Server R2 Standard Edition and starting to get a little frustrated. I have installed the OS on a brand new HP ProLiant DL380 G5 which has dual Xeon processors and 8GB of physical RAM, 8 x 72GB SCSI Drives which a RAID Array, 2 Mounted Drives.

I have installed DNS, DHCP, File Server, Application Server, Exchange 2003, ISA 2004 and SQL Server 2005.

When the server started I got no errors or warnings appearring in the Event Log until after I installed Exchange 2003. They Support Tool identified the need to add /3GB  /USERVA=3030 to the boot.ini file which I did and I also set the Virtual Memory Page File Size to 4096 on Drive C and 4096 on Drive D.

Again all the errors went away, PHEW, but hang on when I left the server for an hour and went back I got an error saying 'Virtual Memory Too Low' the system was going to try and increase the Page File Size. This lead to me struggling to log back in and shut the server down. I checked the Event Log and loads of errors due to components not able to load, etc... I cleared out the Event Log and rebooted.

When the server rebooted, again no errors or warning in the Event Logs but sure enough leave the server for any length of time and I would get a warning again about Virtual Memory being too low and again I had to reboot.

I'm sure it is something straightforward I am missing, but can anyone out there help?

Many thanks in advance, NewAS.

Who is Participating?
thelastoftheendConnect With a Mentor Commented:
That's the MSDE database for the ISA Firewall.  Once again, Microsoft says it is normal for it to use a lot of memory but that it is designed to release the memory to other applications as soon as they request them.  But if you'd prefer, you can set a limit on how much memory MSDE uses. Just don't set it so low that it can't handle the requests it needs to process. Here's the link for how to do this:;en-us;909636
Let's start by narrowing down what application is causing this. In Task Manager (Start-->Run-->Taskmgr), go to the Processes tab and sort by clicking on the "Mem Usage" column header.  What process is allocating the most memory and how much?
NewASAuthor Commented:
I've just tried logging in remotely and guess what I can't, this happened earlier today. I bet when I get to work tomorrow morning the same Virtual Memory warning is displaying on the monitor.

I will let you know the answer first thing in the morning. Thank you for responding so quickly.
Cloud Class® Course: Microsoft Office 2010

This course will introduce you to the interfaces and features of Microsoft Office 2010 Word, Excel, PowerPoint, Outlook, and Access. You will learn about the features that are shared between all products in the Office suite, as well as the new features that are product specific.

NewASAuthor Commented:
Ok, got to work and sure enough the Virtual Memory Too Low was displayed and I had to restrart the server.

After the server rebooted I ran taskmgr as you suggested. Here are the results:

mshta.exe 11,888K
explorer.exe 10,692K
ccApp.exe 5,384K
winlogon.exe 4,500K
sqlmangr.exe 4,488K
taskmgr.exe 3,616K
csrss.exe 2,772K
rdpclip.exe 2,636K
cpqteam.exe 1,864K
oobeckhk.exe 1,760K

Oh I forgot I have got Symantec AntiVirus Corporate Edition.

Right I just noticed a pattern forming which may help.

Ok, I rebooted the server and logged onto the server as the Administrator in the server room. An hour later I use Remote Desktop Connection from Programs > Accessories > Communications. Now I could see the desktop of the server and I ran taskmgr to get the details which I have listed above. I then closed the Remote Desktop Connection application and a few minutes later tried using the Remote Desktop Connection again to connect to the server. This time I could not connect, went back to the server room and sure enough a Virtual Memory Too Low warning appeared. I tried to run taskmgr again but the application failed, so I had to restart thre server.

What on earth is my remote connection doing to the server or is this just a coincidence?
NewASAuthor Commented:
Ok, the puzzle continues, I have just installed the Admin Pak on my Windows XP Pro system. I used the Remote Desktops application instead. I restarted the server and did not login in the server room but through the Remote Desktops application.

sqlservr.exe 121,112K [Administrator]
Rtvscan.exe 37,932K
ReportingServicesService.exe 37.752K
sqlservr.exe 28,088K [SYSTEM]
w3wp.exe 25,984K
wspsrv.exe 23,688K
wsusservice.exe 23,508K
msmdsrv.exe 23,268K
MsDtsSrvr.exe 13,224K
inetinfo.exe 13,176K
svchost.exe 12,408K
lsass.exe 12,624K
store.exe 12,472K
explorer.exe 12,384K

Now since I started recording the aboe figures I noticed that the second instance of sqlservr.exe running as SYSTEM increased from 28,088K to 78,572 and is still climbing. All other services have either stayed the same or marginally fluxtuated up or down.

Is SQL Server 2005 the cause of my memory problems and why are two instance of the same executible running. The second sqlservr.exe instance is now at 95,116K and still increasing.

Many thanks in advance, NewAS.
NewASAuthor Commented:
Oh, forgot I have WSUS running as well, sorry.
Sorry for the slow response.... SQL Server will run a seperate instance of the sqlservr.exe process for each SQL database that is running. In addition to databases that you have manually created/installed, many programs use SQL as their back-end database and install an SQL instance during the installation of the program. Most programs that do this install the free version of SQL called MSDE, which is a scaled-down version of SQL 2000.  You can typically determine which programs are using SQL by looking at the database name: Go to Start->Run and type Services.msc. Scroll down to find the services that start with MSSQL$ - the latter half of the service name is the name of the database, and usually reflects the name of the program using it, such as MSSQL$BackupExec for Backup Exec software.

If only one of the sqlservr.exe processes is accumulating in memory usage, you need to isolate which database is causing this. Stop one of the MSSQL$ services and one of the sqlservr.exe processes will disappear, allowing you to isolate which database is associated with the memory leak.

As far as resolving the memory leak, look for answers within the application that is attached to the database. Are there numerous users accessing the application, are there updates or service packs available for the application that may resolve the problem? Call technical support for the application and see if they can help - it may just be a setting that needs to be changed. Unfortunately, I've had a couple software vendors who want to insist that this is a problem with SQL Server and not their product. They will reference the fact that SQL Server will allow the database to utilize, by default, up to 2 GB of RAM. My argument is that although SQL Server will allow this, it does not mean that an application should be utilizing that much RAM - there is something in their program that is using that memory.

One alternative, as a last resort, would be to limit the amount of memory that SQL Server is allowed to utilize (lowering the 2GB default). I do not recommend this if you suspect a true memory  leak, as it does not solve the underlying problem that an application is still trying to utilize more memory. If you were to limit the memory to, say, 400 MB, the application would still be trying to utilize more memory and will likely slow your system down trying to do so.

At the same time, it could be there is no memory leak at all. Microsoft does say that SQL uses as much available memory as it can, releasing it to other appliacations as needed. If this was the case though, I don't think you'd be having problems with virtual memory. See the Microsoft article that explains this (as well as how to limit memory usage in SQL 2005:

Also, here is a link that describes how to limit MSDE memory usage: When running the "osql" command in the article, replace servername\MSFW with the name of your database, i.e. servername\BackupExec.

Also note I'm definitely not an SQL expert! Don't do any of the above without making sure that you have a good server backup and that you're not affecting users who may be using the applications you're working on. Good luck!
NewASAuthor Commented:
I have checked services and found MSSQL$MSFW does this help?
I just noticed from one of your first posts here that you're also running WSUS.  If WSUS is deployed to your clients, it's possible that this is using up a lot of memory as well when they connect to the server to download updates. Especially if the clients were turned off at night and they're trying to update all at once in the morning. Just a thought.
Question has a verified solution.

Are you are experiencing a similar issue? Get a personalized answer when you ask a related question.

Have a better answer? Share it in a comment.

All Courses

From novice to tech pro — start learning today.