我在 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) 我有持续的 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) 在超过 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)
所以.. 昨晚,一些网络服务器(其日志由 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的服务器,然后指原木堆放在内存里面是已上市的东西..而服务器上莫名其妙意味着阿帕奇获取其短裤的扭曲。(坦率地说,我不确定如何,我只是假设它拖尾了日志)。
这是我关于事件如何展开的理论:
是否可以在 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 杀手杀死的特定进程不是很方便。
我们在三台机器上运行一个 mongodb 副本集。三台机器都有大约 16GB 但只有 255MB Swap。Swappiness 保留其默认值 60。机器运行 CentOS 6.4。数据库比 16GB 大得多,但这对我们来说没问题。真正的工作集要小得多。
我们面临的问题是主要消耗会耗尽所有可用内存,而不是被 OOM 杀死。我知道这就是 mongodb 管理内存的方式。
服务器被 OOM 杀死后,必须手动重新启动它。
有什么办法可以防止 mongodb 被 OOM 杀死?调整swappiness?增加交换空间?我认为这些设置只会增加 mongod 被杀之前的宽限期。
. 问候,各位管理员。我发帖是希望阐明困扰我公司一台机器的 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 内存。它永远不会这样做。 …
我有一个 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) 我们正在测试我们的 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) 我刚刚将我所有的网站都移到了具有 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) 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)
我不得不承认我的理解是有限的。我目前的理解是它很可能不会产生真正的影响,最好保留默认值:
不过,我很好奇是否有更了解的人已经考虑过了。启用它只会是 systemd 脚本中的一行。如果有疑问,我宁愿让内核杀死 Node 进程,而不是任何随机系统服务。
我有一个带有 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 忽略它?
我想要一个稳定的系统。展望未来,我应该:
我正在寻找更好的方法来计算上述问题的答案。
谢谢。
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) 我在 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) oom-killer ×12
linux ×6
docker ×2
oom ×2
centos6 ×1
cgroup ×1
debian ×1
java ×1
kernel-panic ×1
linux-kernel ×1
logstash ×1
memory ×1
mongodb ×1
mysql ×1
performance ×1
redis ×1
rsync ×1
systemd ×1