EXCEPTION_ACCESS_VIOLATION Tomcat 9 在 JVM 之外

EXCEPTION_ACCESS_VIOLATION Tomcat 9 outside JVM

我正在编写一个消息传递应用程序作为我 12 年级的期末项目,但我有一个错误,我什至不知道如何处理。我一项一项地禁用并重新启用 Web 应用程序的功能以查看错误何时发生,并且我观察到当我尝试引入一个用户的活动对话时,我的服务器崩溃了。这不会经常发生,它似乎是随机发生的。这是服务器的错误消息:

#
# A fatal error has been detected by the Java Runtime Environment:
#
#  EXCEPTION_ACCESS_VIOLATION (0xc0000005) at pc=0x000000007034537d, pid=13536, tid=9944
#
# JRE version: Java(TM) SE Runtime Environment 18.9 (11.0.10+8) (build 11.0.10+8-LTS-162)
# Java VM: Java HotSpot(TM) 64-Bit Server VM 18.9 (11.0.10+8-LTS-162, mixed mode, tiered, compressed oops, g1 gc, windows-amd64)
# Problematic frame:
SELECT * FROM conversations WHERE id1 = '1' OR id2 = '1' ORDER BY lastUpdate DESC LIMIT 9 OFFSET 0;# 
CSELECT * FROM accounts WHERE id = 16;
  [sqlite-3.30.1-03ac4057-b812-49a1-9a10-f02ba1c22986-sqlitejdbc.dll+0x537d]
#
# No core dump will be written. Minidumps are not enabled by default on client versions of Windows
#
# An error report file with more information is saved as:
# C:\Users\paRa\AppData\Local\Temp\hs_err_pid13536.log
#
# If you would like to submit a bug report, please visit:
#   https://bugreport.java.com/bugreport/crash.jsp
# The crash happened outside the Java Virtual Machine in native code.
# See problematic frame for where to report the bug.
#

从我在其他帖子上看到的情况来看,此错误消息应该指向错误所在的位置,在我的情况下,如果我转到执行那些 SQL 查询的特定行,我没有错误。

需要注意的是,当我在activeConversations函数的API处打断点时,服务器从来没有崩溃过,所以我想这与处理了多少信息。但是,由于我的数据库中没有那么多信息,所以目前传输的信息不多。

访问冲突意味着本机代码(在本例中是在 SQLite 中)正在尝试访问它不允许访问的内存,这通常表示该本机库中存在 错误 (或在它所依赖的另一个本机组件中)。不太可能 - 尽管并非不可能 - 问题出在您自己的代码中。

第一步,尝试看看使用更新版本的 SQLite 是否可以解决问题。如果这不能解决问题,请尝试减少重现问题所需的代码并将其报告给作者或 SQLite 或您正在使用的 SQLite JDBC 驱动程序。

最可能的解释(除 sqlite 中的错误外)是 JVM 运行 具有大量线程的网络服务器,但 sqlite 配置使用单线程模式,因此导致内存损坏。

检查您是否starting/configuring 至少具有多线程模式的 sqlite。

https://sqlite.org/threadsafe.html

好的,所以我想提一下@AlBlue 消息对解决我的问题很有帮助。正如他所说,我的数据库(SQLite)同时处理多个请求,因此崩溃了。由于不知道怎么配置sqlite多线程,所以用了jquery中的一个deffered对象,一个接一个地做了一个函数运行。您可以通过单击此 link 查看我使用的内容:Jquery Deffered Function(顺便说一句,站点未受保护,所以请小心,我还将 post 下面的代码以防你们中的某些人不想访问网站:

var functionOne = function() {

    var r = $.Deferred();

    // Do your whiz bang jQuery stuff here
    console.log('Function One');

    return r;

};

var functionTwo = function() {

    // Do your whiz bang jQuery stuff here
    console.log('Function Two');

};

// Now call the functions one after the other using the done method
functionOne().done( functionTwo() );

再次感谢大家的解答!我是这个平台的新用户,我不知道这个程序是如何工作的。由于我的答案是解决我的问题,而不是错误本身,那么我应该给@AlBlue正确的答案吗?一旦有人发表评论,我会更新答案。我要给予适当的信任!

编辑:我阅读了按钮的工具提示 =))