标签: out-of-memory

如果内存不足,请重新启动系统?

我需要通过 SSH 在远程计算机上运行一些内存繁重的测试。上次我这样做时,计算机停止响应,需要有人物理重新启动它。

有没有一种方法可以设置它,以便在使用太多内存时系统重新启动而不是冻结?(我确实有 root 访问权限)。内核版本为 4.9.0。

linux reboot out-of-memory

3
推荐指数
1
解决办法
2269
查看次数

Docker“无法分配内存”——虚拟内存调优

我们正在 AWS EC2 内构建在 Centos7 之上的 Jenkins 实例中构建或运行 Docker 容器。我们有 2 个带有 2 个 CPU 和 3.5 Gb 可用内存的 t2.medium 盒实例。
在一种情况下,我们正在另一个中构建容器,我们只是拉动它们并运行(不同的容器)。

我们开始出现错误

open /var/lib/docker/overlay/<sha>-init/merged/dev/console: cannot allocate memory
Run Code Online (Sandbox Code Playgroud)

journalctl我们得到

page allocation failure: order:4
Run Code Online (Sandbox Code Playgroud)

运行页面缓存转储可以暂时解决问题

echo 1 > /proc/sys/vm/drop_caches
Run Code Online (Sandbox Code Playgroud)

所以我注意到在运行 docker 任务时,Dirty内存块会出现峰值(应该如此)并Mapped在它之后跳跃。然而,DirectMap4k相对接近那个跳跃。

例如:
闲置机器

cat /proc/meminfo | grep -P "(Dirty|Mapped|DirectMap4k)"
Dirty:               104 kB
Mapped:            45696 kB
DirectMap4k:      100352 kB
Run Code Online (Sandbox Code Playgroud)

主动机

cat /proc/meminfo | grep -P "(Dirty|Mapped|DirectMap4k)"
Dirty:             72428 kB
Mapped:            70192 kB
DirectMap4k: …
Run Code Online (Sandbox Code Playgroud)

rhel kernel memory out-of-memory docker

3
推荐指数
1
解决办法
7030
查看次数

OOM Killer内存统计报告中的缩写是什么意思?

当 OOM Killer 或内核报告内存状态时,它使用以下缩写

Node 0 DMA: 26*4kB (M) 53*8kB (UM) 33*16kB (ME) 23*32kB (UME) 6*64kB (ME) 7*128kB (UME) 1*256kB (M) 2*512kB (ME) 0*1024kB 0*2048kB 0*4096kB = 4352kB
Node 0 DMA32: 803*4kB (UME) 3701*8kB (UMEH) 830*16kB (UMH) 2*32kB (H) 0*64kB 0*128kB 1*256kB (H) 0*512kB 0*1024kB 0*2048kB 0*4096kB = 46420kB
Run Code Online (Sandbox Code Playgroud)

我理解其中一些,例如M——可动UMH——不可动高。但我找不到什么办法E 在哪里可以找到有关它的文档?

我的情况,我有下一条消息

page allocation stalls for 27840ms, order:0, mode:0x14200ca(GFP_HIGHUSER_MOVABLE)
Run Code Online (Sandbox Code Playgroud)

进程请求 4kb 页是什么意思(2^0 * 4kb),应该编码为 (MH) 我说得对吗?或者HIGHUSER以不同的方式编码?

linux out-of-memory

3
推荐指数
1
解决办法
1210
查看次数

查找占用大量内存且在`ps` 或类似内容中不可见的内容

我有一个存在内存问题的虚拟机。我想在其中运行的任务之一是因内存不足错误而崩溃。

然而,当它崩溃时,系统仍然保持内存不足。我不确定这是否只是我遗漏的一个进程,还是一个实际的错误(这是在 hyper-v 中,具有允许 linux 主机内存膨胀的新内核扩展,因此它很可能是一个真正的内核错误)。

durr@sqlbox:~$ free -h
             total       used       free     shared    buffers     cached
Mem:          3.1G       2.6G       541M        88K       7.4M        39M
-/+ buffers/cache:       2.5G       588M
Swap:         1.0G       6.2M       1.0G
Run Code Online (Sandbox Code Playgroud)

Free 告诉我,它不只是缓存,实际上有一些东西似乎正在占用 2.6G 内存。

但是,查看按虚拟大小排序的 PS 输出并不具有启发性:

durr@sqlbox:~$ ps -e ax -o pid,vsz,comm | sort --numeric-sort --key=2
[ ... snip ... ]
  PID    VSZ COMMAND
   96      0 rcuob/23
   97      0 rcuob/24
   98      0 rcuob/25
   99      0 rcuob/26
 1124   4368 acpid
59863  10016 ps
 1031  15668 upstart-file-br
 1047  15820 getty
 1050 …
