What's the default memory allocation policy in Windows Server 2012 Terminal Services?

We've got a problem where we have an application that requires a large amount of RAM (100GB approx). The machine has 256GB ram. However, despite the fact that the machine is not under memory pressure, there is apparently free ram, Windows is only giving the process a 50GB working set, causing it to page furiously and hence run really slowly.

So I'm trying to find out information about the default memory allocation policy Windows uses. Note that Windows Server Resource Manager is NOT installed on this machine, but what I don't know is what Windows does in its absence. Is it still doing some kind of "equal per process" or "equal per user" allocation?


  • 1
    Sounds like there's something wrong with the system, or the program. How are you measuring that the process is paging furiously? – mfinni May 22 '14 at 19:53
  • I used Sys Internals Process Monitor to take a trace of the process and 99% of the time was taken up reading from pagefile.sys – Tom Quarendon May 22 '14 at 20:37
  • @mfinni What kinds of things could be wrong with the program or the system? – Tom Quarendon May 27 '14 at 10:46
  • I realize you probably don't have an abundance of spare machines with 256GB of RAM in them to test with... but... any possibility of trying this application on a non Remote Desktop Server? Being able to eliminate RDS as a complication would help. Alternatively, have you ever run this application on any other machine successfully? (Success being the application is given the full 100GB of RAM?) – Ryan Ries Jul 4 '14 at 15:45
  • Also, how about using Testlimit and see whether Testlimit is able to allocate a full 100GB or not. download.sysinternals.com/files/TestLimit.zip – Ryan Ries Jul 4 '14 at 15:54

Windows Server Resource Manager is depreciated in Windows Server 2012. Microsoft recommends using Hyper-V to replace its functionality (presumably with things like VM prioritization and host reserve) but this is admittedly a poor replacement. See Windows Server 2012 R2 Windows System Resource Manager Replacement? for details.

As for Window's memory allocation policy you should probably start with Mark Russinovich's series of blog posts Pushing the Limits of Windows: Physical Memory.

I believe there is no way to dedicate a set amount of RAM to a particular process anymore unless the feature is built into the application (e.g., MS SQL, IIS Application Pools).

| improve this answer | |
  • So how does MS SQL achieve it? You can do a certain amount with the SetProcessWorkingSetSize call if you have sufficient privileges, or using Address Windowing Extensions (which aren't paged) but perhaps that's a topic for another post on a different site. – Tom Quarendon May 22 '14 at 20:40
  • @Tom SQL Server has its own mediary OS (SQLOS) that takes care of all of its memory management independent of the OS. It will allocate as much memory as it can and then do everything itself. – squillman May 22 '14 at 22:34
  • The Pushing the Limits series doesn't really explain anything about how the allocation works unfortunately. – Tom Quarendon May 23 '14 at 7:49
  • @TomQuarendon - Hmm. I must be confusing it with another article I read. Either way, I have to agree with mfinni that something is wrong with the system or the application. There's just no real replacement for WSRM so you are going to have to come at this from the other side of the problem. – user62491 May 23 '14 at 16:11
  • What would be wrong with the application, or indeed the system? I mean the application surely doesn't have control over anything that could affect this could it? It allocates lots of memory, but hopefully there's no law against that. – Tom Quarendon May 27 '14 at 10:44

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.