Весь сайт заблокирован, пока одна страница ожидает операции блокировки (PHP, ASP.NET). Зачем? - PullRequest
1 голос
/ 13 марта 2010

Добрый день!

Я обнаружил интересное поведение как для стека LAMP, так и для ASP.NET.

Сценарий:

Есть страница, выполняющая задачу через 2-3 минуты (создание HttpWebRequest для ASP.NET и curl для PHP). Пока эта страница обрабатывается, все остальные запросы к этому виртуальному хосту из того же браузера не обрабатываются (даже если я использую разные браузеры с одного компьютера). Я использую две страницы, написанные на PHP и C #.

Я тестировал Apache + PHP в режимах mod_php и fast_cgi в Windows и Debian. Для ASP.NET я использую IIS6 (с выделенным пулом приложений для этого сайта и с пулом приложений по умолчанию) и IIS7 в интегрированном режиме.

Я знаю, что для таких вещей лучше использовать асинхронные вызовы, но мне просто интересно, почему одна страница блокирует весь сайт, а не только поток, обрабатывающий запрос?

Заранее спасибо!

Ответы [ 5 ]

1 голос
/ 13 декабря 2011

Кажется, вы открываете стандартную сессию php, которая открыта до конца запроса. Это означает, что файл сессии заблокирован. Используйте session_write_close () как можно скорее, если вам уже не нужны данные сеанса.

0 голосов
/ 26 апреля 2015

Приложения ASP.NET имеют глобальную блокировку сеанса.

Используйте EnableSessionState="ReadOnly" для веб-форм или [SessionState(SessionStateBehavior.ReadOnly)] для MVC. Это предотвратит блокировку (конечно, вы ничего не можете записать в сеанс только для чтения).

Я только что обнаружил, почему все сайты ASP.Net работают медленно, и я пытаюсь понять, что с этим делать

0 голосов
/ 13 марта 2010

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

Блокировка может быть явной (вы написали оператор блокировки) или неявной. Если вы видите несколько запросов - это может быть связано с исчерпанием пула потоков.

Имейте в виду, что в дополнение к ограничению на количество потоков, используемых для обработки входящих веб-запросов, существует отдельное ограничение на количество одновременных исходящих веб-запросов через HttpWebRequest, и по умолчанию это ограничение очень мало - если я помню правильно 2 на процессор. Я не помню название параметра в файле web.config, но постараюсь найти его.

В любом случае, почтовый код даст нам больше шансов помочь вам

0 голосов
/ 14 марта 2010

Я определенно заметил это поведение при отладке приложений ASP.NET, но я всегда просто предполагал, что это была проблема конфигурации отладки. Вы все строите в режиме релиза, и в вашем файле web.config отключена отладка?

0 голосов
/ 13 марта 2010

Я не думаю, что это блокирует сайт; Я подозреваю, что открытое соединение не позволяет клиенту делать больше запросов. Вы доказали, что другие машины не могут использовать сайт, пока выполняется ваш долгосрочный запрос?

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