Lesser Evil:保护系统整体可用性的内存管理策略
1. 引言
在处理 Erlang 系统的内存压力时,有一种策略能够在不修改代码的情况下,有效应对低内存状况,这就是 Lesser Evil 策略。它通过监控运行程序,在低内存条件下选择不良值较高的实体并执行补偿操作,以保护系统的整体可用性。
2. 核心概念
2.1 实体
Lesser Evil 将 Erlang 进程视为实体,但并非所有进程都会被考虑。系统进程可以自动识别和排除,而关键和非关键用户进程的区分需要用户手动指定非关键的 Erlang 应用列表。此外,每个应用中的 3 个关键进程(应用主进程、进程 ‘x’ 和应用的主监控进程)必须排除,因为它们的终止会导致整个应用终止。
2.2 不良度
不良度是该策略的核心,用于选择合适的进程执行补偿操作。为有效处理内存压力,不良度会给以下进程赋予较高值:
- 内存使用量高的进程;
- 有多个待处理任务,未来前景不佳的进程。
为最小化补偿操作对其他进程的负面影响,不良度会给以下进程赋予较低值:
- 长期存活,表现良好的进程;
- 对用户重要的进程;
- 在系统中起核心作用,有多个进程依赖的进程。
不良度是一个复合指标,基于以下进程级指标计算:
- Memory:进程使用的字节数。
- MessageQLength:已交付但尚未处理的消息数量。
- Reds:进程完成的工作量,在不良度公式中应用以 10 为底的对数。
- Age:进程存活的检查次数。
- Links:链接到
超级会员免费看
订阅专栏 解锁全文
43

被折叠的 条评论
为什么被折叠?



