Java 更新JDK后是否需要重新启动Tomcat?

Java 更新JDK后是否需要重新启动Tomcat?,java,tomcat,Java,Tomcat,如果Tomcat以JAVA_主页启动,则: /usr/lib/jvm/jre 这本身就是一个符号链接,类似于: /usr/lib/jvm/java-1.7.0-1.7.0.80.x86_64/jre 然后在Tomcat运行时更新Java,以: /usr/lib/jvm/java-1.7.0-1.7.0.95.x86_64/jre 由于前面的符号链接现在指向文件系统上的新Java位置,更新后是否需要重新启动Tomcat 我相信我已经看到过与类加载相关的没有重启的问题,但我正在寻找最佳实践、说

如果Tomcat以JAVA_主页启动,则:

/usr/lib/jvm/jre
这本身就是一个符号链接,类似于:

/usr/lib/jvm/java-1.7.0-1.7.0.80.x86_64/jre
然后在Tomcat运行时更新Java,以:

/usr/lib/jvm/java-1.7.0-1.7.0.95.x86_64/jre
由于前面的符号链接现在指向文件系统上的新Java位置,更新后是否需要重新启动Tomcat

我相信我已经看到过与类加载相关的没有重启的问题,但我正在寻找最佳实践、说明或指导方针的参考资料,以支持或反对重启的需要。我的谷歌fu让我无法找到一个明确的答案

于2106年3月30日增补: 我们刚刚在Jenkins服务器上看到了这一点,在JVM更新为运行到java-1.7.0-oracle-1.7.0.99.x86_64的Tomcat之后。堆栈跟踪以以下内容结束:

Caused by: java.io.FileNotFoundException: /usr/lib/jvm/java-1.7.0-oracle-1.7.0.95.x86_64/jre/lib/ext/dnsns.jar
    at sun.misc.URLClassPath$JarLoader.getJarFile(URLClassPath.java:726)
    at sun.misc.URLClassPath$JarLoader.access$600(URLClassPath.java:591)
    at sun.misc.URLClassPath$JarLoader$1.run(URLClassPath.java:673)
    at sun.misc.URLClassPath$JarLoader$1.run(URLClassPath.java:666)
    at java.security.AccessController.doPrivileged(Native Method)
    at sun.misc.URLClassPath$JarLoader.ensureOpen(URLClassPath.java:665)
    at sun.misc.URLClassPath$JarLoader.getResource(URLClassPath.java:836)

一般来说,升级JVM后不必重新启动JVM进程。然而,我至少遇到过一个案例,一个JVM升级的生产服务器在大约24小时内开始出现问题。它突然在磁盘上找不到某些资源

为了安全起见,如果您要升级JVM,我会安排跳出您的Tomcat实例


至于符号链接,这应该不是一个问题。如果并排安装了两个(或更多)JVM,则安装新版本和更改符号链接不会对正在运行的服务器产生任何影响。在我的例子中,我通过操作系统的包管理器升级了JVM,实际上用一个新的包管理器替换了旧的包管理器。

tomcat的文件句柄将指向它所使用的任何java文件的早期版本。除非tomcat自己检查相关文件是否在背后发生了这样的更改,否则它将继续使用那些“过时”的文件指针,直到重新启动。在打开JDK升级后,我与Jenkins面临同样的问题。重新启动后,问题得到解决。