Tomcat自行关闭

2023-12-31

我在 CentOS 6.5 64 位和 OpenJDK 1.7 64 上运行 Tomcat 7.0.53。

我有几台服务器,偶尔(例如每周随机一次)Tomcat 会正常关闭自己。我已经研究这个问题几个月了,但找不到原因。唯一的模式似乎是很长一段时间没有任何事情发生,然后关闭。

  • 我已经升级到最新版本的底层工具(Tomcat、Java等)
  • 我正在使用默认内存设置运行
  • 我已在 server.xml 中禁用 SHUTDOWN
  • 我已将 MySQL 移至另一个盒子,以确保 Tomcat 是唯一重要的应用程序(服务器也运行 nginx)
  • 我已经验证我的任何代码中都没有 System.exit() 。我还没有扫描库,因为我不知道如何做到这一点。我也不指望在那里能找到任何东西。为什么图书馆会退出呢?
  • 我已启用垃圾收集日志记录。但它们看起来相当快 - 就像 0.15 秒内完成 GC

这是其中一台服务器的内存使用情况。大量可用内存。

                 total       used       free     shared    buffers     cached
    Mem:          2006        771       1234          0        176        281
    -/+ buffers/cache:        313       1692
    Swap:         2047          0       2047

以下是 Catalina.out 中的事件之一。您可以看到它启动,然后几个小时内没有任何令人兴奋的事情。然后优雅地自行关闭,就像被告知一样。

我对此进行了彻底的研究,但一直无法解决这个问题。

有人可以为我提出一个行动计划吗?

Thanks

从 Server.xml 中:

    <Server port="-1" shutdown="__SHUTDOWN__">

来自 Catalina.out:

Apr 28, 2014 5:34:50 PM org.apache.tomcat.util.digester.SetPropertiesRule begin
WARNING: [SetPropertiesRule]{Server/Service/Engine/Host/Valve} Setting property 'remoteIpProxiesHeader' to 'x-forwarded-by' did not find a matching property.
Apr 28, 2014 5:34:50 PM org.apache.coyote.AbstractProtocol init
INFO: Initializing ProtocolHandler ["http-apr-8080"]
Apr 28, 2014 5:34:50 PM org.apache.coyote.AbstractProtocol init
INFO: Initializing ProtocolHandler ["ajp-apr-8009"]
Apr 28, 2014 5:34:50 PM org.apache.catalina.startup.Catalina load
INFO: Initialization processed in 3247 ms
Apr 28, 2014 5:34:50 PM org.apache.catalina.core.StandardService startInternal
INFO: Starting service Catalina
Apr 28, 2014 5:34:50 PM org.apache.catalina.core.StandardEngine startInternal
INFO: Starting Servlet Engine: Apache Tomcat/7.0.53
Apr 28, 2014 5:34:59 PM org.apache.coyote.AbstractProtocol start
INFO: Starting ProtocolHandler ["http-apr-8080"]
Apr 28, 2014 5:34:59 PM org.apache.coyote.AbstractProtocol start
INFO: Starting ProtocolHandler ["ajp-apr-8009"]
Apr 28, 2014 5:34:59 PM org.apache.catalina.startup.Catalina start
INFO: Server startup in 8278 ms
Apr 28, 2014 5:41:53 PM org.apache.jasper.compiler.TldLocationsCache tldScanJar
INFO: At least one JAR was scanned for TLDs yet contained no TLDs. Enable debug logging for this logger for a complete list of JARs that were scanned but no TLDs were found in them. Skipping unneeded JARs during scanning can improve startup time and JSP compilation time.
Apr 28, 2014 10:32:32 PM org.apache.coyote.AbstractProtocol pause
INFO: Pausing ProtocolHandler ["http-apr-8080"]
Apr 28, 2014 10:32:32 PM org.apache.coyote.AbstractProtocol pause
INFO: Pausing ProtocolHandler ["ajp-apr-8009"]
Apr 28, 2014 10:32:32 PM org.apache.catalina.core.StandardService stopInternal
INFO: Stopping service Catalina
Apr 28, 2014 10:32:32 PM org.apache.coyote.AbstractProtocol stop
INFO: Stopping ProtocolHandler ["http-apr-8080"]
Apr 28, 2014 10:32:32 PM org.apache.coyote.AbstractProtocol stop
INFO: Stopping ProtocolHandler ["ajp-apr-8009"]
Apr 28, 2014 10:32:32 PM org.apache.coyote.AbstractProtocol destroy
INFO: Destroying ProtocolHandler ["http-apr-8080"]
Apr 28, 2014 10:32:32 PM org.apache.coyote.AbstractProtocol destroy
INFO: Destroying ProtocolHandler ["ajp-apr-8009"]
May 05, 2014 8:10:32 PM org.apache.catalina.core.AprLifecycleListener init
INFO: Loaded APR based Apache Tomcat Native library 1.1.29 using APR version 1.3.9.
May 05, 2014 8:10:32 PM org.apache.catalina.core.AprLifecycleListener init
INFO: APR capabilities: IPv6 [true], sendfile [true], accept filters [false], random [true].
May 05, 2014 8:10:32 PM org.apache.tomcat.util.digester.SetPropertiesRule begin

