标签: oom-killer

Rsync 在单个 50 GB 文件上触发 Linux OOM 杀手

我在 server_A 上有一个 50 GB 的文件,我正在将它复制到 server_B。我跑

server_A$ rsync --partial --progress --inplace --append-verify 50GB_file root@server_B:50GB_file
Run Code Online (Sandbox Code Playgroud)

Server_B 有 32 GB RAM 和 2 GB 交换。它主要是空闲的,应该有很多空闲内存。它有足够的磁盘空间。在大约 32 GB 时,传输中止,因为远程端关闭了连接。

Server_B 现在已断开网络。我们要求数据中心重新启动它。当我查看崩溃前的内核日志时,我看到它使用了 0 字节的交换空间,并且进程列表使用了很少的内存(rsync 进程被列为使用 600 KB 的 RAM),但是 oom_killer 是变得疯狂,日志中的最后一件事是它杀死了 metalog 的内核读取器进程。

这是内核 3.2.59,32 位(因此任何进程都不能映射超过 4 GB)。

就好像 Linux 更优先考虑缓存而不是长期运行的守护进程。是什么赋予了??我怎样才能阻止它再次发生?

这是 oom_killer 的输出:

Sep 23 02:04:16 [kernel] [1772321.850644] clamd invoked oom-killer: gfp_mask=0x84d0, order=0, oom_adj=0, oom_score_adj=0
Sep 23 02:04:16 [kernel] [1772321.850649] Pid: 21832, comm: clamd Tainted: G         C   3.2.59 #21
Sep 23 02:04:16 …
Run Code Online (Sandbox Code Playgroud)

rsync oom oom-killer

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

Linux oom情况(32位内核)

我有持续的 oom&panic 情况未解决。我不确定系统是否填满了所有内存(36GB)。为什么这个系统会触发这种oom情况?我怀疑它与 32 位 linux 系统中的 lowmem 区域有关。如何分析内核恐慌和 oom-killer 的日志?

此致,

内核 3.10.24

Dec 27 09:19:05 2013 kernel: : [277622.359064] squid invoked oom-killer: gfp_mask=0x42d0, order=3, oom_score_adj=0
Dec 27 09:19:05 2013 kernel: : [277622.359069] squid cpuset=/ mems_allowed=0
Dec 27 09:19:05 2013 kernel: : [277622.359074] CPU: 9 PID: 15533 Comm: squid Not tainted 3.10.24-1.lsg #1
Dec 27 09:19:05 2013 kernel: : [277622.359076] Hardware name: Intel Thurley/Greencity, BIOS 080016  10/05/2011
Dec 27 09:19:05 2013 kernel: : [277622.359078]  00000003 e377b280 e03c3c38 c06472d6 e03c3c98 …
Run Code Online (Sandbox Code Playgroud)

linux kernel-panic oom oom-killer

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

扩展 Logstash(使用 redis/elasticsearch)

