开发者社区> 问答> 正文

关于tomcat报OutOfMemoryError: Java heap space

我有台16G内存的服务器,JVM用的默认值(听说默认最小是1/64,最大是1/4即256M和4096M),
但是运行一段时间后报了java.lang.OutOfMemoryError: Java heap space异常,tomcat也挂了,我远程服务器上去看,发现tomcat只占了40万K的内存,
总内存也只占用了20%,倒是CPU占在70%(正常情况下应该是10%以下)。
求支招啊,怎么解决。
我觉得应该是程序陷入了某个死循环,但是我不知道这个bug在哪(有没有可以监控请求所占用资源的东东呢),还有没有其他什么可能会造成这种情况呢?

展开
收起
a123456678 2016-03-10 11:33:34 3892 0
2 条回答
写回答
取消 提交回答
  •  假如是4核的,jdk 8以上,推荐一个配置
     -server 
     -Xms8g 
     -Xmx8g 
     -XX:MetaspaceSize=512m    7的话用持久代配置
     -XX:MaxMetaspaceSize=512m   7的话用持久代配置
     -Xmn5m 
     -XX:+UseConcMarkSweepGC 
     -XX:+UseCMSCompactAtFullCollection 
     -XX:CMSMaxAbortablePrecleanTime=5000 
     -XX:+CMSClassUnloadingEnabled 
     -XX:+UseCMSInitiatingOccupancyOnly 
     -XX:CMSInitiatingOccupancyFraction=80 
     -XX:+HeapDumpOnOutOfMemoryError 
     -XX:HeapDumpPath=/home/admin/java/java.hprof 
     -Xloggc:/home/admin/java/gc.log 
     -XX:+PrintGCDetails 
     -XX:+PrintGCDateStamps 
     -XX:MaxDirectMemorySize=2g 
     -XX:SurvivorRatio=10 
     -XX:+ExplicitGCInvokesConcurrent 
     -XX:ParallelGCThreads=4
     
    2019-07-17 18:57:19
    赞同 展开评论 打赏
    1. java.lang.OutOfMemoryError: Java heap space ----JVM Heap(堆)溢出
      JVM在启动的时候会自动设置JVM Heap的值,其初始空间(即-Xms)是物理内存的1/64,最大空间(-Xmx)不可超过物理内存。

    可以利用JVM提供的-Xmn -Xms -Xmx等选项可进行设置。Heap的大小是Young Generation 和Tenured Generaion 之和。

    在JVM中如果98%的时间是用于GC,且可用的Heap size 不足2%的时候将抛出此异常信息。

    解决方法:手动设置JVM Heap(堆)的大小。

    2019-07-17 18:57:19
    赞同 展开评论 打赏
问答排行榜
最热
最新

相关电子书

更多
如何通过 Serverless 提高 Java 微服务治理效 立即下载
Spring Cloud Alibaba - 重新定义 Java Cloud-Native 立即下载
The Reactive Cloud Native Arch 立即下载