2010-05-14 78 views
1

的Web應用程序偶爾會掛起約30秒,當用戶請求一個網頁,服務器的CPU和內存使用情況是好的,和jstack顯示:有時Java的Web應用程序掛

"http-9999-3" daemon prio=6 tid=0x552f3400 nid=0xf40 runnable [0x578fc000] 
    java.lang.Thread.State: RUNNABLE 
    at org.eclipse.jdt.internal.compiler.parser.Parser.getTypeReference(Parser.java:8354) 
    at org.eclipse.jdt.internal.compiler.parser.Parser.consumeClassHeaderExtends(Parser.java:2125) 
    at org.eclipse.jdt.internal.compiler.parser.Parser.consumeRule(Parser.java:5107) 
    at org.eclipse.jdt.internal.compiler.parser.Parser.parse(Parser.java:9020) 
    at org.eclipse.jdt.internal.compiler.parser.Parser.parse(Parser.java:9251) 
    at org.eclipse.jdt.internal.compiler.parser.Parser.parse(Parser.java:9208) 
    at org.eclipse.jdt.internal.compiler.parser.Parser.dietParse(Parser.java:7864) 
    at org.eclipse.jdt.internal.compiler.Compiler.internalBeginToCompile(Compiler.java:587) 
    at org.eclipse.jdt.internal.compiler.Compiler.beginToCompile(Compiler.java:357) 
    at org.eclipse.jdt.internal.compiler.Compiler.compile(Compiler.java:371) 
    at org.apache.jasper.compiler.JDTCompiler.generateClass(JDTCompiler.java:413) 
    at org.apache.jasper.compiler.Compiler.compile(Compiler.java:317) 
    at org.apache.jasper.compiler.Compiler.compile(Compiler.java:295) 
    at org.apache.jasper.compiler.Compiler.compile(Compiler.java:282) 
    at org.apache.jasper.JspCompilationContext.compile(JspCompilationContext.java:586) 
    at org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:317) 
    - locked <0x10a75fc0> (a org.apache.jasper.servlet.JspServletWrapper) 
    at org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:342) 
    at org.apache.jasper.servlet.JspServlet.service(JspServlet.java:267) 
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:717) 
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:290) 
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206) 
    at org.apache.catalina.core.ApplicationDispatcher.invoke(ApplicationDispatcher.java:630) 
    at org.apache.catalina.core.ApplicationDispatcher.doInclude(ApplicationDispatcher.java:535) 
    at org.apache.catalina.core.ApplicationDispatcher.include(ApplicationDispatcher.java:472) 
    ...... 

似乎它與相關一些jsp文件,如何找到根本原因?謝謝。

回答

2

如果網頁掛起,它看起來像Java中的垃圾收集器已進入現場。嘗試一些JVM選項,如發現的一個here或更多完成here

我會用

-XX:-UseParallelGC 

問題是否真的與你的JSP比的理由這樣做使之開始與平行垃圾收集器是每個JSP有被編譯,第一次是用過的。如果您有非常複雜的JSP(可能包含其他幾個JSP),則可能需要一些時間。

0

你需要找到那個時間去,因爲這對解決它很重要。

一個示例可能是需要超時的負面DNS查找。另一個可能是文件系統中的鎖定文件。

如果您使用Sun Java 6,那麼請考慮在JDK中使用jvisualvm附加到正在運行的進程並使用分析器來確定時間耗用的位置。如果jvisualvm不是一個選項,那麼可以考慮在試用模式下使用商業分析器來獲取這些信息。

0

同意丹尼爾。這聽起來像垃圾收集器正在運行。除了他的建議,看看-Xms和-Xmx。