【问题标题】:Why is Tomcat 8.5 reloading context为什么 Tomcat 8.5 重新加载上下文
【发布时间】:2017-07-08 05:06:25
【问题描述】:

似乎自从我们将 tomcat 升级到版本 8+ 后,我们就在启动时重新加载了上下文。然而,它似乎只发生在我们的开发环境中(带有 eclipse 和 tomcat 8.5 的 Windows 操作系统)。我们的生产环境(带有 tomcat 8.5 的 Linux 操作系统)没有这个问题。我会在下面发布它,但我没有从 tomcat 日志中看到任何迹象表明为什么会发生这种情况。我知道这通常是网络应用程序目录中的某些内容发生更改的行为,但是对于我的生活,我无法弄清楚它在做什么。不过一定有办法追查到。

这第一块日志是完全开始的

2017 年 2 月 18 日上午 9:53:41 org.apache.tomcat.util.digester.SetPropertiesRule 开始 警告:[SetPropertiesRule]{Server/Service/Engine/Host/Context} 将属性“源”设置为“org.eclipse.jst.jee.server:Stackoverflow-commproxy”未找到匹配的属性。 2017 年 2 月 18 日上午 9:53:41 org.apache.catalina.startup.VersionLoggerListener 日志 信息:服务器版本:Apache Tomcat/8.5.11 2017 年 2 月 18 日上午 9:53:41 org.apache.catalina.startup.VersionLoggerListener 日志 信息:服务器构建:2017 年 1 月 10 日 21:02:52 UTC 2017 年 2 月 18 日上午 9:53:41 org.apache.catalina.startup.VersionLoggerListener 日志 信息:服务器编号:8.5.11.0 2017 年 2 月 18 日上午 9:53:41 org.apache.catalina.startup.VersionLoggerListener 日志 信息:操作系统名称:Windows 10 2017 年 2 月 18 日上午 9:53:41 org.apache.catalina.startup.VersionLoggerListener 日志 信息:操作系统版本:10.0 2017 年 2 月 18 日上午 9:53:41 org.apache.catalina.startup.VersionLoggerListener 日志 信息:架构:amd64 2017 年 2 月 18 日上午 9:53:41 org.apache.catalina.startup.VersionLoggerListener 日志 信息:Java 主页:C:\Program Files\Java\jdk1.8.0_91\jre 2017 年 2 月 18 日上午 9:53:41 org.apache.catalina.startup.VersionLoggerListener 日志 信息:JVM 版本:1.8.0_91-b14 2017 年 2 月 18 日上午 9:53:41 org.apache.catalina.startup.VersionLoggerListener 日志 信息:JVM 供应商:甲骨文公司 2017 年 2 月 18 日上午 9:53:41 org.apache.catalina.startup.VersionLoggerListener 日志 信息:CATALINA_BASE:C:\CodeRepos\work\EclipseWorkspace.metadata.plugins\org.eclipse.wst.server.core\tmp0 2017 年 2 月 18 日上午 9:53:41 org.apache.catalina.startup.VersionLoggerListener 日志 信息:CATALINA_HOME:C:\tomcat\apache-tomcat-8.5.11 2017 年 2 月 18 日上午 9:53:41 org.apache.catalina.startup.VersionLoggerListener 日志 信息:命令行参数:-Dcatalina.base=C:\CodeRepos\work\EclipseWorkspace.metadata.plugins\org.eclipse.wst.server.core\tmp0 2017 年 2 月 18 日上午 9:53:41 org.apache.catalina.startup.VersionLoggerListener 日志 信息:命令行参数:-Dcatalina.home=C:\tomcat\apache-tomcat-8.5.11 2017 年 2 月 18 日上午 9:53:41 org.apache.catalina.startup.VersionLoggerListener 日志 信息:命令行参数:-Dwtp.deploy=C:\CodeRepos\work\EclipseWorkspace.metadata.plugins\org.eclipse.wst.server.core\tmp0\wtpwebapps 2017 年 2 月 18 日上午 9:53:41 org.apache.catalina.startup.VersionLoggerListener 日志 信息:命令行参数:-Djava.endorsed.dirs=C:\tomcat\apache-tomcat-8.5.11\endorsed 2017 年 2 月 18 日上午 9:53:41 org.apache.catalina.startup.VersionLoggerListener 日志 信息:命令行参数:-Dfile.encoding=Cp1252 2017 年 2 月 18 日上午 9:53:41 org.apache.catalina.core.AprLifecycleListener 生命周期事件 信息:在 java.library.path:C:\Program Files\Java\jdk1.8.0_91\bin;C:\WINDOWS\Sun\Java 上找不到基于 APR 的 Apache Tomcat Native 库,它允许在生产环境中获得最佳性能\bin;C:\WINDOWS\system32;C:\WINDOWS;C:/Program Files/Java/jre1.8.0_121/bin/server;C:/Program Files/Java/jre1.8.0_121/bin;C:/程序文件/Java/jre1.8.0_121/lib/amd64;C:\ProgramData\Oracle\Java\javapath;C:\Python27\;C:\Python27\Scripts;C:\Program Files (x86)\Intel\iCLS Client\;C:\Program Files\Intel\iCLS Client\;C:\Windows\system32;C:\Windows;C:\Windows\System32\Wbem;C:\Windows\System32\WindowsPowerShell\v1.0\; C:\Program Files\Intel\Intel(R) Management Engine Components\DAL;C:\Program Files (x86)\Intel\Intel(R) Management Engine Components\DAL;C:\Program Files\Intel\Intel(R ) 管理引擎组件\IPT;C:\Program Files (x86)\Intel\Intel(R) Management Engine Components\IPT;C:\Program Files (x86)\GtkSharp\2.12\bin;C:\Users\dever。 dnx\bin;C:\Program Files\Microsoft DNX\Dnvm\;C:\Progr am Files\Microsoft SQL Server\120\Tools\Binn\;C:\Program Files (x86)\Windows Kits\10\Windows Performance Toolkit\;c:\Program Files (x86)\Microsoft SQL Server\110\Tools\ Binn\ManagementStudio\;c:\Program Files (x86)\Microsoft SQL Server\110\Tools\Binn\;c:\Program Files\Microsoft SQL Server\110\Tools\Binn\;c:\Program Files (x86) \Microsoft SQL Server\110\DTS\Binn\;C:\Program Files (x86)\NVIDIA Corporation\PhysX\Common;C:\Program Files (x86)\Windows Live\Shared;C:\WINDOWS\system32\config \systemprofile.dnx\bin;C:\Program Files\Microsoft SQL Server\130\Tools\Binn\;C:\WINDOWS\system32;C:\WINDOWS;C:\WINDOWS\System32\Wbem;C:\WINDOWS\ System32\WindowsPowerShell\v1.0\;C:\Program Files (x86)\Microsoft Emulator Manager\1.0\;C:\Program Files\Git\cmd;C:\Program Files\nodejs\;C:\Program Files\ Emscripten\emscripten\1.35.0;C:\Program Files\Emscripten;C:\Program Files\Emscripten\clang\e1.35.0_64bit;C:\Program Files\Emscripten\node\0.12.2_64bit;C:\Program Files \Emscripten\python\2.7.5.3_64bit;C:\Program Fil es\Emscripten\java\7.45_64bit\bin;C:\Program Files\Emscripten\crunch\1.03;C:\Program Files\Emscripten\mingw\4.6.2_32bit;C:\Program Files\TortoiseSVN\bin;C:\ JavaProgramFiles\jdk1.8.0_91\bin;C:\Ruby193\bin;C:\program files\apache-maven-3.3.9\bin;c:\Program Files\MongoDB\Server\3.2\bin;C:\JavaProgramFiles \apache-ant-1.9.7\bin;C:\JavaProgramFiles\xmlbeans-1.0.3\bin;C:\Users\dever\AppData\Local\Microsoft\WindowsApps;C:\Users\dever\AppData\Roaming\ npm;C:\Program Files\eclipse\jee-neon\eclipse;;. 2017 年 2 月 18 日上午 9:53:41 org.apache.coyote.AbstractProtocol 初始化 信息:初始化 ProtocolHandler ["http-nio-8080"] 2017 年 2 月 18 日上午 9:53:41 org.apache.tomcat.util.net.NioSelectorPool getSharedSelector 信息:使用共享选择器进行 servlet 写入/读取 2017 年 2 月 18 日上午 9:53:41 org.apache.coyote.AbstractProtocol 初始化 信息:初始化 ProtocolHandler ["ajp-nio-8009"] 2017 年 2 月 18 日上午 9:53:41 org.apache.tomcat.util.net.NioSelectorPool getSharedSelector 信息:使用共享选择器进行 servlet 写入/读取 2017 年 2 月 18 日上午 9:53:41 org.apache.catalina.startup.Catalina 加载 INFO:初始化在 610 毫秒内处理 2017 年 2 月 18 日上午 9:53:41 org.apache.catalina.core.StandardService startInternal 信息:启动服务 Catalina 2017 年 2 月 18 日上午 9:53:41 org.apache.catalina.core.StandardEngine startInternal 信息:启动 Servlet 引擎:Apache Tomcat/8.5.11 2017 年 2 月 18 日上午 9:53:44 org.apache.jasper.servlet.TldScanner scanJars 信息:至少有一个 JAR 已扫描 TLD,但未包含 TLD。启用此记录器的调试日志记录以获取已扫描但未在其中找到 TLD 的 JAR 的完整列表。在扫描期间跳过不需要的 JAR 可以缩短启动时间和 JSP 编译时间。 2017 年 2 月 18 日上午 9:53:44 org.apache.catalina.core.ApplicationContext 日志 信息:在类路径上未检测到 Spring WebApplicationInitializer 类型 2017 年 2 月 18 日上午 9:53:44 org.apache.catalina.core.ApplicationContext 日志 信息:初始化 Spring 根 WebApplicationContext 2017-02-18 09:53:45.755 [localhost-startStop-1] INFO com.stackoverflow.util.common.AppConfigPostProcessor - 设置系统属性:org.jboss.logging.provider=slf4j 2017-02-18 09:53:45.757 [localhost-startStop-1] INFO com.stackoverflow.util.common.AppConfigPostProcessor - 将默认时区设置为:UTC 2017-02-18 09:53:47.990 [localhost-startStop-1] 信息 com.stackoverflow.util.concurrent.ThreadPoolTask​​Scheduler - 初始化 ExecutorService 'taskScheduler' 2017-02-18 09:53:47.997 [localhost-startStop-1] INFO com.stackoverflow.service.commproxy.LoggingServiceImpl - 日志服务:成功初始化 2017-02-18 09:53:48.011 [localhost-startStop-1] INFO com.stackoverflow.service.commproxy.DeviceServiceImpl - 设备服务:初始化 Stackoverflow 设备服务... 2017-02-18 09:53:48.314 [localhost-startStop-1] 信息 com.stackoverflow.cache.mapdb.MapDBCacheManager - 打开 StackoverflowCommProxyCacheV4 MapDB 存储。文件位置 C:\Users\dever\AppData\Local\Temp\StackoverflowCommProxyCacheV4.DeviceMetaDataCache 2017-02-18 09:53:48.314 [localhost-startStop-1] 调试 com.stackoverflow.service.commproxy.DeviceServiceImpl - 设备服务:加载本地 DeviceMetaData 缓存 2017-02-18 09:53:48.316 [taskScheduler-1] 调试 com.stackoverflow.service.commproxy.DeviceServiceImpl - 设备服务:启动设备池刷新任务 2017 年 2 月 18 日下午 5:53:48 org.apache.coyote.AbstractProtocol 开始 信息:启动协议处理程序 [http-nio-8080] 2017 年 2 月 18 日下午 5:53:48 org.apache.coyote.AbstractProtocol 开始 信息:启动 ProtocolHandler [ajp-nio-8009] 2017 年 2 月 18 日下午 5:53:48 org.apache.catalina.startup.Catalina 开始 信息:服务器在 6928 毫秒内启动 2017-02-18 09:53:49.774 [taskScheduler-1] INFO com.stackoverflow.service.commproxy.DeviceServiceImpl - 设备服务:收到来自 Stackoverflow 云服务的 15 项设备元数据列表 2017-02-18 09:53:49.775 [taskScheduler-1] 调试 com.stackoverflow.service.commproxy.DeviceServiceImpl - 设备服务:设备元数据缓存包含 15 项 2017-02-18 09:53:49.806 [taskScheduler-1] INFO com.stackoverflow.service.commproxy.DeviceServiceImpl - 设备服务:执行刷新周期。花费时间:1490 毫秒 2017 年 2 月 18 日下午 5:53:58 org.apache.catalina.core.StandardContext 重新加载 信息:重新加载名称为 [/stackoverflow-commproxy] 的上下文已开始

