算法框架flink集群内存调优

226 阅读2分钟

一般是由于flink内存分配的策略以及回收不及时导致的

现在taskmanager当中开启 rest.flamegraph: true

配置JVM dashboard观察gc log

参考教程: 

  1. 替换linux自带的glibc回收器为jmalloc

export MALLOC_MMAP_THRESHOLD_=8192 (大于某个值, 使用mmap方式申请内存,free掉之后会立即还给操作系统,默认128k)

export MALLOC_ARENA_MAX=4 (MALLOC_ARENA_MAX是在效率和内存消耗之间做选择. 使用默认的MALLOC_ARENA_MAX能获得最佳效率, 但是可能消耗更多的内存. 减少MALLOC_ARENA_MAX能减少内存使用, 但是效率可能稍微低一些)

如果替换完后内存没有明显减少 考虑基于G1回收器调优

2.基于G1的调优

G1大对象以及并发GC调优
以4core 8g 4个进程为单位计算
   
  #G1当中大对象的region区域大小,
  -XX:G1HeapRegionSize=33554432 (32M)
  -XX:InitialHeapSize=524288000 (500M)
  # 默认值45,超过这个45%的阈值,开始触发全局标记,
  #进而触发mixed gc,注意这个值表示的是:
  #老年区已使用空间/整个堆空间
  # 压力转移到老年代,强制触发full gc
  -XX:InitiatingHeapOccupancyPercent=45 

  
  #两次gc的暂停时间间隔
  -XX:MaxGCPauseMillis=200 (ms)
  -XX:MaxHeapSize=524288000 

  #GC线程多一些,加快回收
  #串行执行的GC线程数
  -XX:ParallelGCThreads=8 
  #并发执行的线程数
  -XX:ConcGCThreads=16 
  # 去除内联编译缓存
  -XX:ReservedCodeCacheSize=268435456(256M)
  -XX:-TieredCompilation 
  -XX:+UseCodeCacheFlushing
  #关闭指针压缩 UseCompressedOops会使用32-bit的offset
  #来代表java object的引用,
  #而UseCompressedClassPointers则使用32-bit的offset来
  #代表64-bit进程中的class pointer;
  #可以使用CompressedClassSpaceSize来设置这块的空间大小 
  -XX:+UseCompressedClassPointers 
  -XX:+UseCompressedOops 
  -XX:CompressedClassSpaceSize=260046848(248M)

  #打印GC参数
  -XX:+PrintGC 
  -XX:+PrintGCTimeStamps  

  
  
  -XX:+UseG1GC