Monitoring Memory Usage In Iis: A Comprehensive Guide

how to monitor memory usage in iis

Monitoring memory usage in IIS is crucial to ensure optimal performance and user experience. IIS (Internet Information Services) is a Microsoft web server that serves around a third of all websites. By setting up HTTP testing and using tools like Performance Monitor and Task Manager, administrators can track memory usage, identify potential issues, and ensure the best user experience.

Performance Monitor, a Windows tool, provides real-time graphics and data about IIS performance, including memory usage. Task Manager also offers insights into CPU and memory usage related to IIS services, helping identify problems like memory leaks.

Additionally, IIS Manager provides detailed information about application pools, worker processes, and running requests. With its Health and Diagnostics features, administrators can capture XML-formatted logs of issues, configure logging, and monitor worker processes.

By utilising these tools and techniques, administrators can effectively monitor memory usage in IIS, ensuring the web server's performance and maintaining a positive user experience.

shundigital

Using Windows Performance Monitor

Windows Performance Monitor is a real-time graphical monitoring tool that comes built-in with Windows. It provides steady performance measurements for all types of operating systems and web service counters.

To access Performance Monitor, simply go to Start -> Run -> perfmon. From there, select 'Performance Monitor' in the left pane, and click the '+' button to begin adding in counters.

If you have an ASP.NET-based website, you can select one of the 'ASP.NET Apps' counter categories and click on the 'Managed Memory Used' counter. In the list that appears, all active websites will be displayed and you can add the counter for your website. You can then choose to watch the counter in real-time, save the data to a disk, or save it to a database for later analysis.

Performance Monitor also offers the option to display metrics in graphs or reports, define alerts, and export data. It also allows for extensive configuration of settings.

To get the 'Managed Memory Used' counter to work, you may need to make an additional change. The aspnet.config config file (generally located at C:\Windows\Microsoft.NET\Framework\v4.0.30319) needs to be modified to include the appDomainResourceMonitoring element:

There is no need to restart IIS, but you will need to recycle the application pool you want to monitor.

shundigital

Monitoring IIS Application Pools

Ensure Your IIS Application Pool is Running:

Firstly, open the IIS Manager and click on the root of the navigation tree (your server name). Under IIS, double-click the Worker Processes icon. This displays the running worker processes, their process IDs, CPU usage, and memory usage.

Ensure your IIS Application Pool is started and running as w3wp.exe. It is common for application pools to crash or stop unexpectedly due to various reasons, such as fatal application errors, bad configurations, or user-related issues.

Monitor IIS Application Pools with Tools:

Several tools can help you monitor IIS application pools:

  • Retrace: This tool monitors IIS application pools by default and provides advanced performance monitoring for ASP.NET applications.
  • Performance Monitor: This Windows tool provides real-time graphical monitoring and offers extensive configuration options, such as defining alerts and exporting data.
  • Task Manager: The Windows Task Manager offers a quick overview of CPU and memory usage related to IIS services, helping you identify issues like memory leaks.
  • IIS Manager: This graphical user interface application provides real-time state information about application pools, worker processes, sites, and running requests.

Use Performance Counters to Monitor IIS:

