Что вызывает загадочные вешающие потоки в Colfusion -> MySQL Communication
-
26-09-2019 - |
Вопрос
Одной из более интересных «функций» в ColdFusion является то, как он обрабатывает внешние запросы. Основной гид из них заключается в том, что когда запрос сделан на внешний источник через <cfquery>
Или или любой другой внешний запрос, подобный тому, что он передает внешний запрос на определенный драйвер, и в тот момент сам CF не может приостановить его. Даже если указан тайм-аут на запросе или в CFSetting, он категорически игнорируется для всех внешних запросов.
http://www.coldfusionmuse.com/index.cfm/2009/6/9/killing.threads.
Таким образом, с учетом того, что проблема, в которой мы столкнулись, заключается в том, что как-то связь между нашим сервером CF и нашим сервером MySQL иногда идет в азахни и оставляет завешивать потоки. У них есть следующие характеристики.
- Поток зависания проявляется в CF и не может быть убит из FusionreActor.
- Есть нет Подвешенная нить видимая в MySQL, и без активного бегового запроса (просто обычные сон).
- База данных отвечает на другие вызовы и кажется правильно работать.
- Max Connections не были достигнуты для DB, ни пользователю.
Мне кажется, что единственным вероятным кандидатом является то, что каким-то образом CF предъявляет запрос, MySQL отвечает на этот запрос, но с ответом, который CF игнорирует и продолжает держать резьбу открытого ожидания ответа от MySQL. Это объяснило бы, почему база данных, похоже, не проявляет никаких признаков проблем, но CF держит резьбу открытой в ожидании таинственного ответа.
Как правило Эти вешенные нити появляются случайным образом на рабочих сценариях (например, размещение комментария к новостной статье). Даже если один поток повешен для этого скрипта, другие запросы на этот скрипт пройдут, что будет означать, что сценарий не является недостатком неисправности, а скорее условие, с которыми сталкивается, когда скрипт был выполнен.
Мы провели некоторые тесты, чтобы определить, что это не сгенерировано MySQL Max_Connections ... Мы создали пользователь, дали ему 1 Max Connections, связали это соединение со сном (1000) запросом и выполненным другим запросом. К сожалению, он правильно ошибочен без генерации потона.
Итак, я остался на этом моменте абсолютно никакой подсказки, что идет не так. Существует ли какой-то другой предел подключения или тайм-аут, который может вызвать связь между серверами, чтобы пойти на нее?
Решение 3
Короче говоря, но я считаю, что вызвано вызвано обработкой изображений CF8 ColdFusion. Это просто багги, и теперь в CF9 я никогда не видел эту проблему снова.
Другие советы
Одна из вещей, на которой вы должны начать смотреть, - это аппаратное обеспечение между двумя серверами. Возможно, у вас есть роутер или мост или NIC, который сбрасывает случайные пакеты. Это может привести к мышлению MySQL Box, оно выполнило задачу, когда сервер CF сидит там и ждет полного ответа на неопределенный срок, создавая вешенную ниту.
3Com имеет некоторые детали по тестированию для потери пакетов здесь: http://support.3come.com/infodeli/tools/netmgt/tncsunix/product/091500/c11ploss.htm#22128.
У нас была похожая проблема с сервером MS SQL. Там корневая причина была известной проблемой, в которой по какой-то причине сервер считает, что он выключается, а поток зависает (даже если сервер, очевидно, не закрывается).
Мы не смогли устранить проблему, но смогли уменьшить его, отключая объединенные соединения БД и возобновляющуюся с частотой обновления соединения. (Я думаю, что получил этот лейбл правильно - нет доступа к администратору по моей новой работе.) Оба находятся в соединительных свойствах в администраторе.
Просто примечание: проблема не совсем не с ср. Проблема, по-видимому, влияет на все приложения Java. Что никоим образом не уменьшается, насколько раздражался этим.