2013-11-20 43 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

您可以打开选项登录JVM的内存使用情况,然后监视日志文件并在permgen变得太高时发送电子邮件:

  1. 编辑catalina.sh并添加-XX:+PrintHeapAtGC-Xloggc:$CATALINA_HOME/logs/gc.logCATALINA_OPTS。有关设置Tomcat JVM optionsJVM GC logging选项的更多信息,请参阅。上面假设你已经设置了$CATALINA_HOME变量。

  2. 监视日志文件并在permgen变得太高时发送电子邮件。您可以使用像swatch这样的日志监视工具来执行此操作 - 请参阅有关configuring swatch的信息。或者您可以编写自己的脚本来监视文件,类似于this example,并调用sendmail发送电子邮件。使用这些选项中的任何一个,您都需要编写一个正则表达式来确定permgen何时超过某个阈值。