有东西告诉 Tomcat 关闭。

Tomcat 在“遇到麻烦”(内存不足或其他任何情况)时不会正常关闭。当内存不足时,Linux 不会正常关闭进程,而是使用kill -9 硬停止它们,这不会在 Tomcat 日志中留下任何痕迹。

  • kill -15将通过 shutdown hook 正常关闭 tomcat。 (前面的答案已经说了kill -3在这里,这只是导致线程转储。)

  • 内部 exit() 也会再次通过 shutdown 挂钩正常关闭它。

  • 它可以通过 JMX 关闭,当然还有来自 Catalina 的关闭命令。

所以,有人在某个地方告诉 Tomcat 这样做。这不是什么未知的内部“问题”。那种东西直接把tomcat干掉,也不客气的问。

您可以尝试的一件事是启用 DEBUG 进行日志记录,以查看收到的内容。如果你得到太多,你可以尝试专门查看org.apache.catalina.core.StandardContext。这很可能不会给您提供比已记录的更多信息,但它可能会告诉您一些信息。

之后,如果有动力,并且继续下去,我建议您自己构建 Tomcat,并插入一些堆栈跟踪转储。

例如,在org.apache.coyote.AbstractProtcol, 你可以加:

Exception e = new Exception("Shut down trace");
getLog().info("Shutting down protocol", e);

to the stop() method.

这将为您提供可靠的堆栈跟踪,以了解它的来源。 Tomcat 并不是真正的由随机消息组成的令人讨厌的事件风暴。关闭非常同步。因此,该堆栈跟踪将为您提供关于是谁发起聚会的可靠线索。然后你可以从那里看看这是如何发生的。

Tomcat 中有很多接口和抽象,但实际上只有很少的实现,所以它并不是难以理解的。拥有烟囱痕迹将极大地帮助确定它。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Tomcat自行关闭 的相关文章

