【标题描述】能够简要描述问题:说明什么场景下,做了什么操作,出现什么问题(尽量使用正向表达方式)
一、缺陷信息
内核信息:
5.10.0-136.16.0.92.oe2203sp1
5.10.0-136.53.0.132.oe2203sp1
这两个版本的内核都存在问题
缺陷归属组件:
缺陷归属的版本:
缺陷简述:
2023-11-08 17:31:55 Processing PID: 126442 - yum
[<0>] __lock_page_killable+0x122/0x3d0
[<0>] lock_page_maybe_drop_mmap+0x90/0x130
[<0>] filemap_fault+0x3be/0x790
[<0>] ext4_filemap_fault+0x2d/0x50 [ext4]
[<0>] __do_fault+0x37/0x200
[<0>] do_read_fault+0x31/0xf0
[<0>] do_fault+0x75/0x150
[<0>] __handle_mm_fault+0x3a2/0x680
[<0>] handle_mm_fault+0xbc/0x290
[<0>] exc_page_fault+0x26d/0x5e0
[<0>] asm_exc_page_fault+0x1e/0x30
【环境信息】
硬件信息
【问题复现步骤】,请描述具体的操作步骤
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <string.h>
#define SIZE 1*1024*1024 //1M
int main()
{
void *ptr = NULL;
int i = 0;
for (i;i<1024*6-50;i++) {
ptr = (void *) malloc(SIZE);
if (ptr == NULL) {
printf("malloc err!");
return -1;
}
memset(ptr,0,SIZE);
}
sleep(99999);
free(ptr);
return 0;
}
#!/bin/bash
while true
do
awk '{ printf "%f MB\n", $1/(1024*1024) }' /sys/fs/cgroup/memory/system.slice/docker-$(docker inspect -f '{{.Id}}' dockerhub_centos7).scope/memory.memsw.usage_in_bytes
sleep 1
done
9.如果在出问题的时候,把占用内存的进程 kill掉,马上恢复正常
【实际结果】,请描述出问题的结果和影响
【其他相关附件信息】
比如系统message日志/组件日志、dump信息、图片等
缺陷详情参考链接:
缺陷分析指导链接:
https:xxx
此处可能存在不合适展示的内容,页面不予展示。您可通过相关编辑功能自查并修改。
如您确认内容无涉及 不当用语 / 纯广告导流 / 暴力 / 低俗色情 / 侵权 / 盗版 / 虚假 / 无价值内容或违法国家有关法律法规的内容,可点击提交进行申诉,我们将尽快为您处理。
yum进程在读取文件页时,采用预读机制读取多个页,并在内存达到限额后触发内存回收,导致在memcg内存不足时文件页来回振荡,IO很高;由于预读不会尝试OOM,只有在读取要访问的页时才会在16次回收失败的情况下触发OOM,导致OOM的触发条件难以达成,因此卡住很久。该问题本质上是相比于4.18内核,5.10内核回收效率更高,未快速触发OOM。
已向美团提供补丁,在预读时,如果某个页分配失败,则停止预读。该补丁已保证99%场景下快速OOM。
登录 后才可以发表评论