请注意没有错误,并且发生的任何操作都不会触及磁盘。日志记录略有例外。它确实会记录到文件中,但是使用我们这样的设置,它真的不应该触及网络应用程序目录:

log4j2.xml

    <?xml version="1.0" encoding="UTF-8"?>
<Configuration monitorInterval="180">
    <Properties>
        <!-- change the path to conference logs below to fit your system -->
        <Property name="LOG_DIR">C:\CodeRepos\logs\</Property>

以及日志文件的其余部分:

2017 年 2 月 18 日下午 5:53:58 org.apache.catalina.core.ApplicationContext 日志 信息:关闭 Spring 根 WebApplicationContext 2017-02-18 09:53:58.514 [ContainerBackgroundProcessor[StandardEngine[Catalina]]] 信息 com.stackoverflow.service.commproxy.DeviceServiceImpl - 设备服务:破坏 Stackoverflow 设备服务... 2017-02-18 09:53:58.543 [ContainerBackgroundProcessor[StandardEngine[Catalina]]] 信息 com.stackoverflow.cache.mapdb.MapDBCacheManager - 关闭 StackoverflowCommProxyCacheV4.DeviceMetaDataCache MapDB 存储 2017-02-18 09:53:58.545 [ContainerBackgroundProcessor[StandardEngine[Catalina]]] 信息 com.stackoverflow.util.concurrent.ThreadPoolTask​​Scheduler - 关闭 ExecutorService 'taskScheduler' 2017 年 2 月 18 日下午 5:53:58 org.apache.catalina.loader.WebappClassLoaderBase clearReferencesThreads 警告:Web 应用程序 [Stackoverflow-commproxy] 似乎已经启动了一个名为 [Log4j2-Log4j2Scheduled-1] 的线程,但未能停止它。这很可能造成内存泄漏。线程的堆栈跟踪: sun.misc.Unsafe.park(本机方法) java.util.concurrent.locks.LockSupport.parkNanos(LockSupport.java:215) java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject.awaitNanos(AbstractQueuedSynchronizer.java:2078) java.util.concurrent.ScheduledThreadPoolExecutor$DelayedWorkQueue.take(ScheduledThreadPoolExecutor.java:1093) java.util.concurrent.ScheduledThreadPoolExecutor$DelayedWorkQueue.take(ScheduledThreadPoolExecutor.java:809) java.util.concurrent.ThreadPoolExecutor.getTask(ThreadPoolExecutor.java:1067) java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1127) java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617) java.lang.Thread.run(Thread.java:745) 2017 年 2 月 18 日下午 5:54:00 org.apache.jasper.servlet.TldScanner scanJars 信息:至少有一个 JAR 已扫描 TLD,但未包含 TLD。启用此记录器的调试日志记录以获取已扫描但未在其中找到 TLD 的 JAR 的完整列表。在扫描期间跳过不需要的 JAR 可以缩短启动时间和 JSP 编译时间。 2017 年 2 月 18 日下午 5:54:00 org.apache.catalina.core.ApplicationContext 日志 信息:在类路径上未检测到 Spring WebApplicationInitializer 类型 2017 年 2 月 18 日下午 5:54:00 org.apache.catalina.core.ApplicationContext 日志 信息:初始化 Spring 根 WebApplicationContext 2017-02-18 17:54:01.637 [ContainerBackgroundProcessor[StandardEngine[Catalina]]] 信息 com.stackoverflow.util.common.AppConfigPostProcessor - 设置系统属性:org.jboss.logging.provider=slf4j 2017-02-18 17:54:01.639 [ContainerBackgroundProcessor[StandardEngine[Catalina]]] 信息 com.stackoverflow.util.common.AppConfigPostProcessor - 将默认时区设置为:UTC 2017-02-18 17:54:03.732 [ContainerBackgroundProcessor[StandardEngine[Catalina]]] 信息 com.stackoverflow.util.concurrent.ThreadPoolTask​​Scheduler - 初始化 ExecutorService 'taskScheduler' 2017-02-18 17:54:03.739 [ContainerBackgroundProcessor[StandardEngine[Catalina]]] 信息 com.stackoverflow.service.commproxy.LoggingServiceImpl - 日志服务:成功初始化 2017-02-18 17:54:03.751 [ContainerBackgroundProcessor[StandardEngine[Catalina]]] 信息 com.stackoverflow.service.commproxy.DeviceServiceImpl - 设备服务:初始化 Stackoverflow 设备服务... 2017-02-18 17:54:04.024 [ContainerBackgroundProcessor[StandardEngine[Catalina]]] 信息 com.stackoverflow.cache.mapdb.MapDBCacheManager - 打开 StackoverflowCommProxyCacheV4 MapDB 存储。文件位置 C:\Users\dever\AppData\Local\Temp\StackoverflowCommProxyCacheV4.DeviceMetaDataCache 2017-02-18 17:54:04.024 [ContainerBackgroundProcessor[StandardEngine[Catalina]]] 调试 com.stackoverflow.service.commproxy.DeviceServiceImpl - 设备服务:加载本地 DeviceMetaData 缓存 2017-02-18 17:54:04.025 [taskScheduler-1] 调试 com.stackoverflow.service.commproxy.DeviceServiceImpl - 设备服务:启动设备池刷新任务 2017 年 2 月 18 日下午 5:54:04 org.apache.catalina.core.StandardContext 重新加载 信息:使用名称 [/Stackoverflow-commproxy] 重新加载上下文已完成 2017-02-18 17:54:04.987 [taskScheduler-1] INFO com.stackoverflow.service.commproxy.DeviceServiceImpl - 设备服务:收到来自 Stackoverflow 云服务的 15 项设备元数据列表 2017-02-18 17:54:04.987 [taskScheduler-1] 调试 com.stackoverflow.service.commproxy.DeviceServiceImpl - 设备服务:设备元数据缓存包含 15 项 2017-02-18 17:54:05.020 [taskScheduler-1] INFO com.stackoverflow.service.commproxy.DeviceServiceImpl - 设备服务:执行刷新周期。花费时间:995

