2009-09-22 4 views
2

У меня есть многочисленные приложения на основе Spring Framework, которые работают на сервере Tomcat 5.5. Некоторые из них имеют свои собственные экземпляры, некоторые используют сервер с другими приложениями. Единственное, что у них общего есть, это то, что они требуют огромного объема памяти, больше, чем я думаю, что они должны действительно требовать. Существуют ли какие-либо инструменты для профилирования серверов Tomcat?Spring ApplicationContext занимает гротескные объемы памяти

Для дальнейшего уточнения, они запускаются на Ubuntu 9.04, полностью исправлены, с доступом к 3 ГБ памяти (около половины из которых она фактически занимает).

+0

Для дальнейшей разработки, они работают на Ubuntu 9.04, полностью исправленный, с доступом к 3 ГБ памяти (около половины из которых он фактически занимает). –

+0

добавил свой комментарий к актуальному вопросу;) – hhafez

ответ

1

Посмотрите на JConsole. Tomcat сам по себе предоставляет много информации через JMX.

Тем не менее, 1,5 ГБ для заявления может быть не таким гротескным. В зависимости от применения, конечно - если это "Hello World", то у вас есть проблемы :-)

+0

Основное приложение, о котором идет речь, распространяется по 6 файлам applicationContext - *. Xml с общим количеством около 110 бобов, причем 85% из них являются одиночными. Те, которые не являются специальными шаблонами прототипов объектов модели, которые динамически выбираются через пользовательский интерфейс. Самые большие объекты, которые * должны * (не подтвердили это с помощью профилировщика), занимают пространство, это Hibernate SessionFactory и Hibernate Validator, остальные - довольно тонкие объекты. –

+0

Одна из моих основных проблем заключается в том, что приложение занимает 3 минуты, чтобы начать производство, и когда мы проводим техническое обслуживание системы, мы буквально теряем деньги каждую минуту, когда система не работает. Tomcat занимает много времени, чтобы начать и выделить всю эту память. Есть ли способ, которым приложение может просто захватить один большой кусок прямо при запуске? –

+0

Я очень сомневаюсь, что 3-минутное время запуска вызвано распределением памяти; это гораздо более вероятно вызвано пулом DB + SessionFactory (особенно на большой схеме с большим количеством сопоставлений) + любые другие ресурсы и/или интенсивные вычисления, которые вы можете инициализировать во время запуска. Spring и Tomcat также добавляют некоторые накладные расходы, но они должны быть довольно небольшими по сравнению с остальными. Тем не менее, вам действительно нужно профилировать это, а не гадать. Как только вы знаете, что занимает больше всего времени/большая часть памяти, должно быть проще выяснить причину. – ChssPly76

1

Там изрядные несколько Java профилирующие инструментов:

Вам просто нужно приложить профилировщика к JVM при запуске.

Вы также могли бы взглянуть на Ламба зонд, но это больше для мониторинга:

http://www.lambdaprobe.org/d/index.htm

Также обратите внимание на:

Open Source Java Profilers

+0

Большое спасибо за ваш ответ, это очень ценится. –

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