Run Code Online (Sandbox Code Playgroud)

memory out-of-memory

2
推荐指数
1
解决办法
647
查看次数

Overcommit_memory =0 中的启发式算法是什么意思?

我通读了 man proc 的文档。当谈到 overcommit_memory 时,overcommit_memory=0 中的启发式不太好理解。启发式实际上是什么意思?

“不检查使用 MAP_NORESERVE 调用 mmap(2)”是否意味着内核只分配虚拟内存而不知道交换空间的存在?

该文件包含内核虚拟内存记帐模式。值是:

                     0:启发式过量使用(这是默认设置)
                     1:总是过量使用,从不检查
                     2:始终检查,永远不要过度使用

              模式0下,不检查mmap(2)和MAP_NORESERVE的调用,默认检查很弱,导致风险
              获得一个进程“OOM 杀死”。

除了前面的问题,虚拟地址空间耗尽是否会导致 OOM,而不管剩余的物理内存是否足够。

谢谢。

kernel memory out-of-memory

2
推荐指数
1
解决办法
996
查看次数

由于 RAM Cache + Buffer 增加,RAM Free 会随着时间的推移而减少

在服务器级别可视化一些与内存相关的指标时,我得到一个如下所示的图表:

图表

蓝线下方的区域是RAM Used。红线下方和蓝线上方的区域是RAM Cache + Buffer。黑线下方和红线上方的区域是RAM Free。橙色线以下和黑色线以上的区域是SWAP Used

正如您在图表中看到的:RAM Used随着时间的推移略有减少(或至少没有增加)。但 RAM Free 也在减少,因为RAM Cache + Buffer.

我们尝试估计此服务器将来是否会耗尽内存,因此创建了一条RAM Free明显减少的趋势线,因此趋势分析表明,RAM Free在不久的将来不会再有内存问题,并且会出现内存问题。

我现在的问题是:

  • 这是一种有效的方法还是我们应该专注于组合指标(例如RAM Free+ Ram Cache + Buffer)或仅关注RAM Used
  • 强烈减少RAM Free和增加RAM Cache + Buffer是关于可用内存的危险信号还是无需担心?
  • 如果这根本不是有效的方法,那么可以从这样的可视化或这样的指标中得出什么?

linux memory out-of-memory

2
推荐指数
1
解决办法
298
查看次数

禁用 sysrq f (OOM-killer) 但保留其他 sysrq 键可操作

我正在遵循一个在启动时自动解密硬盘驱动器的指南,使用自生成的密钥和 tpm2 变量,接近尾声时,它使这一点似乎有意义: https: //blastrock.github.io/fde- tpm-sb.html#disable-the-magic-sysrq-key

神奇的 SysRq 键允许运行一些特殊的内核操作。默认情况下,最危险的功能是禁用的,您应该保持这种状态以获得最大的安全性。

例如,其中之一 (f) 将调用 OOM-killer。此功能可能会杀死您的锁屏,从而使恶意用户能够完全访问您的桌面。

问题是我只找到了如何禁用所有sysrq 键,例如https://askubuntu.com/questions/911522/how-can-i-enable-the-magic-sysrq-key-on-ubuntu-desktophttps ://askubuntu.com/questions/11002/alt-sysrq-reisub-doesnt-reboot-my-laptop,使用添加/etc/sysctl.d/90-sysrq.conf以下行的文件:

kernel.sysrq=1
Run Code Online (Sandbox Code Playgroud)

我希望如果可能的话能够使用所有其他键,例如 REISUB,以防系统崩溃,并且只禁用该F键。

我还发现这篇文章https://www.kernel.org/doc/html/latest/admin-guide/sysrq.html,其中提到添加一个位掩码,例如:

  2 =   0x2 - enable control of console logging level
  4 =   0x4 - enable control of keyboard (SAK, unraw)
  8 =   0x8 - enable debugging dumps of processes etc.
 16 =  0x10 - enable sync command
 32 =  0x20 - enable remount read-only
 64 =  0x40 - …
Run Code Online (Sandbox Code Playgroud)

magic-sysrq out-of-memory

2
推荐指数
1
解决办法
337
查看次数

内存不足时创建交换区

内存不足是一个常见问题,官方的 OOM 效率不高。为了更快地完成查杀工作,还引入了其他几个程序。

我想知道为什么没有办法创建交换而不是杀死。考虑一个没有交换的系统,OOM 程序可以触发sudo swapon /swapfile(假设swapfile存在)而不是杀死进程。

实施这个想法有技术限制吗?

linux memory swap out-of-memory

1
推荐指数
1
解决办法
781
查看次数

标签 统计

out-of-memory ×8

memory ×5

linux ×4

kernel ×2

docker ×1

magic-sysrq ×1

reboot ×1

rhel ×1

swap ×1