1

我有两个 Java 程序计划一个接一个地运行。当它们按顺序运行而没有重叠时,就没有问题。但有时其中一个会因为正在处理的音量而延长一段时间,而第二个会在第一个结束之前开始。现在,当这种情况发生在第二个完成的一半时,它会崩溃,给出最大文件打开数异常。第一个虽然成功完成。当以相同的卷单独运行时,它们中的任何一个都没有问题。两个进程完全相互独立 - 没有公共资源,从不同的脚本调用,最后是在 2 个不同 JVM 上的同一操作系统上运行的 2 个不同进程 - 我使用 HP-UNIX 系统并尝试使用TUSC 实用程序,但没有 t 任何可能导致这样的问题。Xmx 对两者来说都是 2Gigs,我怀疑这会达到 - 但是有没有我没有看到的解释?并行运行可能是一个问题还是只是巧合?

4

2 回答 2

2

您的问题的解决方案可能是提高文件描述符限制(请参阅下面的链接)或确保您的代码正确关闭资源(文件输入流、套接字),这样您就不会泄漏打开的文件描述符。我将由您决定采用哪种方法。

http://h20000.www2.hp.com/bc/docs/support/SupportManual/c02261152/c02261152.pdf

编辑

如果您的程序确实一次生成那么多文件,我当然会考虑提高打开文件描述符的限制。然后,您还可以考虑在代码中加入节流阀/调节器。创建 X 个文件,然后退出几秒钟,让系统重新获得资源,然后再次继续。这可能会有所帮助。

此外,此链接听起来与您的问题非常相似:

Apache FOP 1.0 多线程 - 打开的文件太多 err24

于 2013-05-23T11:29:24.860 回答
0

在类似的场景和资源限制的情况下,我们使用了以下架构。

将首先启动一个监视器线程,该线程将具有一个计数变量。将有一个可配置的限制,直到创建新进程。对于每个新进程,计数变量将递增。一旦该过程完成,计数变量将递减。只有当计数小于配置的限制时,才会创建新进程。

上述方法帮助我们获得了更好的控制,并能够尽可能扩大规模。

于 2013-05-23T12:06:47.577 回答