我希望有人能帮忙。 我们有一个Windows Server 2008 R2的机器,有16GB的内存,可以让所有可用的内存被某些东西吞噬。 任务pipe理器或资源监视器中没有显示使用大于300MB的内存的任何进程…但服务器上的内存使用量为15.7GB。
唯一运行的是SQL Server 2008和IIS7.5 (使用ASP.Net)。
注意:重新启动后RAM的使用率开始较低,并且正常运行。 一个星期左右之后,我们一直在这种情况下find自己。
我怎么能发现什么东西在吃我们所有的记忆? 🙁
这是一个64位的服务器 – 你有内存本地策略启用locking页面吗? SQL可能会占用你内存的其余部分如果你看一下性能计数器,你会看到内存分配
这是一篇深入解释的文章
你也可以在SQL中查看计数器
SELECT object_name ,Counter_name ,cntr_value ,ROUND(( cntr_value * 8192.0 ) / 1048576, 0) AS cntr_value_MB FROM sys.dm_os_performance_counters WHERE object_Name LIKE '%Buffer Manager%' AND RTRIM(counter_name) IN ( 'Free pages', 'Total pages', 'Database pages' ) UNION SELECT object_name ,Counter_name ,cntr_value ,ROUND(( cntr_value / 1024 ), 0) AS cntr_value_MB FROM sys.dm_os_performance_counters WHERE counter_name IN ( 'Target Server Memory (KB)', 'Total Server Memory (KB)' )
快速testing:重新启动SQL Server。
另一个快速testing:重新启动IIS。
你会知道如果其中一个是罪魁祸首,或者如果你不得不去其他地方。
这可能有助于使用RamMap来查看你的记忆在哪里。
你是否真的遇到了与内存有关的问题?
内存使用量是否高于实际安装的内存,还是只是填满并留在那里?
如果内存刚刚填满,但你没有遇到任何问题,那么它只是caching做它的工作; 内存将自动realeased,如果当你真的需要它。
如果内存使用超出物理限制,服务器停止工作,那么你遇到了一些内存泄漏,应该debugging它。
关于“caching”主题的一些有趣的文章:
http://blogs.msdn.com/ntdebugging/archive/2007/11/27/too-much-cache.aspx
http://blogs.msdn.com/ntdebugging/archive/2007/10/10/the-memory-shell-game.aspx
http://blogs.msdn.com/ntdebugging/archive/2009/02/06/microsoft-windows-dynamic-cache-service.aspx
你有没有检查Perfmon(特别是SQL计数器),如其他线程中的人所build议的?
如前所述,首先是修补它,看看是否能解决问题。
其次,如果这样做不起作用,请使用Process Explorer来更好地查看内存使用情况。 转到视图菜单,然后select列,处理内存,并检查专用字节,虚拟大小和工作集大小选项。 看看是否表明这里应该指责什么。
一个激烈的做法是尝试停止服务。 例如,如果你有应用程序池和networkingconfiguration错误(太多),所以这是一个候选人,IIS可以是一个完整的记忆猪。
祝你好运!