DHeapmon不报告IIS6中预计的桌面总数

希望有人能帮助我理解这一点。 我试图debugging我们在生产环境中看到的一些COM +错误,其中一些报告说桌面堆已经耗尽,所以在阅读了最终的Desktop Heap指南之后,我为初学者安装了Windowsdebugging工具和DHeapmon: http:// blogs.msdn.com/b/ntdebugging/archive/2007/01/04/desktop-heap-overview.aspx

基本上,据我所知 – 每个IIS工作进程(w3wp.exe)应该分配一个(非交互式)桌面堆; 默认为512k。 我们在生产环境中有30多个站点,当我运行DHeapmon来报告桌面数量时,它不仅没有像我预期的那样报告30多个桌面(每个进程1个,然后是实际的Windows交互式桌面服务器) – 它报告单个数字的台式机。

我证实我们不共享应用程序池或桌面,所以我应该看到每个进程的桌面,对吧?

有一件事我有一个问题 – 如果一个IIS工作进程是IDLE,它应该被杀死 – 默认是20分钟,我相信。 然而,我访问了一个空闲的网站,它确实为该网站产生了一个新的w3wp.exe,然后再次运行DHeapmon,并且它仍然报告相同数量的桌面。

我错过了什么? 有没有更好的方式来获取我以后的信息?

任何帮助表示赞赏!

不,每个会话空间都有一个桌面。 重新阅读文章中标题为“奠定基础:会话空间”的链接部分:“会话空间分为四个区域:会话图像空间,会话结构,会话视图空间和会话分页池。会话视图空间包含会话的映射视图,包括桌面堆“

要获得额外的桌面堆,您需要使用单独的凭据运行单独的池。 这就是说,服务器应用程序的桌面堆耗尽告诉我,代码中有一些错误,或者只是糟糕的编程。 桌面堆是UI元素。 另一种可能性是,IIS作为一个现有的服务帐户运行,它有一些不好的代码。

最后是空闲的w3wp进程会在超时后被杀死,但是这不一定会产生一个新的桌面,因为它取决于创build它的用户上下文。