在Windows Server 2003 x64中缺less内存

我们的Oracle数据库运行在64位Windows Server 2003企业版上,内存为32GB。

数据库已configuration为使用10GB的SGA(target = max = 10GB)和5GB的caching。 启动后,任务pipe理器将显示大约12GB的空闲内存。 在此服务器上,唯一运行的应用程序是数据库。 在白天,我们会看到自由内存一路下降到4MB。

我们想知道什么应用程序正在吃掉空闲的内存。 内存使用不加在任务pipe理器上,也不加在perfmon上。 我们怀疑有些进程占用了空闲的内存,并没有释放它。 我们如何继续?

检查分配给内核/驱动程序的内存。 可能是你有一个泄漏的司机。 服务器是虚拟机吗? 如果它是一个虚拟机,并且你有一个准虚拟化内存pipe理器(就像VMware Tools一样),气球驱动程序可以把一些空闲的内存用于不同的虚拟机。 检查您是否过度使用主机上的内存。

我们怀疑有些进程占用了空闲的内存,并没有释放它。

听起来不太可能,如果是这样的话,它应该出现在Perfmon和Taskmanager中。

如果运行需要大量内存的进程,会发生什么情况? (例如http://www.soft.tahionic.com/download-memalloc/index.html – 我还没有尝试过)它可以分配它,而不使用页面文件? 如果是这样的话,就没有其他正常的使用内存的过程,并且很可能会像caching一样在幕后机会性的系统使用。

我相信Windows一次分配之前不会清空内存,直到它有其他请求。 否则,你昂贵的内存只是浪费不用。

现在,当进程需要新的RAM页面时,备用列表是系统看起来的最后一个地方。 它首先查看零页列表或免费页列表,具体取决于新页面要做什么。 只有当这两个都是空的,待机列表才会被突袭。 与此同时,如果一个进程错误到一个最近丢弃的页面,以致该页面仍然处于备用列表中,那么该页面可以被popup回工作集合,并且解决了页面错误,而不必去到磁盘为了它。 备用清单可以被看作是对每个工作组的系统范围的扩展。 换句话说,这是一种页面caching。 因此,加上共享内存机制和其他一些事情,只有约10%的页面错误通常需要磁盘读取来解决。 大部分都是在内存中解决的。“ – http://arstechnica.com/civis/viewtopic.php?p=10593745#p10593745