ColdFusion JVM: странное поведение памяти

С прошлого месяца у нас возникла проблема на сервере нашей компании (Win2008ServerStd + IIS7 + CF enterprise 9.0.1 (hotfix2)).

Я использовал jConsole для мониторинга активности Coldfusion JVM (1.6.0_24) и вот что я вижу:

Curve1

Curve2

Обратите внимание на эту странную «кривую» между 14:10 и 14:15! Что это такое?

Очевидно, что это не стандартное поведение, когда это происходит, мои приложения зависают на 30-70 секунд!

Вы знаете, что может вызвать эту проблему с памятью? Похоже, GC работает неправильно или зависает.

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


person Fabio B.    schedule 19.04.2012    source источник
comment
Любые обновления? Вы уже поняли это?   -  person Mark A Kruger    schedule 23.04.2012
comment
Нет..... :-( Это может быть связано с перезапуском пула приложений IIS или зависанием драйвера jdbc. Пока не уверен. Я буду держать этот вопрос в курсе.   -  person Fabio B.    schedule 24.04.2012
comment
Вы можете столкнуться с проблемой максимального процессора, которую я нашел здесь: coldfusionmuse.com/index.cfm/2011/11/4/   -  person Mark A Kruger    schedule 24.04.2012


Ответы (4)


Используя cfstat, perfmon, fusionreactor или монитор производительности cf, посмотрите на запущенные запросы и поставленные в очередь из-за вашей проблемы. То, что вы, скорее всего, увидите, это запуск запросов, вылезающих за пределы настройки одновременных запросов (в админке cf). Затем запросы начнут стоять в очереди. В конце концов очередь очистится (если ваш сервер восстанавливается самостоятельно).

Такого рода вещи могут быть вызваны рядом вещей. Например, если ваш сервер БД замедляется или возникает проблема, если в вашей сети есть проблема, если сетевые порты повторно синхронизируются, если на ваших дисках есть проблемы с вводом-выводом и т. д.

Я предполагаю, что вы сойдете с ума, пытаясь понять это, наблюдая за своей кучей. Посмотрите, можете ли вы посмотреть на одном из мониторов некоторые конкретные сценарии, которые могут быть виновниками.

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

person Mark A Kruger    schedule 19.04.2012
comment
Большое спасибо за ответ, Марк! Наша большая проблема заключается в том, что такое поведение происходит и в периоды с низким трафиком. Мы подозреваем, что может быть проблема в связи между IIS7 и CF9. Мы также никогда не видели много одновременных запросов вместе, чтобы увеличить этот параметр. - person Fabio B.; 19.04.2012
comment
Если это CF и IIS, вы, вероятно, увидите некоторые ошибки в файле server.log. Вы можете попробовать временно отключить брандмауэр Windows. Единственное, что заставило бы меня задуматься о вашей гипотезе, — это ее случайность. Если бы вас каким-то образом заблокировали, это было бы более предсказуемо. - person Mark A Kruger; 19.04.2012

Это мог быть паук, создающий много-много сеансов при обходе сайта, который на какое-то время потреблял память. Как только паук перестанет сканировать, эти сеансы прекратятся по тайм-ауту и ​​будут удалены сборщиком мусора.

Я бы сравнил журналы вашего HTTP-сервера с журналами JVM. Сравните эти временные рамки и посмотрите, много ли запросов от поискового паука (Googlebot, msnbot и т. д.).

person Sean Coyne    schedule 19.04.2012

Фабио, та же проблема, что и у меня пару месяцев назад, когда у меня был всплеск с регулярным интервалом, а сервер потреблял около 50% загрузки ЦП. Я написал полную историю ниже URL-адреса http://www.isummation.com/blog/strange-coldfusion-issue-jrun-eating-up-to-50-of-cpu/, который может вам помочь (извините, что так долго).

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

person Pritesh Patel    schedule 20.04.2012
comment
большое спасибо за ваш ответ. Только одно: вы говорите, глядя в след точно найти решение. Как я могу сделать то же самое? Как посмотреть трассировку стека за заданный период времени? - person Fabio B.; 20.04.2012
comment
в дополнение: как вы можете видеть на графике jconsole, когда jvm сходит с ума, загрузка процессора падает почти до нулевого уровня. :) - person Fabio B.; 20.04.2012
comment
Используя jTop, вы можете узнать, какой поток потребляет больше ресурсов ЦП, и попробуйте плагин инспектора потоков VisualVm, который поможет вам узнать о журнале трассировки потоков. Если вы хотите настроить coldfusion с помощью VISUALVM, пост ниже поможет вам в этом. isummation.com/blog/configure-coldfusion-with-visualvm Просто просмотрите пост в ответе, где я упоминаю, как мне все получить. - person Pritesh Patel; 20.04.2012

Единственное, что действительно странно, IMO, - это внезапный всплеск количества потоков. Регулярно записывайте дамп потока (jstack и т. д. — ваши друзья), а затем сопоставляйте эти дампы потока с вашим мониторингом, где он показывает всплеск.

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

person Trent Gray-Donald    schedule 20.04.2012