我们可以看到有关 log4j 启​​动但无法停止的某个线程的错误,但除了没有迹象表明导致上下文重新加载的原因之外,有关 log4j 的错误只是由于重新加载而发生。

如何追踪上下文重新加载的原因。我们有几个项目因这个问题而受苦,有些项目似乎比特定的流程或类更具全球性。

没有收到任何答案,所以我只想重申一个事实,即我真的在寻找解决此问题的下一步?要查看的其他日志或找出触发上下文重新加载的某种方式

【问题讨论】:

  • 仅供参考,使用我们的 war 文件运行 tomcat 也不会产生问题
  • 我知道这不是很简单的建议,但仍然:您始终可以从源代码构建 Tomcat 并在调试器下启动它,在调试器中您可以在各种日志消息上放置断点并从那里追溯原因.
  • 你应该将tomcat内部日志级别设置为ALL,这样你应该能够看到哪个资源导致了重新加载。见tomcat.apache.org/tomcat-8.5-doc/logging.html

标签: java tomcat8


【解决方案1】:

您可以尝试以下设置:

  1. 从 Eclipse 服务器视图打开您的服务器配置
    • 然后确保在此编辑器的服务器选项部分中“默认情况下自动重新加载模块”未选中
    • 还要确保在编辑器发布部分中选择“从不自动发布”
  2. 在 Eclipse 服务器视图中打开服务器的上下文菜单
    • 选择“添加和删除...”
    • 在对话框中确保“如果服务器已启动,立即发布更改” 未选中并完成(您可能还必须先删除所有 web 应用程序,然后在另一个步骤中再次添加它们)李>

