Tomcat 由于 EXCEPTION_ACCESS_VIOLATION 导致 JVM 崩溃
Tomcat crashes JVM due to EXCEPTION_ACCESS_VIOLATION
下班一段时间后,我的一位同事似乎决定试用我们的暂存服务器。为了使用新的数据库访问框架进行开发,他安装了一堆东西,但没有注意是否与内部开发的应用程序有任何不需要的交互。
旧的 DBA/Programmer 没有任何类型的框架来处理来自 JSP 应用程序的 SQL 调用,而是编写了一个粗略的连接 class 来访问 MS -SQL'08服务器。有问题的 class 不见了,我们没有它的源代码。
因此,当我回来工作并尝试暂存一个新开发的应用程序时,我设法使 JVM 崩溃,这是转储文件。
#
# A fatal error has been detected by the Java Runtime Environment:
#
# EXCEPTION_ACCESS_VIOLATION (0xc0000005) at pc=0x000000006f19137c, pid=692, tid=6096
#
# JRE version: Java(TM) SE Runtime Environment (7.0_75-b13) (build 1.7.0_75-b13)
# Java VM: Java HotSpot(TM) 64-Bit Server VM (24.75-b04 mixed mode windows-amd64 compressed oops)
# Problematic frame:
# V [jvm.dll+0x12137c]
#
# Core dump written. Default location: C:\Program Files\Apache Software Foundation\Tomcat 7.0\hs_err_pid692.mdmp
#
# If you would like to submit a bug report, please visit:
# http://bugreport.sun.com/bugreport/crash.jsp
#
整个转储文件位于:pastebin。com/TtgdkLer
我做了什么:
- 删除后来添加的所有内容。
- 检查所有服务器配置文件是否有异常
- 复制Tomcat文件夹+应用程序数据的最后一个备份镜像
- 全新安装 Tomcat 7 并从头开始重新配置所有内容
没有任何效果。
我确实发现在主要应用程序 web.xml 上有一个过滤器,如果我删除它,服务器不会崩溃:
<filter-mapping>
<filter-name>ConnectionFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
问题是这个特定的过滤器通过身份验证服务器路由连接。这意味着将其关闭将允许任何用户访问 Intranet 上的信息。
老实说,我别无选择。我的最后一个选择是将整个服务器的状态倒回很久以前。有什么建议么?
崩溃报告在堆栈顶部有以下方法:
com.microsoft.sqlserver.jdbc.AuthenticationJNI.SNISecGenClientContext([B[I[BI[B[I[ZLjava/lang/String;ILjava/lang/String;Ljava/lang/String;Ljava/util/logging/Logger;)I+0
编辑:原始答案已过时
好吧,我再次迁移服务器时又遇到了同样的问题,但是这次由于我更改了DLL,问题没有得到解决或根本没有改变。
我只是补充说,实际的 JAR 文件来自不同的包,这足以导致同样的错误,当我下载并安装正确的 JAR/DLL 组合时,一切都很好。
下班一段时间后,我的一位同事似乎决定试用我们的暂存服务器。为了使用新的数据库访问框架进行开发,他安装了一堆东西,但没有注意是否与内部开发的应用程序有任何不需要的交互。
旧的 DBA/Programmer 没有任何类型的框架来处理来自 JSP 应用程序的 SQL 调用,而是编写了一个粗略的连接 class 来访问 MS -SQL'08服务器。有问题的 class 不见了,我们没有它的源代码。
因此,当我回来工作并尝试暂存一个新开发的应用程序时,我设法使 JVM 崩溃,这是转储文件。
#
# A fatal error has been detected by the Java Runtime Environment:
#
# EXCEPTION_ACCESS_VIOLATION (0xc0000005) at pc=0x000000006f19137c, pid=692, tid=6096
#
# JRE version: Java(TM) SE Runtime Environment (7.0_75-b13) (build 1.7.0_75-b13)
# Java VM: Java HotSpot(TM) 64-Bit Server VM (24.75-b04 mixed mode windows-amd64 compressed oops)
# Problematic frame:
# V [jvm.dll+0x12137c]
#
# Core dump written. Default location: C:\Program Files\Apache Software Foundation\Tomcat 7.0\hs_err_pid692.mdmp
#
# If you would like to submit a bug report, please visit:
# http://bugreport.sun.com/bugreport/crash.jsp
#
整个转储文件位于:pastebin。com/TtgdkLer
我做了什么:
- 删除后来添加的所有内容。
- 检查所有服务器配置文件是否有异常
- 复制Tomcat文件夹+应用程序数据的最后一个备份镜像
- 全新安装 Tomcat 7 并从头开始重新配置所有内容
没有任何效果。
我确实发现在主要应用程序 web.xml 上有一个过滤器,如果我删除它,服务器不会崩溃:
<filter-mapping>
<filter-name>ConnectionFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
问题是这个特定的过滤器通过身份验证服务器路由连接。这意味着将其关闭将允许任何用户访问 Intranet 上的信息。
老实说,我别无选择。我的最后一个选择是将整个服务器的状态倒回很久以前。有什么建议么?
崩溃报告在堆栈顶部有以下方法:
com.microsoft.sqlserver.jdbc.AuthenticationJNI.SNISecGenClientContext([B[I[BI[B[I[ZLjava/lang/String;ILjava/lang/String;Ljava/lang/String;Ljava/util/logging/Logger;)I+0
编辑:原始答案已过时
好吧,我再次迁移服务器时又遇到了同样的问题,但是这次由于我更改了DLL,问题没有得到解决或根本没有改变。
我只是补充说,实际的 JAR 文件来自不同的包,这足以导致同样的错误,当我下载并安装正确的 JAR/DLL 组合时,一切都很好。