我有一个 Windows 应用程序,它最多可创建 35 个进程,当它从 cmd 运行时,它工作正常。但是当它在同一台机器上作为服务执行时,它只能创建 20 个进程,并且由于某种资源耗尽问题,所有其他进程都被终止。
该问题在一台 Windows 2003 服务器上仍然存在,但在其他服务器上无法重现。
是不是因为系统桌面堆已经用完了?http://support.microsoft.com/kb/184802
我该如何检查?
答案1
是的,有可能就是这样。您可以使用(等等……)桌面堆监视器来监视桌面堆!您可以获取它这里,或者它是 Google 上搜索“桌面堆”的第三个结果。该搜索词组的其他结果提供了大量有关诊断和修复问题的详细信息,因此请阅读一些资料,加载该工具,然后您就可以开始行动了!尝试几次,然后在此处发帖告诉我们这是否对您有帮助。
答案2
它是您创建的应用程序吗?如果是,您可能可以让它将有关可用内存和资源的信息记录到文件中,以帮助缩小发生的情况。Windows 日志中是否显示任何内容?服务在哪个帐户下运行?如果您尝试以您正在测试的用户身份运行该服务,是否会发生同样的事情?不同的环境变量,还是不同的安全上下文?
进程正在做什么?可能是安全设置有些奇怪。sysinternals 中可能有一个工具可以帮助您调试问题,例如使用 procmon。这可能会显示文件或注册表设置在何处收到拒绝或失败错误,具体取决于进程正在执行的操作。即使 procmon 无法提供帮助,套件中也可能有其他工具可以提供帮助。在 Google 上搜索 sysinternals(Microsoft 免费提供),看看他们的内容可以告诉您什么。