【问题标题】:Java - How can i make my application long run stable so that it does not hiccups, freeze?Java - 我怎样才能让我的应用程序长期稳定运行,这样它就不会打嗝、冻结?
【发布时间】:2012-03-23 09:10:17
【问题描述】:

我的 Java 框架如下所示。

当我在系统启动后运行它几个小时时,它可以完美运行。由于它运行了 1 天 24 小时,因此我的应用程序或 JVM 本身出现问题,例如打嗝/冻结问题,在按下时什么都没有发生,就像 he is dead

这种情况发生了好几次,我的猜测是长时间运行时出现内存问题,JVM 某处导致它,但不是我的应用程序本身,因为前几个小时它的停机时间为零。只能开始超过 8 小时的长时间运行。

例子:

public class Boot {

  public static void main(String[] args) {
       String myCmd = "java -cp /var/tmp/dist/App.jar main.main";
       Runtime.getRuntime().exec(myCmd);
       SwingUtilities.invokeLater(new Runnable() {
          public void run() {
            createAndShowGUI();
          }
        });
  }

  private static void createAndShowGUI() {

    new Thread(new Runnable() {
      public void run() {
        //Server port listener
      }
    }).start();

    .....

    window = new JWindow();

    window.add("North", panelBgImg);
    window.pack();
    window.setLayout(new BorderLayout());
    window.setSize(screen.width, screen.height + 1);
    window.setLocationRelativeTo(null);
    window.setAlwaysOnTop(true);
    window.setVisible(true);        
  }
}

我如何确保 JVM 不会导致我的应用程序冻结,是否有对此进行单元测试?从长远来看,这可以帮助解决这个问题吗?

例如:System.gc() 和 Runtime.gc()

【问题讨论】:

    标签: java linux memory jvm ram


    【解决方案1】:

    如果您的应用程序死机,原因更可能是某种死锁,而不是内存不足错误。在后一种情况下,JVM 只是因异常而死。所以我敢打赌,在这里调用 GC 对你没有帮助。

    此类错误很难准确捕获,因为它们很难可靠地重现。不过,您有几个选择:

    • 将调试日志打印输出插入您的代码以获取更多关于发生了什么的线索,然后分析在您的应用被冻结之前/期间生成的日志
    • 当您的应用程序冻结时停止 JVM(在 Linux 上使用 kill 命令或 Ctrl+\ 从控制台,在 Windows 上使用 Ctrl+Break) - 它将显示线程转储信息,列出所有正在运行和死锁的线程
    • 在附加了 VisualVM 的情况下运行您的应用以查看内存使用模式

    【讨论】:

      【解决方案2】:

      对垃圾收集器的显式调用并不能解决此类问题。一般来说,你不使用它们。唯一可能的例外是,当您知道自己释放了大量内存并希望在下一个大任务到来之前将其清理干净(但即使这样也不会真正发生)。

      找出发生了什么的最好方法是运行visualvm(带有默认jdk,在bin/ dir中)。连接到您的应用程序并开始查看其内存和 CPU 使用情况。如果这让您怀疑内存是问题所在,您可以拍摄快照并进行分析。

      【讨论】:

        猜你喜欢
        • 2021-05-27
        • 2012-02-25
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-12-30
        • 2018-12-20
        相关资源
        最近更新 更多