我管理一个运行IIS和.NET4 Web应用程序的Windows 2008服务器(在Amazon EC2上)。前几天,我收到了内存警报,然后走过去看了看,确定过程内存由于某种缓慢的泄漏而随着时间的推移而增长。它并没有增长太多,就像从60M增长到200M一样,但是在盒子上进行了足够多的处理,超过了我们的最低阈值(75%)来启动监视器。
我回收了该应用程序的池,并释放了内存,在查看统计信息时,我注意到交换空间正在大量使用,并且超过1 GB的回收空间得以释放。
也许这是一个基本的问题,但是我是UNIX专家,我习惯于交换直到您内存不足才习惯。此盒子的内存使用率从未超过75%。这是Windows事物还是.NET事物还是Amazon事物?我怀疑此应用程序中的内存泄漏比怀疑的要大得多-它不是从60M泄漏到200M,而是从60M泄漏到1.2GB,但是其中大部分以某种方式“变冷”并被推出以交换?
我在应用程序池上设置了内存回收,但是它会触发盒子的全部内存,因此在自动回收之前,此应用可能会变得非常大。
我可以设置定期的“定时”回收,但这是一种解决方法,我将让开发人员修复该应用程序,但需要了解交换使用情况,以确保我理解此权利。
编辑更多信息:实例内存:1.7 GB交换:4.5 GB
我在taskmgr中看到w3wp.exe进程,显示内存:211,000k。但是,当我重新启动它时(它在自己的应用程序池中,并且是包装盒中唯一的应用程序),它的内存使用量降至正常的起点60M,并且释放了1 GB +的交换空间。在taskmgr中,我只是设置了正常的“内存(私有工作集)”状态,但是通过我的其他监控(Cloudkick)看到了交换更改。现在回头看一下,进程中的内存已恢复到195M(共1.2 GB),而交换已从1.0 GB爬升至1.1 GB,并没有完全恢复到原来的位置(随着时间的推移,这是一个缓慢蠕变)。
我不太关心这个特定的应用程序,而更关心的是仅了解Windows交换的时间以及它的使用方式,以及通常需要考虑的Windows内存和交换使用情况。