vm.oom_kill_allocating_task 设置不生效
时间: 2023-08-03 09:05:49 浏览: 270
vm.oom_kill_allocating_task 是 Linux 内核参数,用于在系统内存不足时,选择杀死哪个进程以释放内存。如果该参数设置为 0,则内核会选择杀掉一个占用内存最多的进程。如果设置为 1,则内核会选择杀掉分配内存最多的进程。
如果你设置了 vm.oom_kill_allocating_task 参数,但是在系统内存不足时,内核仍然选择杀死占用内存最多的进程,那么可能是因为该参数的值被其他配置覆盖了。你可以使用以下命令来检查该参数的值:
```
$ cat /proc/sys/vm/oom_kill_allocating_task
```
如果输出为 0,则表示参数设置成功。如果输出为 1,则可能是被其他配置覆盖了。你可以通过查看 /etc/sysctl.conf 文件中是否有对该参数的其他配置来确认。如果有其他配置,你可以将其注释掉或者修改为正确的值,然后重新加载 sysctl 配置:
```
$ sysctl -p
```
如果还是无法解决问题,你可以尝试升级内核版本,或者与 Linux 内核社区寻求帮助。
相关问题
vm.admin_reserve_kbytes = 8192 vm.block_dump = 0 vm.compact_unevictable_allowed = 1 vm.dirty_background_bytes = 0 vm.dirty_background_ratio = 10 vm.dirty_bytes = 0 vm.dirty_expire_centisecs = 3000 vm.dirty_ratio = 20 vm.dirty_writeback_centisecs = 500 vm.dirtytime_expire_seconds = 43200 vm.drop_caches = 3 vm.extfrag_threshold = 500 vm.hugepages_treat_as_movable = 0 vm.hugetlb_shm_group = 0 vm.laptop_mode = 0 vm.legacy_va_layout = 0 vm.lowmem_reserve_ratio = 256 256 32 1 vm.max_map_count = 65530 vm.memory_failure_early_kill = 0 vm.memory_failure_recovery = 1 vm.min_free_kbytes = 67584 vm.min_slab_ratio = 5 vm.min_unmapped_ratio = 1 vm.mmap_min_addr = 65536 vm.mmap_rnd_bits = 28 vm.mmap_rnd_compat_bits = 8 vm.nr_hugepages = 0 vm.nr_hugepages_mempolicy = 0 vm.nr_overcommit_hugepages = 0 vm.numa_stat = 1 vm.numa_zonelist_order = Node vm.oom_dump_tasks = 1 vm.oom_kill_allocating_task = 0 vm.overcommit_kbytes = 0 vm.overcommit_memory = 0 vm.overcommit_ratio = 50 vm.page-cluster = 3 vm.panic_on_oom = 0 vm.percpu_pagelist_fraction = 0 vm.stat_interval = 1 vm.swappiness = 60 vm.user_reserve_kbytes = 131072 vm.vfs_cache_pressure = 100 vm.watermark_scale_factor = 10 vm.zone_reclaim_mode = 0
这是一个包含多个与虚拟内存相关的系统参数的列表。以下是其中一些参数的解释:
- `vm.max_map_count`:最大映射数量,限制了内存中可以同时映射的页面数量,从而影响了缓存的大小。
- `vm.dirty_background_bytes` 和 `vm.dirty_background_ratio`:脏页的阈值,当脏页的数量超过该阈值时,系统会开始写回脏页。
- `vm.dirty_bytes` 和 `vm.dirty_ratio`:系统允许脏页占用的内存大小的上限。
- `vm.min_free_kbytes`:系统保留的空闲内存的大小,当空闲内存低于该值时,系统会开始清理缓存。
- `vm.swappiness`:控制系统在内存不足时使用交换空间的程度,该参数的值越高,系统越可能使用交换空间。
你可以使用 `sysctl` 命令来修改这些参数的值,具体的命令如下:
```
sysctl -w <parameter>=<value>
```
其中 `<parameter>` 表示参数名,`<value>` 表示你希望设置的值。请注意,该命令的修改是临时的,如果你想要永久生效,需要将修改写入到 `/etc/sysctl.conf` 配置文件中。
Open memory.oom_control for reading. Create a file descriptor for notification by doing eventfd(0, 0). Write "<fd of open()> <fd of eventfd()>" to cgroup.event_control.具体怎么使用,请举例子说明
以下是一个使用以上步骤实现cgroup内存限制的例子:
1. 创建一个新的cgroup组,例如mygroup:
```
$ sudo mkdir /sys/fs/cgroup/memory/mygroup
```
2. 设置该cgroup组的内存限制:
```
$ sudo sh -c "echo 100M > /sys/fs/cgroup/memory/mygroup/memory.limit_in_bytes"
```
这里将mygroup组的内存限制设置为100MB。
3. 打开memory.oom_control文件,以便读取其中的内容:
```
$ sudo cat /sys/fs/cgroup/memory/mygroup/memory.oom_control
```
4. 使用Linux系统调用eventfd()创建一个用于通知的文件描述符:
```
$ sudo sh -c "echo 0 > /sys/fs/cgroup/memory/mygroup/cgroup.event_control"
$ sudo sh -c "echo 1 > /sys/fs/cgroup/memory/mygroup/cgroup.event_control"
```
这里使用eventfd(0, 0)创建一个用于通知的文件描述符,并将其写入cgroup.event_control文件中。
5. 将打开oom_control文件的文件描述符和eventfd创建的文件描述符写入cgroup.event_control文件中:
```
$ sudo sh -c "echo $(cat /sys/fs/cgroup/memory/mygroup/memory.oom_control) $(cat /sys/fs/cgroup/memory/mygroup/cgroup.event_control | cut -d: -f2) > /sys/fs/cgroup/memory/mygroup/cgroup.event_control"
```
这里将打开oom_control文件的文件描述符和eventfd创建的文件描述符写入cgroup.event_control文件中。
现在,当mygroup组中的进程占用的内存超过100MB时,将会触发oom事件,系统会使用eventfd通知cgroup,cgroup再通过oom_control文件中的设置,控制进程的oom行为。
阅读全文