inceptor server jmap 中常见 FGC 问题

  其他常见问题
内容纲要

概要描述

早期版本的 inceptor server 会有FGC 异常的情况,本文 记录一下 jmap 中特定关键字对应的特定问题;

详细说明

只针对 TDH 6.2.2 及之前版本的 inceptor server

Inceptor Server 常见的 GC 相关问题

  1. PL/SQL死循环profile信息积累
    org.apache.hadoop.hive.ql.pl.runtime.PLProfile$PLFuncProfile
    org.apache.hadoop.hive.ql.hooks.PerfStatistics

    解决方案:


  1. orc表的列统计信息过多
    org.apache.hadoop.hive.ql.io.orc.OrcProto$ColumnStatistics
    org.apache.hadoop.hive.ql.io.orc.OrcProto$StringStatistics
    org.apache.hadoop.hive.ql.io.orc.OrcProto$DecimalStatistics
    org.apache.hadoop.fs.FileSystem$Statistics$StatisticsData

    解决方案:

    • hive-server2.log 里面搜 FooterCacheHitRatio, 如果绝大部分是0,可以考虑把hive.orc.cache.stripe.details.size设成0。作为一个cache,如果命中率没有达到50%以上,这个cache的整体效果不会很好。
    • 另外一种情况可能是 orc 表的小文件数量很多,需要合并小文件;

  1. 4040 Spark UI 监控信息bug
    org.apache.spark.executor.TaskMetrics
    org.apache.spark.scheduler.TaskInfo
    org.apache.spark.storge.RDDInfo

    解决方案:

    • 重启 Inceptor 缓解,或者是升级到 dbaservice

  1. 连接数量太多,HiveConf 实例数量超过 1w
    org.apache.hadoop.hive.conf.HiveConf

    解决方案:

    • 查看beeline 连接的 session 个数,是否存在连接没有释放;ctc表太大(垃圾太多)HiveConf中会包含CTC表的信息,如果记录数目太多,占用内存会比较多;
    • SELECT count(1) FROM hive_metastore.COMPLETED_TXN_COMPONENTS,调大inceptor server内存,适当调大ttl时间,比如server&executor配置-Dspark.cleaner.ttl.BROADSACT_FAST参数为900 (改参数没有副作用),该参数影响范围内容:当Inceptor以Cluster模式“高并发”连续执行批处理作业时(一般是平均1分钟执行20个SQL以上)连续执行数小时,会导致Executor严重FullGC,并且无法自然缓解

  1. 表的 partition 太多(多级分区),导致的properity string累积造成server gc
    org.apache.hadoop.hive.ql.io.orc.OrcSplit
    orc.apache.spark.rdd.HadoopValueOnlyPartition
    io.transwarp.inceptor.inceptor.execution.HadoopTableReader$$annofun$10

    解决方案:

    • 优化分区表,不建议使用多级分区,会导致小文件问题以及加载的 fspath 太长,每一个HadoopTableReader hold 两个 property(partProp, tableProp)。Properties 数量为 54w

  1. 小文件数量过多,查询导致 server gc

    org.apache.hadoop.fs.Path
    org.apache.hadoop.fs.FileStatus

    解决方案:

    • 查看小文件是不是特别多,表设计是不是合理的(存在不存在多级分区、很多分桶、delta文件没有合并的情况);如果是metastore端,是不是合并任务hand住了(warp-32079)
  2. 特定sql parse 产生大量中间数据,导致 server gc

    org.apache.hadoop.hive.ql.parse.ASTNode
    org.antlr.runtime.CommonToken

    解决方案:

    • 一般是因为有大量的 sql parse 导致的,比如 batch insert,或者是开了 MBO 时查询语句在大量 cube 中选择时会触发这种问题;可以尝试检查当时提交的 sql 大小;

  1. holodesk 表 accumulable 泄漏
    io.transwarp.holodesk.storage.ds.column.block.filter.MinMaxBlockFilter

    解决方案:

    • 升级版本(出包)或者重启缓解

  1. with as …select join 语句,在外层查询对该临时表做 join,而在 Driver 的逻辑里,会把查询的结果全部堆积在cachedPlanResult 这个 ArrayList 里面从而导致 GC
    org.apache.hadoop.hive.common.type.HiveVarchar
    org.apache.hadoop.hive.common.type.HiveData
    org.apache.hadoop.hive.serde2.objectinspector.StandardListObjectInspector

    解决方案:


  1. stellerDB 图数据库相关 zk 连接泄露导致

    org.apache.curator.framework.imps.NamespaceWatcher

    解决方案:

    • 进入 zkcli 创建几个空的 node
      export CLIENT_JVMFLAGS="-Djava.security.auth.login.config=/etc/zookeeper1/conf/jaas.conf"
      # 此处必须使用 hostname ,不能用 ip
      zookeeper-client -server zk-address-host:2181
      create /graph ""
      create /graph/master "", create /graph/worker "", create /graph/database ""
      然后重启 inceptor-server

  2. 任务失败会保留最小线程数的 session 不断开,如果刚好这些没断开的session 中 partition相关内存非常多,就会造成 server 内存压力。

    org.apache.hadoop.mapred.SplitLocationInfo
    org.apache.hadoop.mapreduce.lib.input.FileSplit
    org.apache.hadoop.hive.metastore.api.FieldSchema
    org.apache.spark.rdd.HadoopValueOnlyPartition

    解决方案:


这篇文章对您有帮助吗?

平均评分 0 / 5. 次数: 0

尚无评价,您可以第一个评哦!

非常抱歉,这篇文章对您没有帮助.

烦请您告诉我们您的建议与意见,以便我们改进,谢谢您。