我有一个使用EF的应用。为了测试我的东西,我通常在我的代码周围包装一个简单的控制台应用程序,运行,重复冲洗直到我做对了...所以当我将代码移动到IIS时,看到堆栈溢出时,我感到非常惊讶。
现在我在IIS 7.5(来自MSDN的Windows 7)上遇到此问题。我有“gig”的内存免费,但代码似乎并不需要“那么多”内存,就像我说的那样 - 控制台应用运行得很好。
所以我不是IIS向导,但我想知道我是否可以手动增加堆栈大小或者使用内存w3wp等等(现在它不到200 M)。
答案 0 :(得分:2)
当堆栈大小达到定义的限制并且不能在堆栈上放置更多元素时,会发生堆栈溢出。 Windows中的默认堆栈大小通常为1 MB,与进程可用的总内存无关(因此查看w3wp.exe使用的内存在您的情况下没有多大意义)。
可以增加可执行文件的堆栈大小。从Visual Studio命令提示符,您可以发出
editbin /STACK:4000000 w3wp.exe
将堆栈大小增加到4 MB。
但是,也可能是堆栈溢出是由代码中的问题引起的(通常是无限递归),这只会在作为WCF服务托管时发生。
要追踪此问题,您需要找出递归发生的位置。如果你无法获得堆栈跟踪密集型日志记录将在这里帮助你。
<强>更新强>
看起来,w3wp.exe不使用Window的默认堆栈大小1 MB但仅使用256 kB(另请参阅此knowledge base article):
dumpbin /HEADERS c:\windows\system32\inetsrv\w3wp.exe
打印:
[...] OPTIONAL HEADER VALUES [...] 40000 size of stack reserve
blog post建议使用editbin
修补w3wp.exe,如上所述。