【问题标题】:Need to know the root cause of "OutOfMemoryError : Java Heap Space"需要知道“OutOfMemoryError : Java Heap Space”的根本原因
【发布时间】:2015-05-22 05:01:36
【问题描述】:

我在 linux 机器上遇到以下错误。

Exception in thread "http-8080-Processor17" java.lang.OutOfMemoryError:Java Heap Space

其中一个 8080 端口时不时地处于密切等待状态。

请提出问题的根本原因。

【问题讨论】:

    标签: java tomcat catalina.out


    【解决方案1】:

    为了找到内存异常背后的原因,您可以对您的应用程序进行线程转储。要获取线程转储,请执行以下命令:

    kill -3 <process_id>
    

    &lt;process_id&gt; 是您的进程的 pid。您可以通过以下方式找到它:

    ps aux | grep java
    

    或任何其他可用的工具。线程转储将被发送到标准输出流,而不终止进程。因此,您可以分析日志。 您还可以使用以下 JVM 选项:

    -XX:OnOutOfMemoryError="kill -3 %p"
    

    在每个 OutOfMemory 错误时自动生成进程的线程转储。

    【讨论】:

      【解决方案2】:

      无论您运行的是什么平台,无论是 Linux、Windows 还是任何其他平台,您都可以拥有有限堆。 Java 分配有限的内存来运行程序。 这个内存空间可以分为两个区域。

      1. 堆:存储对象。
      2. PermSpace : 存储用户类的元数据。

      您可以通过传递参数来初始化堆和 PermSpace “-XX:MaxPermSize” 您可以通过传递参数来初始化堆大小 “-Xmx” 如果您没有初始化 JVM,则会为您的应用程序分配默认内存。

      您可以检查使用 Java Memory Profiler 来检查您的程序的哪一部分正在使用更多的内存空间。

      【讨论】:

        【解决方案3】:

        java.lang.OutOfMemoryError:Java Heap Space : 通常是由于缺少 系统内存(对于JVM),有时也可能由于内存而发生 泄漏(编程)。

        JVM在java堆内存用完时抛出“OutOfMemoryError”

        解决OutOfMemoryError: java heap Space,(简单方法)

        通过设置 JVM 参数 "-Xms" 和 -Xmx" 来增加堆大小 - 最小和最大堆大小

        检查当前值并像“-Xmx1024M”一样增加它

        如果它没有解决,那么它一定是由于内存泄漏(idk more about how to fix memory leak) 为了更好地理解,请参阅:Java Heap Space

        【讨论】:

        • 尊敬的专家...!感谢您的建议。
        猜你喜欢
        • 2012-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-06-07
        • 1970-01-01
        • 1970-01-01
        • 2014-01-05
        相关资源
        最近更新 更多