【问题标题】:Standalone Java App dies after a few days几天后独立的 Java 应用程序死机
【发布时间】:2011-05-03 18:35:43
【问题描述】:

我们有一个 Java 应用程序,它通过 RMI 连接到另一个 Java 应用程序。 此应用程序有多个实例同时运行,几天后一个实例停止处理...... CPU 为 0,我有一个额外的线程监听特定端口,有助于关闭应用程序。

我可以连接到特定端口,但应用程序不执行任何操作。

我们使用 Log4j 来保存日志,没有写入任何内容,因此不会引发任何异常。

我们还使用 c3p0 进行数据库连接。

有人有想法吗?

谢谢,

【问题讨论】:

  • “没有抛出异常”?你确定你也检查了标准输出(标准输出)和标准错误(标准错误)吗?还是只有日志文件?检查输出到哪里...
  • “任何想法”?是的......你有一个错误。在这种形式下,这是非常无法回答的。您需要在进程挂起的位置开始调试。

标签: java linux sockets log4j rmi


【解决方案1】:

我建议从受影响应用程序的线程转储开始。 您需要逐个线程地查看正在发生的事情。可能是您有一个长时间运行的线程,或者其他进程阻止了其他工作的完成。

由于你运行的是 linux,你可以使用以下命令获取你的线程转储

kill -3 <pid>

如果您在阅读输出时需要帮助,请将其发布在您的原始问题中。

如果线程转储中没有显示任何内容,则可以查看其他替代方案。

【讨论】:

  • 1+ 用于基础知识,哈哈。我承认我倾向于使用 JMetter + JConsole 抢先一步。无论如何,作为第二步,JConsole 可以通过很少的配置为您提供非常有用的信息(该工具也非常直观)。
【解决方案2】:

嗯...我建议使用JMetter 来强调应用程序并注意可能发生的任何奇怪的事情(例如内存泄漏、死锁等)。还要查看可能中断程序(或 System.exit() 调用)的任何异常的代码。最后,如果其他人可以访问计算机,检查该进程是否不是以某种方式手动终止是有意义的。

【讨论】:

  • 哦,我忘记了最重要的部分。对于实际监控,您可以使用可以远程使用的JConsole。两者都是非常好的(免费)工具。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-08-30
  • 1970-01-01
  • 1970-01-01
  • 2011-02-12
  • 1970-01-01
相关资源
最近更新 更多