StackOverflow при размещении в формате WCF - прекрасно работает в консольном приложении - PullRequest
0 голосов
/ 29 октября 2009

У меня есть приложение, которое использует EF. Чтобы проверить свои вещи, я обычно оборачиваю простое консольное приложение вокруг своего кода, запускаю, промываю, повторяю, пока не получу все правильно ... Поэтому я был очень удивлен, увидев переполнение стека, когда я переместил свой код в IIS.

Прямо сейчас я получаю эту проблему на IIS 7.5 (Windows 7 из MSDN). У меня есть «гигабайты» свободной памяти, но код, похоже, не требует «слишком много» памяти, и, как я уже сказал, консольное приложение работает нормально.

Так что я не мастер IIS, но мне интересно, могу ли я вручную увеличить размер стека или увеличить объем памяти, используемый w3wp и т. Д. (Сейчас она меньше 200 М).

1 Ответ

2 голосов
/ 29 октября 2009

Переполнение стека происходит, когда размер вашего стека достигает определенного предела, и больше элементов не может быть помещено в стек. Размер стека по умолчанию в Windows обычно составляет 1 МБ и не имеет никакого отношения к общему объему памяти, доступной для процесса (поэтому анализ памяти, используемой w3wp.exe, не имеет большого смысла в вашем случае).

Можно увеличить размер стека исполняемого файла. Из командной строки Visual Studio вы можете ввести

editbin /STACK:4000000 w3wp.exe

для увеличения размера стека до 4 МБ.

Однако может также случиться так, что переполнение стека вызвано проблемой в коде (обычно бесконечная рекурсия ), которая возникает только при размещении в качестве службы WCF.

Чтобы отследить эту проблему, вам нужно выяснить, где происходит рекурсия. Если вы не можете получить трассировку стека, вам может помочь интенсивное ведение журнала.

UPDATE

Как представляется, w3wp.exe не использует размер стека по умолчанию в Windows, равный 1 МБ, но использует только 256 КБ (см. Также эту статью базы знаний ):

dumpbin /HEADERS c:\windows\system32\inetsrv\w3wp.exe

отпечатков:

[...]
OPTIONAL HEADER VALUES
[...]
    40000 size of stack reserve

A сообщение в блоге предлагает исправить файл w3wp.exe, используя editbin, как описано выше.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...