随机推荐

  • 什么时候您更愿意声明异常而不是在 Java 中处理异常?

    我知道如果我们希望调用方法处理该异常 则可以为该方法声明异常 如果封闭方法抛出 IOException 这甚至允许我们执行诸如写入 OutputStream 之类的操作 而无需将代码包装在 try catch 块中 我的问题是 任何人都可以
  • 删除样式标签上的样式属性

    我有一个STRING with html内容 我想删除style属性上style使用 javascript 正则表达式标记 如下所示 before
  • YQL 天气结果一半时间为空

    雅虎数据有时无法获取数据 query results is null or not an object 我在 Chrome 55 0 2883 87 和 fierfox 50 1 0 上发生了这种情况 这是我正在使用的 YQL 以及回应 q
  • MongoDB:地理空间索引数组的格式不正确

    在尝试设置使用 MongoDB 上的地理空间索引时 我遇到了错误消息 指出位置数组的格式不正确 这是我的收藏 测试 id ObjectId 4f037ac176d6fdab5b00000a CorporateId XYZ12345 Plac
  • React Native WebView 应用程序在按后退按钮时不退出

    设置按下后退按钮后返回功能后 React Native WebView 应用程序不会在按后退按钮时退出 我希望当 webview 不在主页上时按后退按钮返回功能 当 webview 位于主页上时然后退出应用程序 export default
  • 在Javascript中,如何有条件地更新对象的属性?

    我见过这个帖子 https stackoverflow com questions 11704267 in javascript how to conditionally add a member to an object想知道是否有一种方
  • 更改子类java中的类变量类型

    我有一个名为 模块 的课程 public abstract class Module protected Map
  • 轨道 3 饼干

    我有一个简单的应用程序 用户可以在文本字段中输入内容以获得各种结果 我想要一个功能 如果用户输入某些内容然后关闭浏览器选项卡 那么下次他们来时 我可以向他们显示他们之前 最近的搜索 即使他们关闭整个浏览器并再次打开它 这种情况也会持续存在
  • Python-删除字符串的前两行

    我在这里搜索了许多关于删除字符串前两行的线程 但我似乎无法让它与我尝试过的每个解决方案一起使用 这是我的字符串的样子 version 1 00 6992 4 32063 9 1198 106 59 0 00064 0 99993 0 012
  • Python 快速排序运行时错误:cmp 中超出最大递归深度

    我正在编写一个程序 它将读取包含 5 163 个姓名的文本文件 文本文件可见here http pastebin com BAKTJKy6 然后我想将名称存储到一个名为 名称 的列表中 之后 我根据名称包含的字母数量对列表进行排序 较短的名
  • Java 证书客户端 SSL:无法找到请求目标的有效证书路径

    我们需要客户端身份验证才能向我们的某些 Web 服务发送 RESTful 请求 我已经通过 key 工具在本地 mac 操作系统上安装了客户端证书 pem 和密钥 这些不是自签名的 openssl pkcs12 export name my
  • mysql 统计重复项

    我有一张这样的桌子 mysql gt desc user changes Field Type Null Key Default Extra id varchar 16 NO PRI email varchar 255 YES MUL NU
  • go 中所有类型的前置函数

    我为 go 编写了一个非常小的前置函数 func prepend slice int elms int int newSlice int for elm range elms newSlice append newSlice elm for
  • 有效去除数组中的重复项

    如何从具有以下约束的数组中删除和记录重复项 运行时间最多必须为 O n log n 使用的额外内存最多必须为 O n 结果必须满足以下条件 重复项必须移动到原始数组的末尾 必须保留每个唯一元素第一次出现的顺序 例如 从此输入 int A 2
  • Android 中可扩展列表视图中的图像图标

    我想在可扩展列表视图中添加图像图标 我看过他们仅在子元素中添加的教程 是否有其他方法可以在父元素中添加图像图标 任何帮助 将不胜感激 提前致谢 您还可以在 XML 中定义自己的 groupIndicator 首先定义自己的drawable
  • 如何有效地从向量C++中删除元素

    我有一个由向量 对 V1 V2 组成的向量 称为pairV1V2 其形式如下 1 2 3 938 462 4837 gt V1 V2 3 9 13 938 0472 944 81 84 93 938 84 845 那么我需要保留以下内容 1
  • 如何在 C# 中比较两个 JSON 并忽略某些键?

    我有两个需要比较的 JSON 对象 但是我想排除某些属性 有没有一种有效的方法可以做到这一点 而无需迭代所有键 我正在使用 JSON NET 它具有 JToken DeepEquals 并且非常出色 但它不允许我排除某些键 Thanks 好
  • 如何在qt中通过QSignalMapper传递参数

    我想用Qt制作一个下载器 我在使用 QSignalMapper 时遇到问题 QNetworkReply中有信号 downloadProgress qint64 qint64 我有很多下载任务 所以我使用 QSignalMapper 来处理信
  • _CRTDBG_MAP_ALLOC 不显示文件名

    我正在尝试检测内存泄漏 并且使用 make CRTDBG MAP ALLOC 宏来定位泄漏区域 所以我定义 MACRO 如下 ifdef DEBUG define CRTDBG MAP ALLOC include
  • Tomcat自行关闭

    我在 CentOS 6 5 64 位和 OpenJDK 1 7 64 上运行 Tomcat 7 0 53 我有几台服务器 偶尔 例如每周随机一次 Tomcat 会正常关闭自己 我已经研究这个问题几个月了 但找不到原因 唯一的模式似乎是很长一