【问题标题】:Core dump for process spawned from Java从 Java 生成的进程的核心转储
【发布时间】:2010-11-24 07:28:15
【问题描述】:

我的 Java (Eclipse) 应用程序正在生成一个子进程,监视其标准输出流和退出值。当子进程因 SIGABRT 崩溃时,没有创建核心转储文件。如果我手动启动子进程并杀死它,核心转储就在那里。

我找不到任何关于 JVM 是否以某种方式准备子进程的信息(例如将核心转储文件大小设置为 0)。

有谁知道可能发生了什么以及要更改哪些设置以创建核心转储?

这是在 Suse 10 和 Ubuntu 9.04 以及 Java 5 和 6 上,如果有什么不同的话。

最好的问候, 弗拉德

【问题讨论】:

  • 能否请您添加详细信息,例如描述您如何生成子进程的代码片段?
  • 我认为如果您当前的工作目录不可被进程写入,则不会生成核心转储。有这种可能吗?
  • 工作目录是可写的。手动启动完全相同的应用程序,生成代码转储。
  • 子进程启动时 fRuntime = Runtime.getRuntime().exec(cmd, null, workingDirectory);

标签: java dump coredump


【解决方案1】:

通常,核心文件的(非)创建由ulimit 命令(特别是ulimit -c)控制。有关详细信息,请参阅 help ulimit(在 bash 中)。

这个设置应该从 shell 继承到子 shell,所以 Java 应该使用它启动的 shell 中的设置。 Java 可能会与 ulimit 混淆,但我从未听说过这样做。

尝试在 shell 中设置 ulimit,然后从那里启动 Java 进程。如果这没有帮助,您可以从 Java 调用一个设置 ulimit 的包装脚本,然后启动您的程序。

【讨论】:

  • 谢谢,我会尝试使用 wrapper,没想到。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-09-05
  • 2023-03-27
  • 2013-07-24
相关资源
最近更新 更多