
# 优化Flink内存GC参数
#### 操作场景
Flink是依赖内存计算，计算过程中内存不够对Flink的执行效率影响很大，可以通过监控GC（Garbage Collection），评估内存使用及剩余情况来判断内存是否变成性能瓶颈，并根据情况优化。
监控节点进程的YARN的Container GC日志，如果频繁出现Full GC，需要优化GC。
![](https://support.huaweicloud.com/cmpntguide-mrs/public_sys-resources/note_3.0-zh-cn.png)
GC的配置：在客户端的"conf/flink-conf.yaml"配置文件中，在"env.java.opts"配置项中添加参数："-Xloggc:\<LOG_DIR\>/gc.log -XX:+PrintGCDetails -XX:-OmitStackTraceInFastThrow -XX:+PrintGCTimeStamps -XX:+PrintGCDateStamps -XX:+UseGCLogFileRotation -XX:NumberOfGCLogFiles=20 -XX:GCLogFileSize=20M"。 此处默认已经添加GC日志。
#### 操作步骤
- 优化GC。 调整老年代和新生代的比值。在客户端的"conf/flink-conf.yaml"配置文件中，在"env.java.opts"配置项中添加参数："-XX:NewRatio"。如" -XX:NewRatio=2"，则表示老年代与新生代的比值为2:1，新生代占整个堆空间的1/3，老年代占2/3。
  
- 开发Flink应用程序时，优化DataStream的数据分区或分组操作。
  - 当分区导致数据倾斜时，需要考虑优化分区。
  
  - 避免非并行度操作，有些对DataStream的操作会导致无法并行，例如WindowAll。
  
  - keyBy尽量不要使用String。
   
 
