OOM Score
修改 oom_score
可以在某些情况下有用,特别是在管理进程的内存回收优先级时。oom_score
是 Linux 内核用于选择哪个进程应该在内存不足时(触发 OOM Killer 时)被终止的一个指标。
oom_score
的作用
oom_score
:表示进程被杀死的优先级。数值越高,表示该进程在 OOM(Out of Memory,内存不足)时被杀死的可能性越大。每个进程都有一个oom_score
值,表示该进程在 OOM 情况下的杀死优先级。- 值范围:0 到 1000,越高的值表示进程越容易被 OOM Killer 终止。
- 默认情况下,进程的
oom_score
是根据其内存使用情况、运行时间、以及其他因素动态计算的。
oom_score_adj
:是可以用来调整oom_score
的值。通过调整oom_score_adj
,你可以改变某个进程在内存不足时被杀死的概率。它的值范围是 -1000(表示非常不容易被杀死)到 1000(表示非常容易被杀死)。- 默认情况下,
oom_score_adj
为 0,意味着进程的杀死优先级是默认计算的。 - 修改
oom_score_adj
可以影响进程在 OOM 情况下的优先级,而不需要改变内核的行为或完全依赖内核自动判断。
- 默认情况下,
如何修改 oom_score_adj
查看进程的 oom_score
和 oom_score_adj
:
bash
cat /proc/<pid>/oom_score
cat /proc/<pid>/oom_score_adj
修改 oom_score_adj
,你可以向 /proc/<pid>/oom_score_adj
文件写入一个新的值。需要使用 root 权限:
bash
echo <value> | sudo tee /proc/<pid>/oom_score_adj
例如,将进程的 oom_score_adj
设置为 -1000(让该进程在内存不足时不容易被杀死):
bash
echo -1000 | sudo tee /proc/<pid>/oom_score_adj
或者将其设置为 1000(让该进程在内存不足时容易被杀死):
bash
echo 1000 | sudo tee /proc/<pid>/oom_score_adj
修改 oom_score_adj
的用途
- 保护关键进程:如果你有一些关键的服务或进程(如数据库、重要的守护进程),你可以将它们的
oom_score_adj
设置为一个负值(例如 -1000),这样它们在内存不足时就不容易被 OOM Killer 终止。 - 降低不重要进程的优先级:对于一些可以容忍被杀死的非关键进程,你可以将它们的
oom_score_adj
设置为较高的值(例如 1000),这样当内存不足时,这些进程会更容易被终止。
是否有用?
- 有用:如果你有对系统内存使用非常敏感的进程,调整
oom_score_adj
是非常有用的。它能帮助你管理哪些进程应该在 OOM 情况下优先被终止,哪些应该被保留。 - 不过,不能完全避免 OOM Killer:即使你将进程的
oom_score_adj
设置为负值或很低的值,系统在极端内存不足的情况下仍然可能会选择终止其他进程。oom_score_adj
只是影响 OOM Killer 选择终止进程的优先级,而不是完全避免进程被杀死。
总结
修改 oom_score_adj
是一种有效的管理 OOM Killer 行为的方式,可以帮助你保护关键进程或减少不重要进程被杀死的概率。但它并不是一种根本解决方案,仍然依赖于系统内存管理的状态。