Skip to main content

How to limit memory usage of applications in IIS

A while back I talked about a memory leak we had in one of our applications. As a consequence, it brought the full production environment to a halt impacting not only the causing application but all applications hosted on the same IIS instance.

Although we found the root cause and fixed the problem, we did a post-mortem to discuss on how to avoid this in the future. In this post, I'll walk you through the practical strategies we implemented to limit and optimize memory usage for our applications running in Internet Information Services (IIS).

n this guide, I'll walk you through practical strategies to limit and optimize memory usage for applications running in Internet Information Services (IIS).

Understanding memory usage in IIS

Before diving into solutions, it's important to understand how IIS manages memory. IIS runs web applications in application pools, which are processes (w3wp.exe) that host your web applications. Each application pool can consume memory independently, and without proper configuration, a single problematic application pool can negatively impact the entire server.

There are 2 distinct settings to manage memory usage in IIS:

  • private memory limit
  • virtual memory limit

Private memory limit

The private memory limit is the maximum amount of private memory (physical RAM) that a worker process in an application pool can use. It applies to the memory allocated exclusively to the process, not shared with other processes.

If the private memory usage of the worker process exceeds this limit, IIS will recycle the application pool to free up resources.

Virtual memory limit

The virtual memory limit is the maximum amount of virtual memory (address space) that a worker process in an application pool can use. It includes both physical memory and memory mapped to disk (e.g., page file).

Important: An application could claim up front a lot of virtual memory, so it is recommended to stay away from this setting and focus mainly on the private memory limit when limiting memory usage.

Key strategies for limiting memory usage

Configure Recycling Settings

Application pool recycling is one of the most effective ways to control memory usage:

  1. Open IIS Manager
  2. Select your application pool
  3. Click on "Recycling" in the Actions pane
  4. Configure the following settings:
    • Fixed Interval Recycling: Schedule recycling at regular intervals
    • Memory-Based Recycling: Set a memory threshold (in KB) that triggers recycling
    • Request Limit Recycling: Recycle after processing a specific number of requests
    • Specific Time Recycling: Schedule recycling at off-peak hours


Configure private memory limit

As already mentioned, you can set a maximum private memory limit for your application pool:

  1. Open IIS Manager
  2. Select your application pool
  3. Click on "Advanced Settings"
  4. Set "Private Memory Limit (KB)" to your desired value (e.g., 1048576 for 1GB)

When an application pool reaches this limit, IIS will automatically recycle it, freeing up memory.

Implement request limits

Set limits on request size and execution timeout:

Conclusion

Managing memory usage in IIS requires a multi-faceted approach that combines proper IIS configuration with application optimization. By implementing the strategies outlined above, we significantly improved the stability and performance of our web applications.

Of course all of this should not be an excuse to not optimize your application code first. Some tips:

  • Dispose of resources properly: Ensure all disposable objects are properly disposed
  • Avoid memory leaks: Check for common patterns that cause memory leaks
  • Use caching judiciously: Excessive caching can consume large amounts of memory
  • Implement proper object pooling: Reuse expensive objects when possible
  • Enable server GC: Configure .NET to use the server garbage collection mode

More information

Visual Studio 2022 - Check for memory leaks

Azure Monitor Log Analytics–Identify high memory usage

IIS Best Practices | Microsoft Community Hub

iis 7 - How to limit the memory used by an application in IIS? - Server Fault

Popular posts from this blog

Kubernetes–Limit your environmental impact

Reducing the carbon footprint and CO2 emission of our (cloud) workloads, is a responsibility of all of us. If you are running a Kubernetes cluster, have a look at Kube-Green . kube-green is a simple Kubernetes operator that automatically shuts down (some of) your pods when you don't need them. A single pod produces about 11 Kg CO2eq per year( here the calculation). Reason enough to give it a try! Installing kube-green in your cluster The easiest way to install the operator in your cluster is through kubectl. We first need to install a cert-manager: kubectl apply -f https://github.com/cert-manager/cert-manager/releases/download/v1.14.5/cert-manager.yaml Remark: Wait a minute before you continue as it can take some time before the cert-manager is up & running inside your cluster. Now we can install the kube-green operator: kubectl apply -f https://github.com/kube-green/kube-green/releases/latest/download/kube-green.yaml Now in the namespace where we want t...

Azure DevOps/ GitHub emoji

I’m really bad at remembering emoji’s. So here is cheat sheet with all emoji’s that can be used in tools that support the github emoji markdown markup: All credits go to rcaviers who created this list.

DevToys–A swiss army knife for developers

As a developer there are a lot of small tasks you need to do as part of your coding, debugging and testing activities.  DevToys is an offline windows app that tries to help you with these tasks. Instead of using different websites you get a fully offline experience offering help for a large list of tasks. Many tools are available. Here is the current list: Converters JSON <> YAML Timestamp Number Base Cron Parser Encoders / Decoders HTML URL Base64 Text & Image GZip JWT Decoder Formatters JSON SQL XML Generators Hash (MD5, SHA1, SHA256, SHA512) UUID 1 and 4 Lorem Ipsum Checksum Text Escape / Unescape Inspector & Case Converter Regex Tester Text Comparer XML Validator Markdown Preview Graphic Col...