При эксплуатации информационных баз 1С:Предприятие, опубликованных на веб-сервере Microsoft IIS, системные администраторы нередко сталкиваются с ситуацией, когда после некоторого времени стабильной работы веб-клиенты и веб-сервисы перестают отвечать, возвращая ошибку HTTP Error 500 (Internal Server Error). При этом перезапуск пула приложений или самого IIS временно восстанавливает работоспособность. Разберем по шагам, где искать диагностические данные и как устранить первопричины такого поведения.
Ошибка 500 является обобщенным ответом веб-сервера, означающим внутренний сбой при обработке запроса. Чтобы точно понять, на чьей стороне произошла ошибка — в самом IIS, модуле расширения веб-сервисов wsisapi.dll или на уровне сервера 1С:Предприятие, выполним комплексную диагностику.
eventvwr.msc и проанализируем две ветки:
В журнале Application найдем события с источниками Application Error и IIS-W3SVC-WP. Они фиксируют аварийные падения рабочего процесса w3wp.exe с указанием сбойного модуля (например, wsisapi.dll, ntdll.dll или компонентов Visual C++ Runtime).
В журнале System проверим записи службы WAS (Windows Process Activation Service). Если пул приложений падал неоднократно, там будут зафиксированы события автоматической остановки пула из-за срабатывания механизма защиты от сбоев.
500. Это сформирует подробный XML-отчет по каждому упавшему запросу, где пошагово видно, на каком именно этапе конвейера IIS (аутентификация, сопоставление обработчика или выполнение ISAPI-расширения) произошел сбой.logcfg.xml, настроив сбор событий исключительных ситуаций и веб-сервисов с фильтрацией по рабочему процессу веб-сервера:
<config xmlns="http://v8.1c.ru/v8/tech-log">
<dump location="C:\dumps" create="1" type="2"/>
<log location="C:\LOGS\IIS_1C" history="72">
<event>
<eq property="name" value="EXCP"/>
<eq property="p:processName" value="w3wp"/>
</event>
<event>
<eq property="name" value="WEBS"/>
<eq property="p:processName" value="w3wp"/>
</event>
<property name="all"/>
</log>
</config>
Частая ошибка архитектуры — публикация нескольких информационных баз внутри одного пула приложений IIS. Если несколько баз 1С работают в рамках одного рабочего процесса w3wp.exe, критическая ошибка, зависание сессии или утечка памяти в одной базе приводит к аварийному завершению всего процесса. В результате перестают отвечать все остальные базы этого пула.
Для решения проблемы изолируем базы:
Проанализируем соответствие разрядности установленной платформы 1С и настроек IIS:
False.True. Однако 32-битный рабочий процесс ограничен адресным пространством в 2-3 ГБ, что при интенсивных запросах или формировании тяжелых отчетов через веб быстро приводит к ошибке переполнения памяти и падению процесса. Для продуктивных систем рекомендуется использовать 64-битную платформу и модуль расширения.Поскольку при непрерывной обработке сложных веб-запросов и HTTP-сервисов в процессе w3wp.exe могут постепенно накапливаться дескрипторы и неосвобожденная память, настроим регулярную утилизацию процесса:
03:00 ночи, когда нагрузка на базу минимальна.wsisapi.dll по системным журналам.Ошибка 500 может возникать из-за отказа в доступе учетной записи пула приложений к файловой системе при попытке платформы создать временные файлы или прочитать параметры публикации. Выясним права учетной записи (по умолчанию это IIS_IUSRS или applicationPoolIdentity):
default.vrd.C:\Windows\Temp.C:\ProgramData\1C\1cv8.Если веб-сервер используется для высоконагруженных интеграций через HTTP-сервисы или Web-сервисы, нехватка соединений в пуле приводит к таймаутам и падениям с кодом 500. Проанализируем файл default.vrd в каталоге публикации базы. Для оптимизации работы пула соединений зададим явные параметры пула в корневом элементе point:
<point xmlns="http://v8.1c.ru/8.2/virtual-resource-system"
xmlns:xs="http://www.w3.org/2001/XMLSchema"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
base="/base_name"
ib="Srvr="app-server";Ref="base_name";"
enableStandardOData="true">
<ws enable="true" pointEnableCommon="true"/>
<httpServices publishByDefault="true"/>
<pool size="10"
timeout="60"
reuse="true"/>
</point>
Параметр size определяет максимальное количество удерживаемых сессий к серверу 1С, а timeout — время в секундах, в течение которого неактивное соединение сохраняется в пуле. Это снижает накладные расходы на постоянную авторизацию и предотвращает лавинообразные ошибки при наплыве входящих запросов.