gpt4 book ai didi

Java应用程序在eclipse中运行,随机 "fatal errors"

转载 作者:行者123 更新时间:2023-12-01 12:29:30 24 4
gpt4 key购买 nike

我编写了一个简短的应用程序,可将文件从原始数据转换为 XML (ECG)。我有大约 350000 个文件需要转换,转换本身是通过我从 ECG 设备制造商那里获得的库完成的。为了利用机器中的多个处理器和内核来进行转换,我编写了一个“包装应用程序”,它创建了一个线程池,然后用于在单独的线程中进行转换。它工作得有点好,但不幸的是我确实遇到了随机错误,导致整个应用程序停止(过去 3-4 天已经转换了 85k 个文件,我遇到了其中的四个错误):

A fatal error has been detected by the Java Runtime Environment:

EXCEPTION_ACCESS_VIOLATION (0xc0000005) at pc=0x71160a6c, pid=1468, tid=1396

JRE version: Java(TM) SE Runtime Environment (8.0_20-b26) (build 1.8.0_20-b26)
Java VM: Java HotSpot(TM) Client VM (25.20-b23 mixed mode windows-x86 )
Problematic frame:
C [msvcr100.dll+0x10a6c]

我怀疑是我正在使用的库导致了这些问题,所以我认为我无法做那么多来修复它。如果发生该错误,我会运行该程序并让它从崩溃之前停止的地方开始。现在我必须手动执行此操作,但希望有某种方法可以让 Eclipse 重新启动程序(使用应该启动的文件名参数)。有谁知道是否有办法做到这一点?

谢谢!

最佳答案

尚不完全清楚,但我认为您是说您有一个第 3 方 Java 库(带有 native 代码组件),您正在使用多个线程在一个 JVM 中运行。

如果是这样,我怀疑问题在于第 3 方应用程序的 native 部分没有正确的多线程,而是崩溃的根本原因。 (我不希望你想追查问题的原因......)

不要使用一个带有多个转换器线程的 JVM,而是使用多个 JVM,每个 JVM 带有一个转换器线程。您可以通过静态划分工作或通过某种形式的排队机制将转换分散到 JVM 中。

或者...您可以修改现有的包装器,以便线程使用 ProcessBuilder 在单独的 JVM 中启动转换器。如果转换器 JVM 崩溃,启动它的包装器线程可能会再次启动它。或者,它可以只记录失败的转换并继续进行下一个转换。 (重试时需要小心一点,以防您正在转换的文件的某些问题触发了 JVM 崩溃。)

<小时/>

郑重声明,我不知道现有的“现成”解决方案。

关于Java应用程序在eclipse中运行,随机 "fatal errors",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26053192/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com