2013-11-20 4 views
1

Есть ли способ/способ контролировать использование памяти tomcat, то есть permgen, чтобы избежать проблем, как показано ниже. Да, мы можем увеличить память и обрезать GC, но все же некоторый мониторинг будет приятным. Также было бы желательно отправить предупреждающие сообщения, когда будет достигнуто некоторое критическое потребление памяти.Мониторинг tomcat permgen

java.lang.OutOfMemoryError: PermGen space 
    at java.lang.ClassLoader.defineClass1(Native Method) 
    at java.lang.ClassLoader.defineClassCond(ClassLoader.java:632) 
    at java.lang.ClassLoader.defineClass(ClassLoader.java:616) 
    at java.security.SecureClassLoader.defineClass(SecureClassLoader.java:141) 
    at org.apache.catalina.loader.WebappClassLoader.findClassInternal(WebappClassLoader.java:1815) 
    at org.apache.catalina.loader.WebappClassLoader.findClass(WebappClassLoader.java:872) 
    at org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1325) 
    at org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1204) 
    at org.apache.catalina.startup.WebAnnotationSet.loadApplicationServletAnnotations(WebAnnotationSet.java:108) 
    at org.apache.catalina.startup.WebAnnotationSet.loadApplicationAnnotations(WebAnnotationSet.java:58) 
    at org.apache.catalina.startup.ContextConfig.applicationAnnotationsConfig(ContextConfig.java:297) 
    at org.apache.catalina.startup.ContextConfig.start(ContextConfig.java:1064) 
    at org.apache.catalina.startup.ContextConfig.lifecycleEvent(ContextConfig.java:261) 
    at org.apache.catalina.util.LifecycleSupport.fireLifecycleEvent(LifecycleSupport.java:120) 
    at org.apache.catalina.core.StandardContext.start(StandardContext.java:4238) 
    at org.apache.catalina.core.StandardContext.reload(StandardContext.java:3083) 
    at org.apache.catalina.loader.WebappLoader.backgroundProcess(WebappLoader.java:404) 
    at org.apache.catalina.core.ContainerBase.backgroundProcess(ContainerBase.java:1279) 
    at org.apache.catalina.core.ContainerBase$ContainerBackgroundProcessor.processChildren(ContainerBase.java:1571) 
    at org.apache.catalina.core.ContainerBase$ContainerBackgroundProcessor.processChildren(ContainerBase.java:1580) 
    at org.apache.catalina.core.ContainerBase$ContainerBackgroundProcessor.processChildren(ContainerBase.java:1580) 
    at org.apache.catalina.core.ContainerBase$ContainerBackgroundProcessor.run(ContainerBase.java:1560) 
    at java.lang.Thread.run(Thread.java:662) 

ответ

1

можно использовать одну из этих систем мониторинга

VisualVM - http://visualvm.java.net/

или

Jconsole - http://docs.oracle.com/javase/1.5.0/docs/guide/management/jconsole.html

+0

Обновленный вопрос, можно ли отправлять предупреждающие сообщения? –

+0

Мы используем этот продукт для визуального мониторинга и анализа в реальном времени потребления системных ресурсов. Это инструменты для разработчиков. Насколько мне известно, эти программы не могут отправить уведомление. Если вам нужно контролировать сервер и отправлять почту, лучше использовать стандартный системный мониторинг: zabbix, nagios. – Mark

1

Можно включить параметры для входа использования памяти виртуальной машины Java, то отслеживать файл журнала и отправлять электронное письмо при слишком высоком переходе:

  1. Редактировать catalina.sh и добавить -XX:+PrintHeapAtGC и -Xloggc:$CATALINA_HOME/logs/gc.log к CATALINA_OPTS. См. Дополнительную информацию об установке Tomcat JVM options и по телефонам JVM GC logging. Вышеизложенное предполагает, что вы уже установили переменную $CATALINA_HOME.

  2. Контролируйте файл журнала и отправляйте электронное письмо, когда permgen становится слишком высоким. Вы можете использовать инструмент мониторинга журналов, например swatch, для этого - см. Информацию на configuring swatch. Или вы можете написать собственный скрипт для мониторинга файла, аналогичный this example, и вызвать sendmail для отправки электронной почты. С помощью любого из этих параметров вам нужно будет написать регулярное выражение, чтобы определить, когда переменная превышает порог.

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