Я изучаю некоторые проблемы с ошибками winsock 10055 в цепочке пользовательских приложений (некоторые из которых мы контролируем, а некоторые нет) и надеялся получить советы по методам устранения проблемы.
No buffer space available.
An operation on a socket could not be performed because the system
lacked sufficient buffer space or because a queue was full.
Согласно исследованиям, невыгружаемый пул и порты кажутся единственными ресурсами, которые могут вызвать эту ошибку. Есть ли другой ресурс, который может вызвать ошибку 10055?
В настоящее время у нас настроены счетчики perfmon для приложений, и использование невыгружаемого пула в большинстве случаев выглядит низким. Открытые TCP-соединения кажутся низкими, и я не знаю другого способа мониторинга портов.
Поскольку это происходит только на производстве, мы не можем использовать более агрессивные счетчики. Хотя было бы интересно услышать другие решения. Я уверен, что другие люди могут использовать эту информацию.
Можно ли порекомендовать какой-либо другой инструмент или процедуру для диагностики того, какое приложение вызывает проблему?
ОБНОВИТЬ:
Платформа - Windows Server 2003 x86 с переключателем / 3G. Для справки: x86 обычно имеет 256 МБ памяти NPP, / 3G снижает его до 128 МБ. В общем, вам следует избегать этой конфигурации, чтобы избежать проблем с АЭС. (ссылка)
У нас есть источник для одного приложения. Я написал довольно сложные средства тестирования, пытаясь воспроизвести поведение безрезультатно.
Как уже упоминалось, проблема возникает только в производственной среде. Таким образом, удалось избежать мониторинга пакетов. В настоящее время у нас есть счетчики производительности, которые отслеживают NPP, потоки, сетевой трафик и т. Д. Поскольку интервал perfmon составляет 1 секунду, у вас могут быть микропорывы, которые приходят и уходят в этом окне. Однако есть несколько субъективных свидетельств того, что проблема не в этом.
Основная ситуация заключается в том, что другая сторона соединения сообщает, что она закрыла соединение из-за ошибок с кодом 10055. АЭС (и производительность в целом) выглядит стабильной до отключения, что указывает на то, что причиной был какой-то другой ресурс.
ОБНОВИТЬ:
Я также повторяю, что исходные вопросы касаются диагностики, а не решений. У меня до сих пор нет четкого ответа, что вызывает 10055 ошибок. Проверка драйверов и оборудования и переустановка операционных систем - это здорово, но это позволяет обойти исходный вопрос.
Согласно поисковым запросам Google, это также может быть вызвано нехваткой оперативной памяти. Состояние ошибки, которое я наблюдал через Google при обнаружении некоторых из нижеперечисленных, - это проблемы с нехваткой памяти, когда у базовой операционной системы был небольшой доступ к ОЗУ. Я предполагаю, что проблема того же типа может быть легко воссоздана в виртуальной среде, в которой не хватает оперативной памяти.
Более фундаментальный вопрос по устранению неполадок довольно прост - чем отличается ваша производственная среда?
Вы тестировали приложение в Windows 2003 x64 или Windows 2008?
По второй части ваших вопросов ..
Следующие инструменты можно использовать для устранения неполадок и исправления ошибок Winsock.
Снифферы:
http://www.wireshark.org/
Прокладки:
http://www.sstinc.com/winsock.html http://www.win-tech.com/html/socktspy.htm
Инструменты общего назначения для отслеживания состояния и ресурсов системы
http://technet.microsoft.com/en-us/sysinternals/bb896653.aspx http://technet.microsoft.com/en-us/sysinternals/bb896645
Инструмент для обнаружения вызовов API
http://www.apimonitor.com/ http://www.nektra.com/products/spystudio-api-monitor/
Отладчики
http://www.ollydbg.de/ http://www.immunitysec.com/products-immdbg.shtml
Инструменты реверсирования или декомпиляторы
http://www.hex-rays.com/products/ida/index.shtml http://www.hex-rays.com/products/decompiler/index.shtml
Ваша стандартная IDE и компилятор
http://www.microsoft.com/visualstudio/en-us
Вот список других инструментов:
http://www.sockets.com/devtools.htm
Найдены другие ссылки:
https://stackoverflow.com/questions/8118870/howto-debug-winsock-api-calls
http://brandon.fuller.name/archives/2007/01/24/19.44.29/
http://tangentsoft.net/ <---- Наверное, лучший
Переустановите сервер 2008 R2, мы надеемся, что это сработает. Абсолютно новая архитектура драйверов и лучшая масштабируемость сети.
Не знаю, поможет ли это, но я обнаружил ошибку 10055 в приложении, отправляющем широковещательные сообщения UDP каждые несколько секунд. Это произошло, когда приложение для вещания находилось на ноутбуке, который переходил в режим сна и просыпался.
Игнорирование ошибки для пары последовательных UDP-трансляций решило проблему.
Похоже, WinSock не был полностью восстановлен, когда приложение перезапустило трансляцию после сна.