【讨论】:

    【解决方案2】:

    从目前的信息很难判断,所以我只能提供一些建议来帮助你:

    • 检查conf/context.xml,你可能会看到你的watchedResources是否改变了。

    <!--Default set of monitored resources. If one of these changes, the -->
    <!--  web application will be reload.-->
    <WatchedResource>WEB-INF/web.xml</WatchedResource>
    <WatchedResource>${catalina.base}/conf/web.xml</WatchedResource>
    • 您可以将context.xml 中的标签指定为&lt;Context reloadable="false"&gt; 以尝试阻止此问题。
    • 更多日志记录:localhost.date.log、host-manager.date.log
    • 来自this thread,它说它可能与 Eclipse 有关,并建议检查 Eclipse 中的 jar 与已安装的 tomcat 使用的 jar:

      当一个 jar(在 Eclispe 中)有一个未来的时间戳,或者在 Tomcat 启动后加载时,有时会出现问题,这会导致 Tomcat 重新加载上下文。

    • 实现您的 ServletContextListener 并检查 ServleConextEvent 以查找有关上下文前状态的信息。

    【讨论】:

      猜你喜欢
      • 2014-07-09
      • 2021-09-12
      • 1970-01-01
      • 2021-12-30
      • 2023-04-10
      • 1970-01-01
      • 1970-01-01
      • 2018-11-18
      • 1970-01-01
      相关资源
      最近更新 更多