Hi,社区:
Flink 使用 RocksDB CPU 打满,90+% CPU 耗在了 RocksDB,80+% CPU 耗在了 RocksDB 的 snappy 数据解压。本地 RocksDB 的 sst 文件仅 60M。不明白为什么会这样? 火焰图链接:https://drive.google.com/file/d/183aiENLn5t22zSXX14mBLRZTZrjRO6Ar/view?usp=sharing Thanks fanrui -- Sent from: http://apache-flink.147419.n8.nabble.com/ |
备注一下:
Flink 任务并行度 1024,运行几分钟,就会有四五个 subtask 出现上述现象,其余 subtask 正常。 正常的 subtask 打出的火焰图是正常的:代码中每一步都占用了一部分 CPU,而不是 MapState 的 contains 操作占用了了大量 CPU。 -- Sent from: http://apache-flink.147419.n8.nabble.com/ |
Hi
从火焰图看,RocksDB#get 操作占用的时间较多,contains 会调用 RocksDB 的 get 函数 1. 你使用的是哪个版本的 Flink? 2. 不同 subtask 之间的数据是否均匀呢?这里主要想知道调用 RocksDB 的 get 函数调用频次是否符合预期 3. 如果我理解没错的话,有 snappy 的压缩,这个会有 IO 的操作(也就是从磁盘 load 数据),可能还需要看下为什么这个 subtask 的数据大量落盘 Best, Congxian fanrui <[hidden email]> 于2020年9月1日周二 下午9:14写道: > 备注一下: > Flink 任务并行度 1024,运行几分钟,就会有四五个 subtask 出现上述现象,其余 subtask 正常。 > 正常的 subtask 打出的火焰图是正常的:代码中每一步都占用了一部分 CPU,而不是 MapState 的 contains 操作占用了了大量 > CPU。 > > > > -- > Sent from: http://apache-flink.147419.n8.nabble.com/ |
Hi,感谢 Congxian 大佬回复!
1、 Flink version 1.10 2、 subtask 之间数据非常均匀,get 函数调用频次较多,但是每个 subtask 应该是类似的。 其他正常的 subtask 火焰图看着并不会大量停留在这里,而是火焰图上有各个位置的代码。 3、 sst 文件小的时候也会出现该问题,60M 的 sst 并不大,每个 butask 的 blockcache 能分到 1g 左右。 补充: 4、正常和非正常的火焰图来看,是 NewIndexIterator 这一步出了问题,有问题的火焰图走到了 NewIndexIterator 代码,但正常的火焰图基本 NewIndexIterator 不耗时。 NewIndexIterator 这一步应该是读索引相关操作,是不是 index 在 Cache 中放不下了,被频繁淘汰呢? 正常火焰图与非正常火焰图差异图示:https://drive.google.com/file/d/1DG4eTbaaozG_4ZxPQc_svmoyEXCdKZqb/view?usp=sharing 5、 调大一些 block cache 相关参数,调节之前运行 5 分钟任务就出现上述问题,调节之后运行 30 分钟出问题。 调节后的参数如下所示: state.backend.rocksdb.memory.managed: true state.backend.rocksdb.memory.write-buffer-ratio: 0.4 state.backend.rocksdb.memory.high-prio-pool-ratio: 0.5 taskmanager.memory.jvm-overhead.fraction: 0.05 state.backend.incremental: true state.backend.rocksdb.block.cache-size: 3 gb taskmanager.memory.managed.fraction: 0.5 6、 目前 RocksDB LOG 等级调到了 DEBUG,附上 LOG 文件:https://drive.google.com/file/d/1JpHMjwTyW0ej-GtPbg6NLigohG7o3U4Y/view?usp=sharing Thanks fanrui ------------------ 原始邮件 ------------------ 发件人: "user-zh" <[hidden email]>; 发送时间: 2020年9月2日(星期三) 中午1:38 收件人: "user-zh"<[hidden email]>; 主题: Re: Flink 使用 RocksDB CPU 打满 Hi 从火焰图看,RocksDB#get 操作占用的时间较多,contains 会调用 RocksDB 的 get 函数 1. 你使用的是哪个版本的 Flink? 2. 不同 subtask 之间的数据是否均匀呢?这里主要想知道调用 RocksDB 的 get 函数调用频次是否符合预期 3. 如果我理解没错的话,有 snappy 的压缩,这个会有 IO 的操作(也就是从磁盘 load 数据),可能还需要看下为什么这个 subtask 的数据大量落盘 Best, Congxian fanrui <[hidden email]> 于2020年9月1日周二 下午9:14写道: > 备注一下: > Flink 任务并行度 1024,运行几分钟,就会有四五个 subtask 出现上述现象,其余 subtask 正常。 > 正常的 subtask 打出的火焰图是正常的:代码中每一步都占用了一部分 CPU,而不是 MapState 的 contains 操作占用了了大量 > CPU。 > > > > -- > Sent from: http://apache-flink.147419.n8.nabble.com/ |
In reply to this post by Congxian Qiu
再补充一下正常 subtask 火焰图:https://drive.google.com/file/d/1uiH2vNi0kMGHuiHOW5Wq-m053ys4rFHu/view?usp=sharing
代码中多次对状态的访问,从火焰图来看: contains 操作仅占整个 CPU 的 5.92%,且代码中多次对状态的访问占的 CPU 都是均匀的。 有问题的 火焰图,一个 MapState 的 contains 操作就把 CPU 打到了 90% ------------------ 原始邮件 ------------------ 发件人: "user-zh" <[hidden email]>; 发送时间: 2020年9月2日(星期三) 中午1:38 收件人: "user-zh"<[hidden email]>; 主题: Re: Flink 使用 RocksDB CPU 打满 Hi 从火焰图看,RocksDB#get 操作占用的时间较多,contains 会调用 RocksDB 的 get 函数 1. 你使用的是哪个版本的 Flink? 2. 不同 subtask 之间的数据是否均匀呢?这里主要想知道调用 RocksDB 的 get 函数调用频次是否符合预期 3. 如果我理解没错的话,有 snappy 的压缩,这个会有 IO 的操作(也就是从磁盘 load 数据),可能还需要看下为什么这个 subtask 的数据大量落盘 Best, Congxian fanrui <[hidden email]> 于2020年9月1日周二 下午9:14写道: > 备注一下: > Flink 任务并行度 1024,运行几分钟,就会有四五个 subtask 出现上述现象,其余 subtask 正常。 > 正常的 subtask 打出的火焰图是正常的:代码中每一步都占用了一部分 CPU,而不是 MapState 的 contains 操作占用了了大量 > CPU。 > > > > -- > Sent from: http://apache-flink.147419.n8.nabble.com/ |
Hi
index 相关的,或许可以看下这个文档[1] [1] https://github.com/facebook/rocksdb/wiki/Block-Cache#caching-index-filter-and-compression-dictionary-blocks Best, Congxian 范瑞 <[hidden email]> 于2020年9月2日周三 下午2:05写道: > 再补充一下正常 subtask 火焰图: > https://drive.google.com/file/d/1uiH2vNi0kMGHuiHOW5Wq-m053ys4rFHu/view?usp=sharing > 代码中多次对状态的访问,从火焰图来看: contains 操作仅占整个 CPU 的 5.92%,且代码中多次对状态的访问占的 CPU 都是均匀的。 > 有问题的 火焰图,一个 MapState 的 contains 操作就把 CPU 打到了 90% > > > > > ------------------ 原始邮件 ------------------ > 发件人: > "user-zh" > < > [hidden email]>; > 发送时间: 2020年9月2日(星期三) 中午1:38 > 收件人: "user-zh"<[hidden email]>; > > 主题: Re: Flink 使用 RocksDB CPU 打满 > > > > Hi > 从火焰图看,RocksDB#get 操作占用的时间较多,contains 会调用 RocksDB > 的 get 函数 > 1. 你使用的是哪个版本的 Flink? > 2. 不同 subtask 之间的数据是否均匀呢?这里主要想知道调用 RocksDB 的 get > 函数调用频次是否符合预期 > 3. 如果我理解没错的话,有 snappy 的压缩,这个会有 IO 的操作(也就是从磁盘 load > 数据),可能还需要看下为什么这个 > subtask 的数据大量落盘 > Best, > Congxian > > > fanrui <[hidden email]> 于2020年9月1日周二 下午9:14写道: > > > 备注一下: > > Flink 任务并行度 1024,运行几分钟,就会有四五个 subtask 出现上述现象,其余 subtask 正常。 > > 正常的 subtask 打出的火焰图是正常的:代码中每一步都占用了一部分 CPU,而不是 MapState 的 contains > 操作占用了了大量 > > CPU。 > > > > > > > > -- > > Sent from: http://apache-flink.147419.n8.nabble.com/ |
Free forum by Nabble | Edit this page |