【发布时间】: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.ThreadPoolTaskScheduler - 初始化 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.ThreadPoolTaskScheduler - 关闭 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.ThreadPoolTaskScheduler - 初始化 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