Performance counters provide valuable metrics to help you understand the performance of your IIS application pools. Here are some key counters to monitor:

  • System/Process Counters: Monitor the overall server and CPU usage (CPU %) and the used and available memory (Memory) for your IIS Worker Process.
  • IIS Performance Counters: Keep track of bytes received and sent per second (Web Service: Bytes Received/Sec and Bytes Sent/Sec) to identify potential spikes in traffic. Also, monitor the number of current connections (Web Service: Current Connections) and set a threshold based on your experience with the app.
  • ASP.NET Performance Counters: Track the number of requests handled by IIS and ASP.NET (ASP.NET Applications: Requests/Sec) and ensure the number of requests in the application queue (ASP.NET Applications: Requests in Application Queue) is not too high to maintain the server's responsiveness.
  • ASP.NET Error Rate Counters: Monitor the number of exceptions thrown (.NET CLR Exceptions: # of Exceptions Thrown) and the rate of unhandled exceptions during execution (ASP.NET Applications: Errors Unhandled During Execution/sec) to identify potential performance issues.

Advanced IIS Performance Monitoring for ASP.NET:

If you are using ASP.NET applications, consider using advanced application monitoring tools like Retrace. These tools provide holistic monitoring, including lightweight profiling of your ASP.NET code, giving you code-level visibility to improve performance.

In conclusion, by following these steps and utilizing the recommended tools and performance counters, you can effectively monitor IIS application pools to ensure optimal performance and user experience.

shundigital

Tracking memory leaks

Step 1: Monitor Memory Usage

Use tools such as Task Manager and Performance Monitor (Perfmon) to monitor memory usage. In Task Manager, you can view the real-time memory usage of the w3wp.exe process and the server. In Performance Monitor, you can track key performance counters such as "Memory\Available Bytes" and "Process\Private Bytes." You can also set up additional counters, especially for .NET CLR Memory.

Step 2: Identify Abnormal Patterns

Look for abnormal patterns or spikes in memory usage that suggest a memory leak. This can include gradual and sustained memory increases, leading to performance issues such as extended response times and potential crashes.

Step 3: Create Alerts and Logs

Based on the memory thresholds or trends you want to monitor, set up alerts or logs to be notified of any abnormal memory behaviour.

Step 4: Analyze Memory Dumps

Use tools such as DebugDiag, WinDbg, and Visual Studio to capture and analyze memory dumps of your application pool. These tools help identify objects, types, or methods leaking memory. DebugDiag is particularly useful for creating and analyzing memory dumps, while WinDbg allows manual inspection and analysis. Visual Studio can be used to attach to the w3wp.exe process and debug your application code.

Step 5: Determine the Cause

By analyzing the memory dumps, you can determine the root cause of the memory leak. This may involve reviewing code, optimizing resource management, and updating dependencies to address potential leaks.

Step 6: Implement Preventative Measures

To prevent memory leaks from occurring again, employ techniques such as disposing of unmanaged resources properly, avoiding static variables, and using caching wisely. Ensure that unmanaged resources are released using methods such as the using statement, the IDisposable interface, or the finalize method. Stay away from static variables as they are stored in the application domain and not garbage collected until the application pool recycles. When using caching, set appropriate policies, limits, and dependencies, and regularly monitor cache performance and memory consumption.

Step 7: Test and Verify

Use load testing tools such as Visual Studio Load Test, JMeter, or LoadRunner to simulate and monitor the load and memory usage of your application. Memory profiling tools like Visual Studio Memory Profiler, dotMemory, or ANTS Memory Profiler can help measure and analyze memory allocation and consumption, allowing you to identify and eliminate memory leaks.

shundigital

Setting up HTTP testing

One of the best and easiest things you can do to monitor memory usage in IIS is to set up a simple HTTP test. This can be done by running a check every minute, which will give you a baseline to know if your site is up or down. You can also measure the response time and track the 200 OK status.

Setting up a simple HTTP check can also help you create a basic SLA monitor for monitoring your web application, regardless of how many servers you have.

For example, you could use Retrace to monitor the response time, trend and status. Retrace will notify you if the response time is slower than expected, or if the request hasn't succeeded.

Another advantage of setting up an HTTP check is that it helps you establish a simple SLA monitor, which you can use to determine whether your web application is online and available.

shundigital

Using Task Manager

The Task Manager in Windows OS can be used to monitor memory usage across the desktop and identify the source of any performance issues. This is especially useful when troubleshooting a Windows 10 issue, as IT admins can monitor memory usage in real time and note any applications or processes consuming an excessive amount of memory.

To use Task Manager to monitor memory usage, follow these steps:

  • Right-click on the taskbar and select Task Manager.
  • Navigate to the Processes tab and select the checkbox next to "Show processes from all users".
  • Click on either CPU or Memory to sort the processes based on their resource usage.
  • If one of your sites is causing high resource consumption, you should see the w3wp.exe (IIS worker process) towards the top of this list.
  • To identify which site is causing the issue, make a note of the PID (Process Identifier) that displays next to w3wp.exe.
  • Open a command prompt as an administrator by clicking on the Windows button in the taskbar and entering "cmd".
  • Right-click on the result and select "Run as administrator".
  • At the command prompt, type "cd %windir%\System32\inetsrv" and press Enter.
  • Type "appcmd list wp" and press Enter.
  • You can now match the PID that you identified in Step 5 with the corresponding worker process to determine which site is causing the issue.

Additionally, you can check the running worker processes in IIS by clicking the Windows button in the taskbar and typing "IIS". Select IIS from the results, click on your server name, and select the Worker Processes icon. This will display a list of all worker processes and their resource usage.

By using Task Manager, you can easily identify and address any performance issues related to memory usage in your IIS application.

Frequently asked questions

You can monitor memory usage in IIS by using Performance Monitor (Perfmon) to collect a data collector set. This will allow you to view data in real-time or collect it for later review. You can also use Task Manager to monitor CPU and memory usage of inetinfo.exe and w3wp.exe to identify major problems, including memory leaks.

To check your IIS memory usage, open IIS Manager and click on the root of the navigation tree (the server name). Under IIS, double-click the Worker Processes icon. This will display a list of running working processes, their process IDs, CPU, and memory usage.

To reduce your IIS memory usage, find the application pool you wish to limit, right-click on it, and select Advanced Settings. Under the CPU section, set the "Limit" to your desired maximum and set the Limit Action to Throttle.

To monitor IIS performance, you can perform HTTP testing by setting up a simple HTTP check that runs every minute. This will help you determine whether your site is up or down and measure the response time. You can also use Performance Monitor to monitor IIS performance.

Written by
Reviewed by
Share this post
Print
Did this article help you?

Leave a comment