调用 shell 命令时 Windows 页面文件中发生内存泄漏

调用 shell 命令时 Windows 页面文件中发生内存泄漏

我在 Windows 2003 x64 Build Server 上从脚本调用 shell 命令时遇到了问题。每次调用都会导致页面文件中出现“内存泄漏”,因此内存会迅速增长,直到达到最大值,然后机器停止工作。

我可以通过运行如下 Perl 脚本很好地重现该问题

for ($count=1; $count<5000; $count++) { system "echo huhu"; }

它独立于脚本语言,就像 Lua 一样:

for i=1,5000 do os.execute("echo huhu") end

这也是使用 PHP 时出现的问题。(他们的解决方案(卸载辅助防火墙)不适用,因为机器上没有运行防火墙或病毒扫描程序。)

我们还可以在运行 Windows XP 64 的其他开发机器上重现该问题,但无法在 XP 32 位上重现该问题。

该分配的罪魁祸首是C:\WINDOWS\System32\svchost.exe -k netsvcs运行所有基本 Windows 服务。

有人知道这个问题以及如何解决它吗?

答案1

为了更好地了解哪个进程,假设您知道 PID,请运行tasklist /svc并查看您是否可以更好地确定发生这种情况的服务。如果(我猜)这是在 IIS 下运行的,那么它可能会显示为 W3SVC

您在从命令行运行 Perl 脚本时是否遇到这种情况,或者是否由 IIS 触发?如果是前者,我不确定这有什么意义,因为不应该有任何服务涉及其中。如果是后者,您能更详细地描述您的设置吗?

您是否尝试过运行 MS SysInternals 团队开发的 ProcessExplorer 或 Process Monitor 之类的工具?非常有用的工具。

答案2

我们通过重新安装类似的步骤发现了这个问题。这似乎是由硬锁驱动程序中的错误引起的。安装较新版本的驱动程序后,问题消失了。

硬锁是一种为软件产品提供版权保护的加密狗,通常是一个小型 USB 插头。问题是由受版权保护的软件附带的此加密狗的设备驱动程序软件引起的。

相关内容