2013-11-20 47 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何時超過某個閾值。