android的oomkiller_[Android Memory] Linux下malloc函数和OOM Killer

本文介绍了Linux内核中与OOM Killer相关的proc文件系统,包括/proc//oom_adj、/proc/sys/vm/panic_on_oom、/proc/sys/vm/oom_kill_allocating_task和/proc/sys/vm/oom_dump_tasks等,如何调整进程的OOM分数以及避免进程被OOM Killer选择。通过示例展示了如何设置这些参数以影响内存管理和系统行为。
摘要由CSDN通过智能技术生成

下面开始介绍与OOM Killer相关的proc文件系统。

/proc//oom_adj

为/proc//oom_adj设置值就可以调整得分。调整值的范围为–16~15。正的值容易被OOM Killer选定。负值可能性较低。例如,当指定3时,得分就变为23倍;当指定–5时,得分就变为1/25。

“–17”是一个特殊的值。如果设置为–17,就会禁止OOM Killer发出的信号(从Linux 2.6.12开始支持设置–17)。

在OOM Killer运行的情况下,为了实现远程登录而想要将sshd排除在对象外时,可以执行下列命令。

# cat /proc/'cat /var/run/sshd.pid'/oom_score

15

# echo -17 >  /proc/'cat /var/run/sshd.pid'/oom_adj

# tail /proc/'cat /var/run/sshd.pid'/oom_*

==> /proc/2278/oom_adj <==

-17

==> /proc/2278/oom_score <==

0                               /*得分变成0*/

从Linux 2.6.18开始可以使用/proc//oom_adj。内容记载在Documentation /filesystems/proc.txt中。

/proc/sys/vm/panic_on_oom

将/proc/sys/vm/panic_on_oom设置为1时,在OOM Killer运行时可以不发送进程信号,而是使内核产生重大故障。

# echo 1 > /proc/sys/vm/panic_on_oom

/proc/sys/vm/oom_kill_allocating_task

从Linux 2.6.24开始proc文件系统就有oom_kill_allocating_task。如果对此设置除0以外的值,则促使OOM Killer运行的进程自身将接收信号。此处省略对所有进程的得分计算过程。

# echo 1 > /proc/sys/vm/oom_kill_allocating_task

这样就不需要参照所有进程,但是也不会考虑进程的优先级和root权限等,只发送信号。

/proc/sys/vm/oom_dump_tasks

从Linux 2.6.25开始,将oom_dump_tasks设置为除0以外的值时,在OOM Killer运行时的输出中会增加进程的列表信息。

下面为设置示例。

# echo 1 > /proc/sys/vm/oom_dump_tasks

列表信息显示如下,可以使用dmesg或syslog来确认。

[ pid ]   uid  tgid total_vm      rss cpu oom_adj name

[    1]     0     1     2580        1   0       0 init

[  500]     0   500     3231        0   1     -17 udevd

[ 2736]     0  2736     1470        1   0       0 syslogd

[ 2741]     0  2741      944        0   0       0 klogd

[ 2765]    81  2765     5307        0   0       0 dbus-daemon

[ 2861]     0  2861      944        0   0       0 acpid

...

[ 3320]     0  3320   525842   241215   1       0 stress

/proc//oom_score_adj

从Linux 2.6.36开始都安装了/proc//oom_score_adj,此后将替换为/proc/ /oom_adj。详细内容请参考Documentation/feature-removal-schedules.txt。即使当前是对/proc//oom_adj进行的设置,在内核内部进行变换后的值也是针对/proc//oom_score_adj设置的。

/proc//oom_score_adj可以设置–1000~1000之间的值。设置为–1000时,该进程就被排除在OOM Killer强制终止的对象外。

在内核2.6.36以后的版本中写入oom_adj,只会输出一次如下的信息。

# dmesg

.....

udevd (60): /proc/60/oom_adj is deprecated, please use /proc/60/oom_score_adj instead.

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值