2011-04-06 2 views
2

Глядя на серверный монитор Coldfusion, я вижу много запросов со средними значениями в среднем от 100 КБ до 700 КБ. Мне это кажется высоким, не так ли?Что такое обычное использование памяти для запроса в Coldfsuion

Если он высокий, это объясняет, почему сервер, похоже, любит есть RAM и никогда не отпускает его. Что было бы хорошим способом узнать, почему использование памяти настолько велико. Я ничего не могу придумать, чтобы использовать эту большую память. Есть ли хорошие способы отладки запросов Coldfusion?

ответ

1

Вы действительно получаете исключения из памяти? Или ошибки «из стекового пространства»? Внимательно проверьте журналы, поскольку у меня был опыт работы с CF, который был запущен раньше - проверьте файлы server.log.

Если да, то, как уже упоминалось, вы можете использовать инструмент JConsole для отслеживания использования памяти. Если вы видите, что память доходит до этих исключений, вам нужно выяснить, где протекает ваша память. Лучший способ сделать это - получить свалку JVM в это время и использовать инструмент анализа мериометрии. I documented наш опыт в этом.

Если нет исключений и т. Д., Тогда имейте в виду, что JRun делает использовать много памяти. Обычно от 500 МБ до 1,5 ГБ на наших серверах Win32, даже если настройка CF Admin для размера кучи JVM составляет 1024 МБ. JRun и работает поверх Java, запустив сервер приложений, чтобы он был достаточно высоким. То, что вам нужно следить, - это все более широкое использование памяти с помощью JConsole.

Что касается GC tuning - только беспорядок с этими настройками, если у вас действительно есть проблема. Это сложно и приведет к нестабильности сервера, если это будет сделано неправильно или без понимания того, как работает Java GC. Вы можете получить основы here, а затем вы можете передать настройки (например, -XX:MaxPermSize=192m) в качестве аргумента JVM в CF admin.

Устранение проблем с памятью может быть сложным и трудоемким, так что удачи!

+0

У меня установлена ​​куча JVM на 10240 на сервере Win2k8x64. Но сервер, похоже, виснет и не реагирует, когда он приближается к 6 ГБ памяти. Проблема здесь в том, что даже служба мониторинга (которую я настроил для запуска как отдельный сервер) также не реагирует, поэтому я никогда не могу увидеть, что я не так. –

+0

Wow - 6 ГБ памяти! И куча 10 ГБ! Я не могу себе представить, что для обычного сервера веб-приложений требуется столько памяти. Вы очень занятый сайт? Но сначала: вы пробовали использовать JConsole? Если вы запускаете CF в качестве службы Windows, проверьте эту ссылку: http://flydillonfly.wordpress.com/2010/09/01/1048076135/ - оставьте его в рабочем состоянии, а затем выполните сброс памяти и осмотрите его, когда он вырос примерно на 1 ГБ , Этот анализ может показать класс, который является виновником. –

+0

Да, это не так много, хотя есть много шаблонов. Я буду завтракать jConsole. –

2

Нам очень повезло с SeeFusion и просто с помощью Jconsole на серверах для мониторинга памяти и потоков. Одна вещь, которую мы обнаружили, заключается в том, что в течение времени, когда данные передаются пользователю, использование памяти было самым высоким. Как только форма была отображена, память значительно упала. Убедитесь, что сбор мусора установлен правильно.

+0

Что было бы подходящим для GC? Как это устроено? –

+0

Трудно дать ответ о том, что является «правильным» для коллекции, поскольку трудно установить точное значение. Мы долгое время пытались найти то, что сработало для нас. Я упрощусь здесь, но это зависит от количества запросов на приложение, количества потребляемой памяти за запрос, количества пользователей и т. Д. Это приводит к мониторингу созданных и удаленных потоков и так далее. Это было утомительное усилие, которое я не уверен, приблизил нас к решению. В итоге мы добавили больше памяти и вернули ее к рекомендуемым настройкам. ;) Удачи! – McArthey

1

Звучит как утечка памяти. Вы хотите создать кучу JVM кучи - моментальный снимок JVM-памяти. Самый простой способ сделать это - с помощью jvisualvm. Затем проанализируйте этот снимок, используя отчет об утечках в Eclipse Memory Analyzer. Marc Escher has a blog entry on this topic.

Шаги Для настройки виртуальной машины Java JMX порт для получения ColdFusion Heap Dump

  • Редактировать jvm.config и добавить к java.args: -Dcom.sun.management.jmxremote.port = 3333 -Dcom .sun.management.jmxremote.ssl = ложь -Dcom.sun.management.jmxremote.authenticate = истина
  • Copy \ ColdFusion9 \ выполнения \ JRE \ Lib \ управление \ jmxremote.access.template -> jxmremote.access
  • Редактировать jxmremote.access добавить «controlRole changeIt» в конец файла, заменив «changeIt» на ваш пароль по вашему выбору
  • В проводнике Windows> jxmremote.Доступ> Щелкните правой кнопкой мыши> Свойства> Безопасность> Расширенный
    • Владелец> Администраторы
    • Разрешения> Снимите флажок "Разрешить наследуемым ...."> Dialog Нажмите "Копировать"
    • Добавить "Администраторы" с Full Control
    • Удалить все другие Разрешение записей
    • Нажмите кнопку "OK"
  • Restart ColdFusion

Создание дампа кучи

  • на ColdFusion коробке установить JDK
  • запустить jvisualvm из jdk-install-dir/bin/jvisualvm
  • открыть соединение JMX (например, локальный: 3333)
  • на вкладку «Монитор» нажмите кнопку Heap Dump и сохранить результат, щелкнув правой кнопкой мыши по его узлу
  • взять этот файл и откройте в анализаторе памяти Eclipse, и запустить Утечки Сообщить
  • вырыть через него , используйте помощь Eclipse, чтобы понять, как оценивать

Я использовал этот подход для поиска количества утечек памяти в коде ColdFusion.

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