2010-09-01 3 views
2

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

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

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

  1. Витая нить появляется в CF и не может быть убита из FusionReactor.
  2. no виден поток, видимый в mySQL, и активный активный запрос (просто обычный сон).
  3. База данных отвечает на другие вызовы и, по-видимому, работает правильно.
  4. Максимальные соединения не были достигнуты для БД или пользователя.

Мне кажется единственным вероятным кандидатом является то, что каким-то образом CF делает запрос, MySql реагирует на эту просьбу, но с ответом, который CF игнорирует и продолжает держать нить открытое ожидание ответа от MySql. Это объясняет, почему в базе данных нет никаких признаков проблем, но CF держит поток открытым, ожидая таинственного ответа.

Обычно эти зависающие нити отображаются случайным образом в других рабочих сценариях (например, размещая комментарий к новостной статье). Даже если для этого скрипта висит один поток, будут выполняться другие запросы для этого скрипта, что подразумевает, что сценарий не обязательно виноват, а скорее условие, с которым столкнулось при выполнении сценария.

Мы проверили некоторый тест, чтобы определить, что это не ошибка, вызванная mysql max_connections ... мы создали пользователя, дали ему 1 max соединений, связали это соединение с запросом sleep (1000) и выполнили другой запрос. К сожалению, он правильно ошибочно, без генерации зависающей нити.

Итак, я остался в этом месте, абсолютно не понимая, что происходит не так. Есть ли еще какой-либо другой лимит подключения или тайм-аут, который может привести к сбою связи между серверами?

+0

Что именно не так? У вас заканчивается какой-то ресурс (возможно, потоки)? Вы максимизируете свои текущие запросы? –

ответ

0

Короче говоря, но я считаю, что причиной этого послужила обработка изображений CF8 Coldfusion. Это было просто глючит, а теперь в CF9 я еще никогда не видел эту проблему.

+0

с CF 11 и MySql im, стоящими перед тем же вопросом, но без решения для него :( – Bsienn

0

Одной из вещей, на которые стоит обратить внимание, является аппаратное обеспечение между двумя серверами. Возможно, что у вас есть маршрутизатор или мост или сетевой адаптер, который отбрасывает отдельные пакеты. Это может привести к тому, что поле mySQL будет считать, что оно выполнило задачу, а сервер CF сидит там и ждет полного ответа на неопределенный срок, создавая зависающий поток.

3com имеет некоторые подробности о тестировании на потери пакетов здесь: http://support.3com.com/infodeli/tools/netmgt/tncsunix/product/091500/c11ploss.htm#22128

0

У нас была аналогичная проблема с сервером MS SQL. Там основная причина была известная проблема, в которой по какой-то причине сервер думает, что он выключается, и зависает нить (хотя сервер, очевидно, не отключается).

Мы не смогли устранить проблему, но смогли уменьшить ее, отключив объединенные соединения БД и возившись с частотой обновления соединения.(Я думаю, что я правильно получил этот ярлык - нет доступа к администратору при моем новом трудоустройстве.) Оба находятся в свойствах соединения в Administrator.

Просто примечание: проблема не совсем с CF. Проблема, по-видимому, затрагивает все приложения Java. Который никоим образом не уменьшает, насколько я раздражаюсь этим.

Смежные вопросы