IIS 工作进程占用了我们服务器上的大量内存。我想限制每个应用程序可以使用的内存。我很困惑是否应该设置虚拟内存限制或私有内存限制。我们 IIS 中的每个应用程序都位于自己的应用程序池中。
如果我将私有内存限制设置为 500MB,将虚拟内存限制设置为 3GB。应用程序池什么时候回收?达到 500MB 或达到 3GB 后是否回收。
我有运行liquidsoap+icecast 包和简单网站(httpd+mysqld)的服务器。没什么特别的。每天约有 2000 多名访客,平均约有 50 人同时在线。
服务器有 8GB 内存。随着时间的流逝,可用内存量不断减少,尽管服务器上没有启动任何新内容并且没有新用户。在某些时候它开始交换,服务器上的负载上升并且变得无响应。通常我所做的只是重新启动服务器......
可以做些什么来检测究竟是什么泄漏了内存?我使用 top 来监控资源的使用情况,但据我所知,它没有任何帮助:

有没有办法找出使用那么多内存的东西?或者什么开始大量交换到磁盘?有什么方法可以在不重新启动服务器的情况下释放内存?
服务器在多次“内存不足”消息后崩溃,我试图查明罪魁祸首。如果它在用户空间 - 哪个进程。如果它在内核中 - 哪个内核模块。
我试图找出如何使用崩溃实用程序来调查是什么触发了服务器上的 OOM。
作为安装一对新服务器的一部分,我开始了一个 14TB DRBD设备的初始化。大约在那个时候,在使用 DRBD 同步器速率配置并启动和关闭一些绑定的网络接口时,其中一台服务器崩溃了。在 30 秒的时间内,它产生了 39 条Out of memory: Kill process ####消息。然后它崩溃了:
Kernel panic - not syncing: Out of memory and no killable processes...
Run Code Online (Sandbox Code Playgroud)
系统崩溃触发了kdump。现在我有一个不错的vmcore.flat文件,应该可以直接使用它来调查问题,但是我很难找出所有内存的去向。
我知道的唯一资源是Dedoimedo 的网站,它有很好的说明,以及内核崩溃手册。这些也恰好是答案中建议的唯一资源,所以我认为这crash是唯一的调查方法。
如果有另一种方式对事件进行事后分析,我愿意接受。这只是crash我所知道的唯一实用程序。我现在拥有的只是vmcore.flat文件,我需要知道的是哪个组件占用了所有内存。我怀疑是内核模块问题,更具体地说是绑定模块之一(因为它在我关闭接口时被触发)、DRBD 模块(在 CentOS 6.3 上用树构建的版本 8.3.15),或其中一个10G 以太网模块(mlnx_en构建在树外,即我关闭的接口,或树内bnx2x,即保持活动状态的接口)。我只需要知道是否有办法验证我的怀疑。
到目前为止,我只设法使用crash实用程序提取了以下信息:
检查使用了多少内存
$ crash /usr/lib/debug/lib/modules/2.6.32-279.5.2.el6.x86_64/vmlinux vmcore.flat
....
crash> …Run Code Online (Sandbox Code Playgroud) 我在 Windows 2008 上看到过 WmiPrvSE 泄漏的参考资料,但对 Windows 2008 R2 一无所知。
我们在 Hyper-V (2008) 之上运行 R2。我们还运行 NSClient++ 以从 opsview 进行监控。随着时间的推移,WmiPrvSE.exe 开始使用大量内存,从而导致内存警报问题(可用空间少于 10%)。VM 有 2GB,WmiPrvSE 在我杀死它之前最多消耗 500-600MB。
终止进程似乎没有任何负面影响;它再次启动,我没有注意到任何问题。但是一两天后,它又回到了同样的情况。
关于该怎么做的任何想法?资源监视器不显示 WmiPrvSE.exe 的任何磁盘或网络 IO。只是慢慢攀爬私人记忆……
编辑添加:我们没有运行群集或 Windows 系统资源管理器。我能猜到的唯一常规 WMI 用户是 NSClient++,但我们在其他服务器上似乎没有这个问题。
在运行了大约 18 个小时后,这个系统使用了大约 10GB 的内存,导致我们在运行我们的日常任务时触发了 OOM-killer:
# free -h
total used free shared buffers cached
Mem: 14G 9.4G 5.3G 400K 27M 59M
-/+ buffers/cache: 9.3G 5.4G
Swap: 0B 0B 0B
# cat /proc/meminfo
MemTotal: 15400928 kB
MemFree: 5567028 kB
Buffers: 28464 kB
Cached: 60816 kB
SwapCached: 0 kB
Active: 321464 kB
Inactive: 59156 kB
Active(anon): 291464 kB
Inactive(anon): 316 kB
Active(file): 30000 kB
Inactive(file): 58840 kB
Unevictable: 0 kB
Mlocked: 0 kB
SwapTotal: 0 kB
SwapFree: 0 kB
Dirty: 40 …Run Code Online (Sandbox Code Playgroud) 我们有大约 200 台服务器、Hyper V、文件集群和 IIS,它们都遇到相同的问题,通过正常使用在服务器上发生一个事件,该事件使服务器上的 RAM 达到或接近最大。一旦发生这种情况,特别是 SVCHOST/Workstation 服务(通过将 Workstation 服务与它自己的 SVCHOST 隔离而淘汰)将停止释放句柄/线程,并且永远不会释放该服务使用的内存。在某些极端情况下,我们拥有在 255GB 服务器上使用多达 40GB 内存的工作站服务。在某些情况下还会发现超过 4000 万个句柄。
在重新启动时,问题当然会消失,并且直到所有内存都被使用(例如 W3 进程或 HyperV 虚拟机)之后才会再次出现,然后工作站服务开始获取所有 RAM。该过程非常缓慢,可能需要数周/数月的时间,具体取决于服务器上的 RAM 量。
我们的 Hyper V 服务器和 IIS 服务器都访问用于工作文件的共享,这些共享位于 SSD 存储上,因此它们的性能非常好。我们已经安装了所有当前的补丁,但尚未迁移到 R2,因为我们有很多工具可以使这成为重要的一步,并且找不到任何明确的迹象表明这将在 R2 中修复。
我们已经运行了 ProcMon 和其他工具,但在问题最严重的服务器上,这些工具甚至无法运行。在其他方面,他们提供的结果只是表明该过程中确实存在内存泄漏。
有没有办法可以从这个过程中释放内存或一起避免错误?我们不想重新启动,一旦进程处于错误状态,我们就无法重新启动它。该过程变得冻结。
我们试图避免定期重新启动以“修复”此问题,因此我们将不胜感激。
windows-server-core memory-leak windows-server-2012 hyper-v-server-2012 iis-8
我不确定我是否有内存泄漏问题(正如我的托管公司所建议的那样),或者我们是否都需要阅读http://linuxatemyram.com。也许你们聪明的人可以帮助我们?
这是一个前端 Web 服务器虚拟机,基本上只在 RHEL 5.5 上运行 nginx 和 php-fpm。该服务器正在为 PHP 电子商务工具 Magento 提供支持。服务器在共享环境中运行,但我们很快就会改变这种情况。
无论如何.. 重新启动后服务器运行得很好,但一天之内它就会把自己磨成一团糟。加载页面实际上需要 2 分钟,CPU 像疯了一样尖峰,等等。当我通过 SSH 登录时,控制台甚至变得缓慢。就像我的整个服务器都瘫痪了一样。
我还一直通过 top 和 tcpdumping 传入流量监视数据库服务器。数据库在“缓慢”加载时间的大部分时间里都处于空闲状态。当我开始看到来自前端服务器的查询时,页面很快就会加载。
以下是我在减速期间登录后的一些统计信息,在重新启动 php-fpm 后:
[mike@front01 ~]$ free -m
total used free shared buffers cached
Mem: 5963 5217 745 0 192 314
-/+ buffers/cache: 4711 1252
Swap: 4047 4 4042
[mike@front01 ~]$ top
top - 11:38:55 up 2 days, 1:01, 3 users, load average: 0.06, 0.17, 0.21
Tasks: 131 total, 1 running, 130 sleeping, …Run Code Online (Sandbox Code Playgroud) 在我们的 SharePoint 场中,我们的 Web 前端服务器在“待机”模式下都有大量内存,这意味着我们的 IIS 工作进程可用的内存很少。
我们在每个盒子中都有 32 GB 的 RAM,待机内存将增加到大约 28 GB,而 IIS 工作进程似乎只使用了大约 2 GB。此外,我们已经看到机器在此内存处于待机状态时广泛使用交换文件,因此我开始认为处于待机模式的此内存正在阻止 IIS 使用它,迫使它交换到磁盘,从而导致更多的性能问题.
我使用SysInternals RamMap来识别内存中保存的内容,它能够告诉我待机内存中的几乎所有内容都是“映射文件”类型。
当我按文件大小对 RamMap 中文件摘要选项卡下列出的文件进行排序时,最大的文件(每个大约几百兆)是 IIS 日志文件和 SharePoint 日志文件。
我想了解哪个进程正在将这些文件加载到备用内存中以及为什么它们没有被释放。当我执行时iisreset,它不会释放内存。
有任何想法吗?
谢谢!
我有一台 Server 2008 R2,我每天都在维护它。服务器很好并且运行良好,但它不断向我发送事件 2019 错误日志。“服务器?无法?分配?从?系统?非分页?池?因为?池?是?空的。”
非分页内存和虚拟内存一样吗?分页内存和物理内存一样吗?如何检查系统或驱动程序是使用物理内存还是虚拟内存?
我检查了任务管理器 -> 性能以查看它是否在系统上分配了非页面内存,并且确实如此。我只是想知道这个错误可能是试图告诉我或警告我。
谢谢
全新安装并启动 OS Windows x64 后,我启动了 cmd.exe(任何其他 exe)并关闭了它。然后我启动 rammap.exe ( http://technet.microsoft.com/en-us/sysinternals/ff700229.aspx )。在名为“进程”的第二页上,我按进程名称对列表进行了排序,看到 cmd.exe 仍然消耗内存(4K 私有和 16K 页表 = 20K)。我第二次启动它,新项目出现在这个列表中(每个进程启动+终止一个)。因此,每个进程终止都会占用 20K 的内存。
如果您的软件经常在此类服务器操作系统上启动和终止进程,您会发现几天或几周后操作系统开始显示奇怪的错误(通常是关于内存不足)。几天后,您要做的就是重新启动操作系统。重新启动后,它在几乎相同的时间段内都可以正常工作。
我在每个 2008 服务器 R2 x64(+SP1 和 -SP1)上都注册了这个问题,并在 2003 服务器 x64 上间接(不支持 rammap)。
在 Windows 7 x32(+SP1 和 -SP1)上未观察到该问题。
截屏

看这个问题探索的第一步页表快速增长
任何人都可以反驳或批准我的假设和观察吗?谁能告诉如何解决这种行为?这是错误还是不是?