Что вызывает загадочные вешающие потоки в Colfusion -> MySQL Communication

StackOverflow https://stackoverflow.com/questions/3622845

  •  26-09-2019
  •  | 
  •  

Вопрос

Одной из более интересных «функций» в ColdFusion является то, как он обрабатывает внешние запросы. Основной гид из них заключается в том, что когда запрос сделан на внешний источник через <cfquery> Или или любой другой внешний запрос, подобный тому, что он передает внешний запрос на определенный драйвер, и в тот момент сам CF не может приостановить его. Даже если указан тайм-аут на запросе или в CFSetting, он категорически игнорируется для всех внешних запросов.

http://www.coldfusionmuse.com/index.cfm/2009/6/9/killing.threads.

Таким образом, с учетом того, что проблема, в которой мы столкнулись, заключается в том, что как-то связь между нашим сервером CF и нашим сервером MySQL иногда идет в азахни и оставляет завешивать потоки. У них есть следующие характеристики.

  1. Поток зависания проявляется в CF и не может быть убит из FusionreActor.
  2. Есть нет Подвешенная нить видимая в MySQL, и без активного бегового запроса (просто обычные сон).
  3. База данных отвечает на другие вызовы и кажется правильно работать.
  4. 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. Что никоим образом не уменьшается, насколько раздражался этим.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top