我正在测量Flink中的应用程序(WordCount)的内存使用情况ps -p TaskManagerPID -o rss.然而,结果没有任何意义.因为对于每个数据量(1MB,10MB,100MB,1GB,10GB),所使用的内存量相同.对于10GB数据,测量结果甚至小于10GB.TaskManager是否是测量内存使用量的错误过程?Flink Process Model的哪个进程负责内存分配?
Flink具有两种处理模式,流和批处理.
流处理:
在流处理中,Flink使用可插拔状态后端来维护应用程序的状态.在Flink 1.5.0版中,有两种类型的状态后端.1)后端(FsStateBackend和MemoryStateBackend)将应用程序状态存储在worker(TaskManager)JVM进程的堆上,以及2)RocksDBStateBackend将状态存储在RocksDB上的磁盘上.在这两种情况下,您都可以使用常规JVM内存监视工具监视内存消耗.但是,对于RocksDBStateBackend大多数状态将存储在磁盘上.
批量处理
批处理操作符的内部处理算法(排序,哈希表)与托管内存一起使用,托管内存(通常)在工作进程(TaskManager)启动并且从不返回时预先分配.Flink将此托管内存分配给其算法,如果数据量超过其内存预算,则算法会溢出到磁盘.由于所有内存都是由Flink预先分配和内部管理的,因此无法测量实际内存消耗.
| 归档时间: |
|
| 查看次数: |
2064 次 |
| 最近记录: |