Presto内存分配机制

1.预留系统内存:SYSTEM_POOL= Runtime.getRuntime().maxMemory() * 0.4

2.最大可用内存 maxMemory  =

3.预留内存:  RESERVED_POOL = query.max-memory-per-node , 

4.普通内存:  GENERAL_POOL = maxMemory – RESERVED_POOL

预留系统内存 内存空间 大小 默认
最大可用内存 SYSTEM_POOL Runtime.getRuntime().maxMemory() * 0.4 系统的buffer内存
最大可用内存 maxMemory Runtime.getRuntime().maxMemory() – SYSTEM_POOL
大作业预留内存 RESERVED_POOL query.max-memory-per-node 大作业消耗的内存,默认只允许一个作业运行
普通内存 GENERAL_POOL maxMemory – RESERVED_POOL  普通作业消耗的内存

RESERVED_POOL 这块内存触发的条件

1.GENERAL_POOL 不够用了,有作业block

2.RESERVED_POOL 还没有被使用

从集群纬度看

当满足以下两个条件时候,认为集群的资源不够了,在当前的查询条件下

1.GENERAL_POOL 出现block

2.RESERVED_POO被使用了

对于超出内存有两种方式

1.查询当前查询是否超出了query.max-memory的大小,若是超过了,那么就kill

2.如果query.max-memory设置的不合理,非常的大,那么就一直不会触发第一个条件。超过5秒就会进入下一个判断,根据LowMemoryKillerPolicy策略来判断是否杀掉作业. 具体配置是 query.low-memory-killer.policy

2.1 total-reservation :杀掉集群里面最消耗资源最大的作业

2.2 total-reservation-on-blocked-nodes : 杀死内存不足节点上,消耗资源最大的作业

参考资料:

http://armsword.com/2018/05/22/the-memory-management-and-tuning-experience-of-presto/

https://prestodb.io/docs/current/release/release-0.191.html

http://qubole.com/wp-content/uploads/2016/01/PrestoTuning-QuickReferenceGuide.pdf

https://qubole.zendesk.com/hc/en-us/articles/210266303-How-To-Presto-Tuning

发表评论?

0 条评论。

发表评论


注意 - 你可以用以下 HTML tags and attributes:
<a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>