У нас возникла очень странная проблема, которая возникла несколько недель назад и не может быть решена.
Мы запускаем несколько веб-сайтов в IIS (порт 80 443) и в Apache (8080 8090) на одной машине с Windows Server 2003 SP2. Мы используем эту конфигурацию уже пару лет.
Веб-приложения, запущенные в IIS, иногда подключаются к приложениям, запущенным в Apache (на том же сервере), прежде чем ответить клиенту. В других случаях приложения будут подключаться к серверу базы данных, работающему на другом сервере, а иногда они также будут подключаться к общей папке Windows на другом сервере.
Во всех трех описанных выше сценариях приложение будет периодически сообщать об одной из следующих ошибок:
Кроме того, мы заметили, что при входе на сервер при возникновении проблемы при попытке выполнить запрос к http: // localhost / и т. д., http://127.0.0.1/etc, http://192.168.xxx.xxx/etc (локальный IP-адрес) все выдаст сообщение об ошибке «Соединение было сброшено» (Firefox). Веб-запросы IIS и Apache не работают. Мы можем подключаться к серверу с другого компьютера (используя IP-адрес или имя хоста), и мы можем подключаться к внешним сайтам с сервера, и выполнение пинга для самого себя не прерывается в течение этого периода времени.
Проблема волшебным образом исправится сама собой в течение случайного периода времени. Иногда мы можем без проблем пройти более 24 часов, а иногда всего 20-30 минут. Пока проблема возникает, она может длиться от нескольких секунд до нескольких минут (обычно не более 10-15).
У нас также не было проблем с подключением к серверу базы данных или файловому серверу с других серверов, когда мы сталкивались с этим с этого сервера.
Есть идеи относительно того, где мы должны искать?
Обновить: Таким образом, мы все еще получаем эти области, но, чтобы добавить больше деталей, мы получаем эти ошибки случайным образом при подключениях к нескольким серверам и нескольким различным типам подключений. Мы получаем его через cifs (общий доступ к файлам), SQL Server и веб-соединения с несколькими серверами как в LAN и WAN, так и с самим собой. В большинстве случаев это сообщение «Установленное соединение было прервано программным обеспечением на вашем хост-компьютере».
NETSH DUMP
#========================
# Interface configuration
#========================
pushd interface
reset all
popd
# End of interface configuration
#========================
# Interface configuration
#========================
pushd interface ipv6
uninstall
popd
# End of interface configuration
# ----------------------------------
# ISATAP Configuration
# ----------------------------------
pushd interface ipv6 isatap
popd
# End of ISATAP configuration
# ----------------------------------
# 6to4 Configuration
# ----------------------------------
pushd interface ipv6 6to4
reset
popd
# End of 6to4 configuration
#========================
# Port Proxy configuration
#========================
pushd interface portproxy
reset
popd
# End of Port Proxy configuration
# ----------------------------------
# Interface IP Configuration
# ----------------------------------
pushd interface ip
# Interface IP Configuration for "SW-1A"
set address name="SW-1A" source=static addr=192.168.xxx.51 mask=255.255.255.0
add address name="SW-1A" addr=192.168.xxx.50 mask=255.255.255.0
set address name="SW-1A" gateway=192.168.xxx.254 gwmetric=0
set dns name="SW-1A" source=static addr=192.168.xxx.2 register=PRIMARY
add dns name="SW-1A" addr=192.168.xxx.3 index=2
set wins name="SW-1A" source=static addr=none
popd
# End of interface IP configuration
# ------------------------------------
# Bridge configuration (not supported)
# ------------------------------------
# ------------------------------------
# End of Bridge configuration
# ------------------------------------
# -----------------------------------------
# aaaa Configuration
# -----------------------------------------
# This script will NOT work across different versions of IAS.
# -----------------------------------------
# aaaa configuration script.
# Known Issues and limitations:
# Import/Export between different versions is not supported.
# IAS.MDB Version = 7
pushd aaaa
set config blob=\
blob snippped
\
AA\
*\
A7ACI/wD\
\
*\
A7ACI/wD\
\
*\
A7ACI/wD\
\
*\
A7ACI/wD\
\
*\
A7ACI/wD\
\
*\
A7ACI/wD\
\
*\
A7ACI/wD\
\
*\
A7ACI/wD\
\
*\
A7ACI/wD\
\
*\
A7ACI/wD\
\
*\
A7ACI/wD\
\
*\
A7ACI/wD\
\
*\
A7ACI/wD\
\
*\
A7ACI/wD\
\
*
popd
# End of aaaa show config
# End of aaaa configuration.
# -----------------------------------------
# Remote Access Configuration
# -----------------------------------------
pushd ras
set authmode mode = standard
delete authtype type = PAP
delete authtype type = SPAP
delete authtype type = MD5CHAP
delete authtype type = MSCHAP
delete authtype type = MSCHAPv2
delete authtype type = EAP
add authtype type = MSCHAP
add authtype type = MSCHAPv2
delete link type = SWC
delete link type = LCP
add link type = SWC
add link type = LCP
delete multilink type = MULTI
delete multilink type = BACP
add multilink type = MULTI
add multilink type = BACP
set user name = ASPNET dialin = policy cbpolicy = none
set user name = Guest dialin = policy cbpolicy = none
set user name = IUSR_WX-WWW1 dialin = policy cbpolicy = none
set user name = IWAM_WX-WWW1 dialin = policy cbpolicy = none
set user name = customuser1 dialin = policy cbpolicy = none
set user name = customuser2 dialin = policy cbpolicy = none
set user name = customuser3 dialin = policy cbpolicy = none
set user name = SUPPORT_388945a0 dialin = policy cbpolicy = none
set user name = customuser4 dialin = policy cbpolicy = none
popd
# End of Remote Access configuration.
# -----------------------------------------
# Remote Access AppleTalk Configuration
# -----------------------------------------
pushd ras appletalk
set negotiation mode = allow
popd
# End of Remote Access AppleTalk Configuration.
# -----------------------------------------
# Remote Access Diagnostics Configuration
# -----------------------------------------
pushd ras diagnostics
set rastracing component = * state = disabled
set modemtracing state = disabled
set cmtracing state = disabled
set securityeventlogs state = disabled
popd
# End of Remote Access Diagnostics Configuration.
# -----------------------------------------
# Remote Access IP Configuration
# -----------------------------------------
pushd ras ip
delete pool
set negotiation mode = allow
set access mode = all
set addrreq mode = deny
set broadcastnameresolution mode = disabled
set addrassign method = auto
popd
# End of Remote Access IP configuration.
# -----------------------------------------
# Remote Access IPX Configuration
# -----------------------------------------
pushd ras ipx
set negotiation mode = allow
set access mode = all
set nodereq mode = allow
set netassign method = autosame
popd
# End of Remote Access IPX configuration.
# -----------------------------------------
# Remote Access NBF Configuration
# -----------------------------------------
pushd ras netbeui
set negotiation mode = allow
set access mode = all
popd
# End of Remote Access NBF configuration.
# -----------------------------------------
# Remote Access AAAA Configuration
# -----------------------------------------
pushd ras aaaa
set authentication provider = windows
set accounting provider = windows
delete authserver name = *
delete acctserver name = *
popd
# End of Remote Access AAAA configuration.
# Routing Configuration
pushd routing
reset
popd
# IP Configuration
pushd routing ip
reset
set loglevel error
add preferenceforprotocol proto=LOCAL preflevel=1
add preferenceforprotocol proto=NetMgmt preflevel=10
add preferenceforprotocol proto=STATIC preflevel=3
add preferenceforprotocol proto=NONDOD preflevel=5
add preferenceforprotocol proto=AUTOSTATIC preflevel=7
add preferenceforprotocol proto=OSPF preflevel=110
add preferenceforprotocol proto=RIP preflevel=120
add interface name="SW-1B" state=enable
set filter name="SW-1B" fragcheck=disable
add interface name="SW-1A" state=enable
set filter name="SW-1A" fragcheck=disable
add interface name="Internal" state=enable
set filter name="Internal" fragcheck=disable
add interface name="Loopback" state=enable
set filter name="Loopback" fragcheck=disable
popd
# End of IP configuration
# ----------------------------------
# DNS Proxy configuration
# ----------------------------------
pushd routing ip dnsproxy
uninstall
popd
# End of DNS proxy configuration
# ----------------------------------
# IGMP Configuration
# ----------------------------------
pushd routing ip igmp
uninstall
popd
# End of IGMP configuration
# ----------------------------------
# NAT configuration
# ----------------------------------
pushd routing ip nat
uninstall
popd
# ----------------------------------
# OSPF configuration
# ----------------------------------
pushd routing ip ospf
uninstall
popd
# End of OSPF configuration
# ----------------------------------
# DHCP Relay Agent configuration
# ----------------------------------
pushd routing ip relay
uninstall
popd
# End of DHCP Relay configuration
# ----------------------------------
# RIP configuration
# ----------------------------------
pushd routing ip rip
uninstall
popd
# End of RIP configuration
# ----------------------------------
# Router Discovery Configuration
# ----------------------------------
pushd routing ip routerdiscovery
uninstall
add interface name="SW-1B" disc=disable minint=7 maxint=10 life=30 level=0
add interface name="SW-1A" disc=disable minint=7 maxint=10 life=30 level=0
add interface name="Internal" disc=disable minint=7 maxint=10 life=30 level=0
add interface name="Loopback" disc=disable minint=7 maxint=10 life=30 level=0
popd
# ----------------------------------
# DHCP Allocator Configuration
# ----------------------------------
pushd routing ip autodhcp
uninstall
popd
# End of DHCP Allocator Configuration
Loading of DLL WinsEvnt.dll failed.
Wins Operation failed with Error There are no more endpoints available from the endpoint mapper.
Обновить: В конце июля мы установили Windows Server 2008 R2 на том же оборудовании, и проблема исчезла, и с тех пор мы не оглядывались назад. Был смысл, когда вы просто сокращали свои потери, кусали пулю и бежали с ней.
Одна возможность: временное исчерпание порта. Попробуйте что-нибудь вроде netstat -an | find /c ":"
чтобы подсчитать, сколько у вас соединений во всех различных состояниях. Если это число превышает десять тысяч или около того, скорее всего, это ваша проблема.
Вы видите что-нибудь полезное в журналах событий? Проблемы с загрузкой драйверов при запуске? Можете ли вы проверить коммутатор и увидеть, есть ли ошибки передачи или контрольной суммы в интерфейсе восходящего канала системы?
Если у вас возникают ошибки при перезагрузке, которые так или иначе относятся к сети, я бы сначала их рассмотрел. Если у вас есть ошибки коммутатора, я бы заменил кабели и перешел на другой порт на коммутаторе.
Если у вас нет ошибок, подумайте об установке новой сетевой карты. В лучшем случае это решает проблему, в худшем - вместе с новыми кабелями и другим коммутатором, вы можете полностью исключить физическое состояние из списка.
ОБНОВЛЕНО
Учитывая, что это происходит на нескольких машинах, я думаю, что мы можем исключить проблемы физического уровня.
Тогда я подумал, что, учитывая, что он прерывистый и влияет на несколько служб, будет TCP Chimney. См. Эту статью в базе знаний: http://support.microsoft.com/kb/945977 и посмотрите, поможет ли это.
После этого отключите все на панели сетевого подключения, кроме клиента, общего доступа и IP-протокола. Нет QOS, нет брандмауэра, нет NLB, нет портов на уровне поставщика, объединяющих драйверы и т. Д.
ОБНОВЛЕНО снова
Что ж, если все это отключено, я бы сказал, что вам следует пройти через расширенные настройки уровня драйвера. Если можете, разместите их здесь. Если нет, запишите их, а затем попробуйте следующее: включите управление потоком, если оно выключено - RX и TX включены / Ответить и генерировать в зависимости от драйвера. Затем найдите все, что помечено как разгрузка, и выключите его. Отключите поддержку jumbo-кадров и vlan. Отключите все, что помечено QOS. По сути, заставьте оборудование делать всю работу и убрать любые задачи ОС / драйвера / процессора с канала данных.
И, наконец, если вы можете поймать сервер во время «события», выполните действия, описанные в этой статье, чтобы проверить использование страницы ядра и посмотреть, помогает ли это диагностировать проблему: http://blogs.msdn.com/b/david.wang/archive/2005/09/21/howto-diagnose-iis6-failing-to-accept-connections-due-to-connections-refused.aspx
Мое последнее предложение
Рассмотрите возможность отключения SynAttackProtect и других средств защиты TCP на уровне ядра: http://technet.microsoft.com/en-us/library/cc781167(WS.10).aspx или, по крайней мере, поднять настройки TcpMax *, которые могут вызвать его срабатывание.
Может быть, ваши службы аутентифицируются друг для друга через Kerberos (через AD), а вызываемые службы перестают отвечать из-за проблем с аутентификацией? Это должно быть обнаружено с помощью NetMon или WireShark.
Я могу думать о двух вещах:
У вас заканчиваются эфемерные порты. Если вы используете Linux - настройки по умолчанию обычно очень консервативны, поэтому вы всегда должны настраивать их для использования в производственной среде. Вы можете проверить это с помощью cat /proc/sys/net/ipv4/ip_local_port_range
. Обратите внимание, что эта проблема может быть не на самом сервере, а на вашем брандмауэре, особенно если вы используете NAT.
У вас заканчиваются файловые дескрипторы. Каждое TCP-соединение требует 2 файловых дескриптора, поэтому, подсчитав количество открытых соединений, вы можете оценить количество необходимых файловых дескрипторов и сравнить его с вашими системными ограничениями. ulimit -a
предоставит вам ваши текущие пределы. Опять же, настройки Linux по умолчанию консервативны (в Centos 5.x ограничение по умолчанию - 1024), поэтому вам может потребоваться внести некоторые изменения.