上海古都建筑设计集团,上海办公室装修设计公司,上海装修公司高质量的内容分享社区,上海装修公司我们不是内容生产者,我们只是上海办公室装修设计公司内容的搬运工平台

记录Flink 线上碰到java.lang.OutOfMemoryError: GC overhead limit exceeded如何处理?

guduadmin11天前

这个问题是Flink TM内存中我们常见的,看到这个问题我们就要想到下面这句话:

程序在垃圾回收上花了很多时间,却收集一点点内存,伴随着会出现CPU的升高。

是不是大家出现这个问题都会出现上面这种情况呢。那我的问题出现如下:

记录Flink 线上碰到java.lang.OutOfMemoryError: GC overhead limit exceeded如何处理?,第1张

发现JVM Heap堆内存过高。那么堆内存包含2块:

framwork heap 一般设置是128MB,基本上不会出问题

task heap 是我们用户写代码所使用的的堆内存,那我们就要考虑是不是自己业务代码有问题吗?

所以我使用以下判断方法发现问题的。

1 查看某个TM的堆内存占用是否过高,如果过高,通过页面的端口号找到该TM的PID。操作如下:

例:akka.tcp://flink@IP:23567/user/taskmanager_0

找到这个IP的端口,使用 netstat 找到PID  --->  netstat -atunpl | grep 23567

tcp6       0      0 :::23567                :::*                    LISTEN      3081/java  

   

得到该TM的进程为3081

2 利用命令:jmap -histo:live pid 对该PID进行操作

命令:jmap -histo:live 3081  | head -20  得到

 num     #instances         #bytes  class name

----------------------------------------------

   1:      24781126      792996032  java.util.HashMap$Node

   2:      21094139      737237032  [C

   3:      21094065      506257560  java.lang.String

   4:       1560788      225984352  [Ljava.util.HashMap$Node;

   5:       1557686       74768928  java.util.HashMap

   6:        195141       59546144  [B

   7:       1198174       38341568  java.util.concurrent.ConcurrentHashMap$Node

   8:       1548207       24771312  com.alibaba.fastjson.JSONObject

   9:         39805        9853696  [Ljava.lang.Object;

  10:          1225        9522400  [Ljava.util.concurrent.ConcurrentHashMap$Node;

  11:        157686        5045952  org.apache.hadoop.hbase.Key

发现使用HashMap占用太多,寻找自己使用HashMap的方法进行排查,发现没有释放HashMap内数据导致内存一直增加。

最后希望我这种判断方式对大家都有帮助!

欢迎大家关注公众号

记录Flink 线上碰到java.lang.OutOfMemoryError: GC overhead limit exceeded如何处理?,第2张

网友评论

搜索
最新文章
热门文章
热门标签