Jetty(Java 中的 HTTP Servlet 服务器)意外关闭

Jetty(Java 中的 HTTP Servlet 服务器)意外关闭

我的服务器上部署了一个 Jetty 应用程序,但不断终止,原因不明。如能提供任何帮助以解决此问题,我将不胜感激。

细节:

OS:

  Slackware Linux 13.1
  Linux 2.6.32.16 running as Xen guest OS

Java info:

  java version "1.6.0_20"
  Java(TM) SE Runtime Environment (build 1.6.0_20-b02)
  Java HotSpot(TM) Client VM (build 16.3-b01, mixed mode, sharing)

nginx 0.7.67 config (only pertinent items):

    location /app {
      proxy_pass              http://localhost:50013;
      proxy_set_header        X-Real-IP $remote_addr;
      proxy_set_header        X-Forwarded-For $proxy_add_x_forwarded_for;
      proxy_set_header        Host $http_host;
    }

Jetty 应用程序通过 daemontools 在包含以下内容的运行文件中启动:

#!/bin/sh
cd /path/to/app
exec setuidgid userXYZ /usr/lib/java/bin/java -server -verbose -jar ./app.jar

日志中没有证据表明它为何偶尔关闭(之后 daemontools 会再次启动它)。

显然,当使用内存会话时,这并不理想,因为用户的会话会终止。

因此,我使用 strace 运行了该应用程序,没有使用 daemontools,输出可以在这里找到:

http://pastebin.com/ZKCMWVQM

谢谢戴尔

答案1

首先,您的系统上是否有一个名为“core”的文件?这可能是 Jetty 崩溃时生成的。

以下是一些可能性:

您的 JVM 可能由于频繁的垃圾收集而出现故障。您可以使用 VisualVM 等工具对此进行测试。如果该 GUI 不可用,则可以使用 JVM 开关将 GC 统计信息打印到日志文件中。

您的 JVM 可能已耗尽堆空间。GC 分析也会揭示这种可能性。如果增加堆大小会发生什么?

我的理解是,你不能真正地像调整 J2EE 服务器那样调整 Jetty,所以这可能没问题。

最后一种可能性是你的应用程序出了问题。你可以使用以下教程来调试在 Jetty 上运行的应用程序:http://sujitpal.sys-con.com/node/508048/mobile

祝你好运!

相关内容