在超过 12 个 centos 5.8 服务器的集群上,我使用本地 logstash 发送器部署了 logstash,该发送器将发送/var/log/*/*.log回中央 Logstash 服务器。

我们尝试使用 rsyslogd 作为托运人,但由于 rsyslogd 的 ImFile 模块中的错误,如果远程端没有回复,日志将堆积在内存中。

我们目前使用 Redis 作为传输机制,因此 logstash01 已在本地运行 redis,绑定到这些日志的 VLAN 的 IP。

所以logstash-shipper 发送到logstash01 上的redis。logstash01 发送到在单独进程中运行的 Elasticsearch。

这就是我们所看到的。Elasticsearch 有 141 个阻塞线程。跟踪 elasticsearch 父项显示:

futex(0x7f4ccd1939d0, FUTEX_WAIT, 26374, NULL
Run Code Online (Sandbox Code Playgroud)

这是来自elasticsearch的jstack

这是来自 logstash 的 jstack

所以.. 昨晚,一些网络服务器(其日志由 logstash 跟踪)发疯了,平均负载超过 500。

在logstash01上,有这个

Dec 19 00:44:45 logstash01 kernel: [736965.925863] Killed process 23429 (redis-server) total-vm:5493112kB, anon-rss:4248840kB, file-rss:108kB
Run Code Online (Sandbox Code Playgroud)

所以OOM杀手杀死了Redis的服务器,然后指原木堆放在内存里面是已上市的东西..而服务器上莫名其妙意味着阿帕奇获取其短裤的扭曲。(坦率地说,我不确定如何,我只是假设它拖尾了日志)。

这是我关于事件如何展开的理论:

  1. 我们遇到了交通高峰。
  2. 产生了大量的日志。
  3. 这些堆积在 Redis 中,因为 logstash/elasticsearch 似乎只能每秒处理 300-400 …

redis elasticsearch logstash oom-killer

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

在 OOM 杀手日志中查看完整的程序命令行参数

是否可以在 OOM 杀手日志中查看完整的程序命令行参数?我现在在 /var/log/syslog 中看到的是

Memory cgroup out of memory: Kill process 29187 (beam.smp) score 998 or sacrifice child
Killed process 29302 (cpu_sup) total-vm:4300kB, anon-rss:76kB, file-rss:272kB
beam.smp invoked oom-killer: gfp_mask=0xd0, order=0, oom_score_adj=0
beam.smp cpuset=/ mems_allowed=0-3
Run Code Online (Sandbox Code Playgroud)

我的机器上有很多 beam.smp 进程,要找出被 OOM 杀手杀死的特定进程不是很方便。

linux linux-kernel oom-killer

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

MongoDB 被 OOM 杀死

我们在三台机器上运行一个 mongodb 副本集。三台机器都有大约 16GB 但只有 255MB Swap。Swappiness 保留其默认值 60。机器运行 CentOS 6.4。数据库比 16GB 大得多,但这对我们来说没问题。真正的工作集要小得多。

我们面临的问题是主要消耗会耗尽所有可用内存,而不是被 OOM 杀死。我知道这就是 mongodb 管理内存的方式。

服务器被 OOM 杀死后,必须手动重新启动它。

有什么办法可以防止 mongodb 被 OOM 杀死?调整swappiness?增加交换空间?我认为这些设置只会增加 mongod 被杀之前的宽限期。

mongodb oom-killer

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

linux OOM-kill 为什么?

. 问候,各位管理员。我发帖是希望阐明困扰我公司一台机器的 OOM 致死问题。我无法决定它们是否是合法的 OOM。

这是一个 Centos 6.x,内核为 2.6.32-279.1.1.el6.x86_64。

内存 8 GB,CPU athlon2-x4。

大进程是 mysql 和 vmware player 4,最大分别为 2 GB 和 4 GB 的 ram 不断分配加上一些开销。(Vmware 被杀死了,因为它的体积更大。)

除了这两个之外还有守护进程在运行,但它们非常小,而且负载很轻,所以我不明白剩下的 1/1.5 gig ram 会在哪里消失,不算巨大的交换......

此外,只有在夜间运行备份 cronjobs 时才会发生杀戮。(这些是带有标准工具的简单 shell 脚本,可以转储一些数据库并压缩一些 Web 和邮箱目录。)

例如,在这里,它正在执行 mysqldump —— 这是第一次发生在这个特定任务上。当我运行大目录树(约 100 万个小文件)的 rsyncs 或 zip 文件时,几乎每次都会发生这种情况,还伴随着“页面分配失败”。但是我用 zfs 将所有这些都移到了另一台机器上:在这次操作之后,凶手让我一个人呆了一段时间..

我讨厌在处理这个问题几个月后,阅读并重新阅读互联网上的每个线程后,我仍然无法将这些信息与我的案例联系起来。有交换,为什么不交换而不是杀死?谁拿走了所有的公羊?(一开始有几个合法的内存泄漏者,我得到了它们。)也不能碎片化,因为失败的请求是零阶的..

我在实际杀死日志之前粘贴了一些数据:

vm.swappiness = 100
vm.vfs_cache_pressure = 5000
vm.min_free_kbytes = 262144

(我添加了这些来尝试修复它,它们可能有点极端,但无论如何它运行顺利)

我也尝试过 overcommit_memory=2,但徒劳无功。这不是应该禁用杀手吗?

这是系统的正常内存状态。请注意,由于使用了 mmap 的 vmem,vmware 的 ram 算作缓存。顺便说一下,vmware 设置为允许回收/交换 vm 内存。它永远不会这样做。 …

linux virtual-machines centos6 oom-killer

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

Docker 如何处理 OOM 杀手和内存限制?

我有一个 docker 容器,它通过 bash 脚本启动一个简单的 java(基于 jgroups)应用程序。java进程通过Xmx被限制为128m,容器允许使用256m(swap被禁用)。不幸的是,我有时会遇到以下 OOM 消息:

Jul 07 02:43:54 ip-10-1-2-125 kernel: oom_kill_process: 16 callbacks suppressed
Jul 07 02:43:54 ip-10-1-2-125 kernel: java invoked oom-killer: gfp_mask=0x2400040, order=0, oom_score_adj=0
Jul 07 02:43:54 ip-10-1-2-125 kernel: java cpuset=0ead341e639c2f2bd27a38666aa0834c969e8c7e6d2fb21516a2c698adce8d5f mems_allowed=0
Jul 07 02:43:54 ip-10-1-2-125 kernel: CPU: 0 PID: 26686 Comm: java Not tainted 4.4.0-28-generic #47-Ubuntu
Jul 07 02:43:54 ip-10-1-2-125 kernel: Hardware name: Xen HVM domU, BIOS 4.2.amazon 05/12/2016
Jul 07 02:43:54 ip-10-1-2-125 kernel:  0000000000000286 000000006ffe9d71 ffff8800bb3c7c88 ffffffff813eb1a3
Jul 07 02:43:54 ip-10-1-2-125 kernel:  ffff8800bb3c7d68 …
Run Code Online (Sandbox Code Playgroud)

oom-killer docker

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

请帮忙解读OOM-Killer

我们正在测试我们的 Java 应用程序,它被 OOM Killer 杀死,日志如下。

几点:这是一个java web 应用程序。它以 190G 的堆运行。服务器是一个总内存240G的EC2实例。我们正在 JDK 11 中尝试新的实验性 ZGC。当时应用程序没有负载,在类似 prod 的测试环境中运行。应用程序确实有一些由计划触发的处理,可能是内存和 CPU 密集型的,但这些处理经常运行并且没有失败。

应用程序代码与我们在生产中的代码没有显着变化。我们也成功地对此进行了负载测试,包括 12 小时的浸泡测试,没有问题。

现在到 OOM-Killer 日志。完整日志如下,但我觉得很奇怪的一件事是这一行:

Dec 18 23:24:59 ip-10-0-3-36 kernel: [  775.571217] Killed process 4973 (java) total-vm:17181703924kB, anon-rss:9740kB, file-rss:0kB, shmem-rss:0kB
Run Code Online (Sandbox Code Playgroud)

虚拟机总大小约为 17 TB。这对我来说很奇怪,因为我们的应用程序甚至不会尝试正常请求这个。我怀疑我们可能遇到了一些 ZGC 或 ZGC+我们的代码错误,但我想确保我读对了。

我非常感谢任何帮助,完整的日志供参考:

Dec 18 23:24:59 ip-10-0-3-36 kernel: [  775.158902] java invoked oom-killer: gfp_mask=0x14200ca(GFP_HIGHUSER_MOVABLE), nodemask=(null),  order=0, oom_score_adj=0
Dec 18 23:24:59 ip-10-0-3-36 kernel: [  775.166556] java cpuset=/ mems_allowed=0
Dec 18 23:24:59 ip-10-0-3-36 kernel: [  775.168975] CPU: 15 …
Run Code Online (Sandbox Code Playgroud)

linux java oom-killer

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

Mysql 崩溃、oom-killer、内存不足、调优问题?

我刚刚将我所有的网站都移到了具有 4GB RAM 的新服务器上。几乎立即,mysql 开始崩溃,并且有一次没有重新启动,这导致了一次重大中断(因为我没有注意到,直到有人向我指出)。

这是删除 CRON 作业的日志:http : //pastebin.com/9SAUBcFp(apache2 调用了 oom-killer、内存不足错误等)

在没有df -h超过4%的使用率。

这是 free -m 的输出

             total       used       free     shared    buffers     cached
Mem:          4002       2090       1911          0        168       1015
-/+ buffers/cache:        906       3095
Swap:          255          8        247
Run Code Online (Sandbox Code Playgroud)

这是 mysqlreport 的输出

__ Key _________________________________________________________________
Buffer used   849.00k of  16.00M  %Used:   5.18
  Current       2.99M            %Usage:  18.71
Write hit      44.87%
Read hit       98.84%

__ Questions ___________________________________________________________
Total         198.55k    33.8/s
  QC Hits     147.94k    25.1/s  %Total:  74.51
  DMS          31.35k …
Run Code Online (Sandbox Code Playgroud)

mysql performance memory outofmemoryerror oom-killer

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

是否建议在 systemd 中为可替换服务设置 OOMScoreAdjust=1000?

systemd 有一个OOMScoreAdjust选项,它允许调整启动进程的 oom-killer 分数。

引用systemd 文档

OOMScoreAdjust=

为已执行的进程设置内存不足杀手的调整级别。取一个介于 -1000(禁用此进程的 OOM 终止)和 1000(在内存压力下很可能终止此进程)之间的整数。有关详细信息,请参阅proc.txt

在我的设置中,我在 AWS 上部署了一个 NodeJs 服务器。除了 Node 服务器之外,EC2 实例上没有其他运行(除了监控和基本的 OS 进程)。有 ELB 运行状况检查,最终应该会替换损坏的 EC2 实例。

不过,我想知道如果OOMScoreAdjust存在内存问题,增加内核是否更喜欢杀死 Node 服务器进程是否被认为是一种好习惯,因为它可以自动重新启动。在 systemd 中,它可能如下所示:

OOMScoreAdjust=1000
Restart=always
Run Code Online (Sandbox Code Playgroud)

我不得不承认我的理解是有限的。我目前的理解是它很可能不会产生真正的影响,最好保留默认值:

  • 如果内存耗尽进程是 Node 服务器,它很可能无论如何都会被杀死。
  • 如果罪魁祸首是另一个进程,重启 Node 服务器将无济于事,ELB 健康检查最终应该负责替换实例。

不过,我很好奇是否有更了解的人已经考虑过了。启用它只会是 systemd 脚本中的一行。如果有疑问,我宁愿让内核杀死 Node 进程,而不是任何随机系统服务。

amazon-web-services systemd oom-killer

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

使用 atop 对 oom-killer 进行故障排除:它是否已修复?

我有一个带有 4GB 内存、2GB 交换和 2 个 CPU 的 Debian 系统。我遇到了许多涉及 oom-killer 的系统故障。系统将在一分钟内正常工作,下一分钟将无法操作,控制台上会显示大量 oom-killer 消息。我已经两次添加了 1GB 的 RAM。 5

令我感到困惑的是,我使用 xymon 监控系统,并且没有提前收到任何警告。我有 CPU、网络和 ram 利用率的图表,但我没有看到其中任何一个表明存在问题的大“尖峰”。我会发布它们,但目前没有足够的声誉。

我发现了6。我也通过vmcom和vmlim得到一条红线。我/proc/sys/vm/overcommit_ratio从50改为90,红线消失了。如您所见,我有 500MB 可用内存、2GB 可用交换空间、1.2G 缓存。

我解决了问题,还是告诉 atop/linux 忽略它?

我想要一个稳定的系统。展望未来,我应该:

  1. 向下调整 Apache、Sendmail 等的最大子参数?使用ulimit?
  2. 调整 oom-killer sysctl 值以让我利用所有可用的内存和交换?
  3. 调整 swappiness 或其他内核值?

我正在寻找更好的方法来计算上述问题的答案。

谢谢。

ATOP输出

ATOP - www1               2013/06/20  10:32:14               10 seconds elapsed
PRC | sys   1.34s | user   7.48s | #proc    347 | #zombie    2 | #exit     53 |
CPU | sys     11% …
Run Code Online (Sandbox Code Playgroud)

linux debian oom-killer

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

了解 OOM 杀手日志

我在 docker 容器中运行了一些进程,并且我对该容器使用了内存限制。有时 docker 容器内的一些进程被 OOM 杀手杀死。我在 syslog 文件中看到:

beam.smp invoked oom-killer: gfp_mask=0xd0, order=0, oom_score_adj=0
beam.smp cpuset=/ mems_allowed=0
CPU: 0 PID: 20908 Comm: beam.smp Not tainted 3.13.0-36-generic #63~precise1-Ubuntu
Hardware name: Xen HVM domU, BIOS 4.2.amazon 05/23/2014
 ffff880192ca6c00 ffff880117ebfbe8 ffffffff817557fe 0000000000000007
 ffff8800ea1e9800 ffff880117ebfc38 ffffffff8174b5b9 ffff880100000000
 000000d08137dd08 ffff880117ebfc38 ffff88010c05e000 0000000000000000
Call Trace:
 [<ffffffff817557fe>] dump_stack+0x46/0x58
 [<ffffffff8174b5b9>] dump_header+0x7e/0xbd
 [<ffffffff8174b64f>] oom_kill_process.part.5+0x57/0x2d4
 [<ffffffff81075295>] ? has_ns_capability_noaudit+0x15/0x20
 [<ffffffff8115b709>] ? oom_badness.part.4+0xa9/0x140
 [<ffffffff8115ba27>] oom_kill_process+0x47/0x50
 [<ffffffff811bee4c>] mem_cgroup_out_of_memory+0x28c/0x2b0
 [<ffffffff811c122b>] mem_cgroup_oom_synchronize+0x23b/0x270
 [<ffffffff811c0ac0>] ? memcg_charge_kmem+0xf0/0xf0
 [<ffffffff8115be08>] pagefault_out_of_memory+0x18/0x90
 [<ffffffff81747e91>] mm_fault_error+0xb9/0xd3
 [<ffffffff81766267>] ? __do_page_fault+0x317/0x570
 [<ffffffff81766495>] __do_page_fault+0x545/0x570 …
Run Code Online (Sandbox Code Playgroud)

linux cgroup oom-killer docker

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