Flink:内存使用情况

时间:2016-02-10 12:37:12

标签: apache-flink

我正在使用ps -p TaskManagerPID -o rss测量Flink中的应用程序(WordCount)的内存使用情况。然而,结果没有任何意义。因为对于每个数据量(1MB,10MB,100MB,1GB,10GB),所使用的内存量相同。对于10GB数据,测量结果甚至小于10GB。 TaskManager是否是测量内存使用量的错误过程? Flink Process Model的哪个进程负责内存分配?

1 个答案:

答案 0 :(得分:6)

Flink具有两种处理模式,即流处理和批处理。

流处理

在流处理中,Flink使用可插拔状态后端来维护应用程序的状态。在Flink 1.5.0版中,有两种类型的状态后端。 1)后端(FsStateBackendMemoryStateBackend)将应用程序状态存储在worker(TaskManager)JVM进程的堆上,以及2)将RocksDB中的状态存储在磁盘上的RocksDBStateBackend。在这两种情况下,您都可以使用常规JVM内存监视工具监视内存消耗。但是,对于RocksDBStateBackend,大部分状态都将存储在磁盘上。

批处理

批处理操作符的内部处理算法(排序,哈希表)与托管内存一起使用,托管内存(通常)在工作进程(TaskManager)启动并且从不返回时预先分配。 Flink将此托管内存分配给其算法,如果数据量超过其内存预算,则算法会溢出到磁盘。由于所有内存都是由Flink预先分配和内部管理的,因此无法测量实际内存消耗。