【问题标题】:Why is my Tomcat server restarting and what is org.apache.catalina.core.AprLifecycleListener?为什么我的 Tomcat 服务器重新启动,什么是 org.apache.catalina.core.AprLifecycleListener?
【发布时间】:2009-07-24 12:16:25
【问题描述】:

我试图弄清楚为什么我的网络应用程序(我没有编写它,但我应该调试它)一直导致 Tomcat 网络服务器重新启动。在服务器重新启动之前,我在日志中看到的只是:

Jul 24, 2009 7:52:15 AM org.apache.catalina.core.AprLifecycleListener lifecycleEvent
INFO: The Apache Portable Runtime which allows optimal performance in production environments was not found on the java.library.path: /usr/local/jdk1.5.0_09/jre/lib/i386/server:/usr/local/jdk1.5.0_09/jre/lib/i386:/usr/local/jdk1.5.0_09/jre/../lib/i386
Jul 24, 2009 7:52:15 AM org.apache.coyote.http11.Http11BaseProtocol init

我实际上可以对其他文件组执行相同的处理并且效果很好,但是执行此特定组会导致服务器重新启动。大多数情况下,我希望有人能告诉我这是否只是超时,或者是否应该有其他日志文件告诉我它为什么会死掉。如果它是一个超时,如果有办法增加它。

更新:我尝试使用bin/catalina.sh run 启动服务器,它将输出放到标准输出而不是 catalina.out,我得到的不是上面的而是我的应用程序的进度,然后“被杀”。

顺便说一句,我不知道是什么在重新启动它,但是当我尝试使用 bin/catalina.sh run 重新启动服务器时,我得到了一个 BindException,所以 something 重新启动了它。

更新 2:它使用的是 Tomcat 5.5 和 Java 5。我安装了 Tomcat 6 并将其设置为使用 Java 6,同样的事情正在发生。另外,如果我做一个“回声$?”在“Killed”之后,它给了我“137”,这可能表明托管公司出于某种原因将其关闭。

【问题讨论】:

  • 如果是我的应用杀死了它,那就是编程问题。
  • 顺便说一句,由于答案是“我的托管公司是混蛋”而不是编程问题,请随时投票结束此问题。我投票“过于本地化”。

标签: java tomcat


【解决方案1】:

AprLifecycleListener 的职责是初始化 Apache Portable Runtime,见 http://tomcat.apache.org/tomcat-6.0-doc/apr.html

你能发布关闭的日志条目吗(你有吗,或者上面就是你所看到的?)?

顺便说一句,您是说 tomcat 重新启动,标准的 shell 脚本只启动一次 tomcat,它们只是在 tomcat 退出时退出。您是否有任何类型的包装软件(例如 http://wrapper.tanukisoftware.org/)可能会重新启动您的服务器?

【讨论】:

  • 没有任何包装器 - 我从 bin/startup.sh 开始。在该 AprLifecycleListener 条目之前,日志中没有任何内容。
  • startup.sh 不会在 JVM 退出时重启 tomcat。您确定要完全重启吗?
  • 不,我只知道我正在做的事情停止了,catalina.out 文件显示了一堆以该 AprLifecycleListener 消息开头的启动消息。
  • 几点建议:首先,检查JVM的PID是否真的在你所做的前后发生了变化。尝试通过 JMX 与 jconsole 连接,看看线程在做什么。提高应用程序和 tomcat 的日志级别。检查 tomcat 的管理器应用程序 (/manager/html) 以了解您的 webapp 的状态。
【解决方案2】:

我知道这很糟糕,但您的应用可能会以某种方式导致 System.exit() 被调用?

【讨论】:

  • 我见过不止一次。
  • 有一个退出的调用,但它在一个独立的测试 main() 中,并且它前面有一个 LOG.error - System.exit 是否可能会导致它在LOG.error 被写入,还是刷新缓冲区?
【解决方案3】:

没关系 - 事实证明托管公司正在杀死我的进程(kill -9 不少于),因为它占用了过多的 CPU 时间。现在我必须弄清楚如何在不使用 90% 的 CPU 超过 10 分钟的情况下完成这个非常耗时的任务——我尝试了“nicing”Tomcat,但没有帮助,所以我可能不得不添加一个“sleep( 1000)”在处理循环之类的。

【讨论】:

    【解决方案4】:

    我相信你只会在服务器第一次启动时看到 APR 消息。

    部署在 Tomcat 中的应用程序不应具有使整个服务器停止并重新启动的能力——这没有多大意义。可以做某些事情来重新加载 webapp 自身(例如更改 web.xml,或从 Tomcat 管理器中点击 Reload),但已部署的应用程序所做的任何事情都不应该能够停止/启动整个服务器。

    您确定没有外部停止和启动服务器吗?某个地方的 shell 脚本或 cron 作业?

    【讨论】:

    • 不,当我在应用程序中做这件事时重新启动,如果我不这样做则不重新启动,这是非常一致的。
    • crons 被写入重启 tomcat
    【解决方案5】:

    取消部署 webapp,看看 Tomcat 是否会在没有它的情况下启动。我怀疑 Tomcat 安装错误。

    【讨论】:

    • Tomcat 会启动并保持运行,除非我在这组特定的文件上尝试这一特定的事情。如果我在其他文件上尝试同样的事情,它就可以了。我真的希望有人能告诉我如何找出我的应用出了什么问题。
    • 我能想到的唯一让 Tomcat 宕机的是 System.exit()。尝试在 System.exit() 上设置方法断点 - 这要求您可以使用调试器附加到 Tomcat。
    • 你有这个应用程序的完整源码吗?
    • 我有该应用的源代码。对 System.exit 有一个调用,但仅在独立的 main 中调用。
    • 好的。在这个特定阶段,我认为您应该重新安装 Tomcat 以确保它是一个绝对原始且功能正常的安装。如果仍然存在,请考虑使用 Jetty 或 JBoss 进行测试。两者都具有出色的 IDE 集成。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-07-16
    • 1970-01-01
    • 2014-07-17
    • 2021-05-03
    • 2015-05-15
    • 1970-01-01
    相关资源
    最近更新 更多