有时Java Web应用程序挂起

时间:2010-05-14 08:06:52

标签: java

当用户请求网页,服务器的CPU和内存使用情况正常时,网络应用程序偶尔会挂起约30秒,而jstack会显示:

"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文件有关,如何找到根本原因?感谢。

4 个答案:

答案 0 :(得分:2)

如果网页挂起,似乎Java中的垃圾收集器已进入场景。尝试一些JVM选项,例如here或更完整的here

我将从并行垃圾收集器开始,通过

启用它
-XX:-UseParallelGC

如果问题与您的JSP有关,那么原因是每次使用JSP都必须首次编译它。如果你有非常复杂的JSP(可能包含其他几个JSP),这可能需要一些时间。

答案 1 :(得分:0)

答案 2 :(得分:0)

你需要找到时间过去的地方,因为这对解决它很重要。

一个例子可能是需要超时的负DNS查找。另一个可能是文件系统中的锁定文件。

如果您使用Sun Java 6,那么请考虑在JDK中使用jvisualvm附加到正在运行的进程,并使用分析器来确定花费的时间。如果jvisualvm不是一个选项,那么考虑在试用模式下使用商业分析器来获取此信息。

答案 3 :(得分:0)

同意丹尼尔。这听起来像垃圾收集器运行。除了他的建议,看看-Xms和-Xmx。