我注意到我的生产服务器“svchost.exe -k netsvcs”正在稳定占用>1GB RAM 内存,我认为这有点过分。
这是 tasklist /svc 将为我提供的有关此过程的信息:
Appinfo, CertPropSvc, gpsvc, IKEEXT,
iphlpsvc, LanmanServer, ProfSvc, Schedule,
SENS, SessionEnv, ShellHWDetection,
Winmgmt, wuauserv
我想知道列出的哪个进程可能导致此内存泄漏以及如何修复它。以前有人遇到过同样的情况吗?
服务器运行的是Windows Server 2008 R2(Build 7601:Service Pack 1),其主要功能是运行内部应用程序处理器工作器。
答案1
问题是,这是泄漏吗?您说的是内存使用情况“稳定”。
泄漏 = 内存使用量随着时间的推移而增加,永远不会减少,因此您必须时不时重新加载服务器。
如果任务长时间(比如两周)保持在 1 GB 左右,那么这种情况就很正常。现代软件会在必要时使用空闲内存,我知道有些程序会抓取任何内存,以节省内存分配时间。
如果它不妨碍系统运行,就不要触碰它。
答案2
与重用已分配的现有内存相比,内存分配对 CPU 周期的消耗非常大。通常,一旦程序启动,直到完成其功能为止,它都不会“放弃”这块内存。
例如,Firefox 会占用一段时间的内存。如果你在电脑上连续一周打开 Firefox,你会发现它的内存大小会不断增加。在 YouTube、Google Play 音乐和浏览之后,我的内存会达到 2-4GB - 在我重新启动该进程后,内存会缩减到 300MB。这是因为它的缓存功能,这种行为是设计使然。
我倾向于相信 SVCHost 进程正在按其应有的方式运行。您的服务器运行了多少服务?1GB 听起来并不令人担忧 - 尽管这取决于您正在运行哪些服务。
答案3
下一步,如果您想进一步调查,我会安装进程资源管理器 (procexp.exe),您可以在 Microsoft 网站上找到它。它将告诉您哪些服务使用此进程(参见 procexp 的屏幕截图),然后您可以停止/启动服务并查看特定服务是否与释放/获取大内存分配相关。它还会告诉您它是工作集还是私有(=主要是堆)分配的内存。如果它与特定服务相关联,那么您将有更清晰的路径来进一步研究。
不用说,您需要在商定的停机/维护窗口内进行此测试或在测试服务器上重现,因为您将中断正常操作。测试完成后,重新启动并检查服务列表是否恢复到正常运行设置。
截屏: