在 EC2 ebs 支持的 xlarge ubuntu 实例上,正在调用 oom-killer。从下面的 /var/log/syslog 输出来看,似乎 ZONE_NORMAL 内存不足:
Node 0 Normal free:11344kB min:11556kB low:14444kB high:17332kB active_anon:10936284kB inactive_anon:144kB active_file:688kB inactive_file:740kB
Run Code Online (Sandbox Code Playgroud)
但为什么 ZONE_NORMAL 只分配了 15GB 总 RAM 中的 11MB?或者是否有其他原因导致内存不足?
机器(xlarge 实例)上可用的 RAM 为 15GB。下面日志中 rss 列的总和为 3.7GB,total_vm 的总和为 11.4GB。
Dec 11 08:53:53 ip-10-60-61-71 kernel: [19427969.456146] node invoked oom-killer: gfp_mask=0x84d0, order=0, oom_adj=0, oom_score_adj=0
Dec 11 08:53:53 ip-10-60-61-71 kernel: [19427969.456153] node cpuset=/ mems_allowed=0
Dec 11 08:53:53 ip-10-60-61-71 kernel: [19427969.456157] Pid: 639, comm: node Not tainted 2.6.38-1-virtual #28-Ubuntu
Dec 11 08:53:53 …Run Code Online (Sandbox Code Playgroud) 我已经看到提到保护 /dev/shm 和 /proc ,我想知道你是如何做到这一点的,它包括做什么?我认为这涉及某种权利的 /etc/sysctl.conf 编辑。
像这些?
kernel.exec-shield = 1
kernel.randomize_va_space = 1
Run Code Online (Sandbox Code Playgroud) 我们有 2 台 Red Hat 服务器,专门用于客户速度测试。它们都使用 10Gb 光纤连接并位于 10Gb 链路上。这些服务器之间的所有网络设备都完全支持 10Gb/s。使用 Iperf 或 Iperf3,我能得到的最好的速度大约是 6.67Gb/s。话虽如此,一台服务器正在生产中(客户正在使用它),另一台服务器在线但未使用。(我们用它来测试 atm) 6.67Gb/s 也是一种方式,我应该提一下。我们将这些称为服务器 A 和服务器 B。
当服务器 A 作为 iperf 服务器时,我们获得了 6.67Gb/s 的速度。当服务器 A 作为服务器 B 的客户端时,它只能推送大约 20Mb/s。
我做了什么:
到目前为止,我所做的唯一一件事就是将两台服务器上的 TX/RX 缓冲区增加到最大值。一个设置为 512,另一个设置为 453。(仅 RX,TX 已经最大化)所以这里是更新后的样子:
Server A:
Ring parameters for em1:
Pre-set maximums:
RX: 4096
RX Mini: 0
RX Jumbo: 0
TX: 4096
Current hardware settings:
RX: 4096
RX Mini: 0
RX Jumbo: 0
TX: 4096
Server B:
Ring parameters for p1p1:
Pre-set maximums: …Run Code Online (Sandbox Code Playgroud) 我正在运行 Linux 2.6.36 内核,并且看到一些随机错误。像
ls: error while loading shared libraries: libpthread.so.0: cannot open shared object file: Error 23
Run Code Online (Sandbox Code Playgroud)
是的,我的系统无法始终如一地运行“ls”命令。:(
我注意到我的 dmesg 输出中有几个错误:
# dmesg | tail
[2808967.543203] EXT4-fs (sda3): re-mounted. Opts: (null)
[2837776.220605] xv[14450] general protection ip:7f20c20c6ac6 sp:7fff3641b368 error:0 in libpng14.so.14.4.0[7f20c20a9000+29000]
[4931344.685302] EXT4-fs (md16): re-mounted. Opts: (null)
[4982666.631444] VFS: file-max limit 1231582 reached
[4982666.764240] VFS: file-max limit 1231582 reached
[4982767.360574] VFS: file-max limit 1231582 reached
[4982901.904628] VFS: file-max limit 1231582 reached
[4982964.930556] VFS: file-max limit 1231582 reached
[4982966.352170] VFS: file-max …Run Code Online (Sandbox Code Playgroud) 上周,关于 Unix(或 Linux)机器是否需要重新启动的slashdot 文章有相当多的评论。不止一些评论者提到拥有运行时间长达数年的机器。
据我了解,Linux 机器需要经常重启才能应用内核补丁,尤其是与安全相关的补丁(例如ac1db1tch3z 漏洞利用)。在“yum update kernel”之后运行 uname -r 似乎表明旧内核在重新启动之前不会加载。
我的问题是,鉴于此,这些盒子如何实现多年的正常运行时间?我想到的一些可能的解决方案
这些解释中的任何一个是否合理,还是我的理解中缺少某些东西?有没有另一种方法可以最大限度地减少过去两年所需的两打左右的重新启动?
我有一个运行名为 ABC 的应用程序的多用户 CentOS 6.1 数据库系统。服务器为 64 位、8GB RAM 和 6 个 vCPU(在 VMWare ESXi 4 上)。我们经常转储到 dmesg 和系统日志中,详细说明内核页面分配失败。
在这种情况下,这些消息意味着什么?我们该如何补救?
Feb 5 08:10:52 Fruity kernel: ABC: page allocation failure. order:1, mode:0x20
Feb 5 08:10:52 Fruity kernel: Pid: 23588, comm: ABC Not tainted 2.6.32-131.17.1.el6.x86_64 #1
Feb 5 08:10:52 Fruity kernel: Call Trace:
Feb 5 08:10:52 Fruity kernel: <IRQ> [<ffffffff8112016e>] ? __alloc_pages_nodemask+0x71e/0x8b0
Feb 5 08:10:52 Fruity kernel: [<ffffffff81159a52>] ? kmem_getpages+0x62/0x170
Feb 5 08:10:52 Fruity kernel: [<ffffffff8115a66a>] ? fallback_alloc+0x1ba/0x270
Feb 5 08:10:52 Fruity …Run Code Online (Sandbox Code Playgroud) 我有一个服务器(带有 24GB RAM 的单插槽 Nehalem)主要用作 KVM 主机,其中包含一堆 Windows 服务器和一些(无滴答声)Linux 实例。
我通常使用 BFS CPU 调度程序(通过 CK 补丁集)和 BFQ 磁盘调度程序编译可抢占的桌面内核,使用 1000 Hz 无滴答计时器。在服务器上,我使用 CFQ 以 100 Hz 无滴答声进行所有操作,并且没有强制抢占。
但是,我没有时间或技能对此进行基准测试,因此我正在寻找有关 KVM 内核最佳设置的一些输入。虚拟机的吞吐量会从 1000 Hz 内核中受益吗?
并且,使用 BFS 调度程序会不会是一个坏主意?我听说它也可能给单 CPU 服务器带来好处。我也在考虑在禁用low_latency 选项的情况下使用 BFQ 磁盘调度程序。
任何人都可以指出我正确的方向吗?当涉及到低级系统的东西时,我是一个新手。:-)
今天我正在运行一些 yum 更新,并想通过确保我有一个新内核来验证一切是否正常。令我惊讶的是,我注意到 CentOS 仍在运行 2.6.32-431.5.1.el6.x86_64,尽管看起来好像安装了 2.6.32-431.23.3.el6。
实际上 2.6.32-431.23.3.el6 出现在 /etc/grub.conf 中,但没有出现在 upstart 引导选项中。任何想法为什么?
在更新日志中它说:
---> Package kernel-firmware.noarch 0:2.6.32-431.5.1.el6 will be updated
---> Package kernel-firmware.noarch 0:2.6.32-431.23.3.el6 will be an update
Run Code Online (Sandbox Code Playgroud)
这可能是原因吗?“将是更新”是什么意思?
我的/etc/grub.conf:
# grub.conf generated by anaconda
#
# Note that you do not have to rerun grub after making changes to this file
# NOTICE: You have a /boot partition. This means that
# all kernel and initrd paths are relative to /boot/, eg.
# root (hd0,0)
# kernel …Run Code Online (Sandbox Code Playgroud) 谁能告诉我我运行什么命令来确定我的 10G 网卡是在单 RX-TX 队列模式还是多队列模式下运行?根据它看起来只有 1 个 RX/TX 队列cat /proc/interrupts
root@hostname:scripts]# cat /proc/interrupts | grep ens1f0
94: 360389979 0 0 0 184 0 330 0 0 0 0 0 0 0 0 0 0 169 0 0 0 0 0 0 0 0 0 0 0 0 0 0 IR-PCI-MSI-edge ens1f0-TxRx-0
95: 4 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 …Run Code Online (Sandbox Code Playgroud) 我正在运行一个没有交换的 Linux 工作站,并且我已经安装了earlyoom守护进程,以便在 RAM 不足时自动终止一些进程。它earlyoom通过监视内核MemAvailable值来工作,如果可用内存变得足够低,它会杀死不太重要的进程。
这已经工作了很长一段时间,但突然间我遇到了MemAvailable与系统其他部分相比突然非常低的情况。例如:
$ grep -E '^(MemTotal|MemFree|MemAvailable|Buffers|Cached):' /proc/meminfo
MemTotal: 32362500 kB
MemFree: 5983300 kB
MemAvailable: 2141000 kB
Buffers: 665208 kB
Cached: 4228632 kB
Run Code Online (Sandbox Code Playgroud)
请注意 MemAvailable 远低于MemFree+ Buffers+ Cached。
我可以运行任何工具来进一步调查为什么会发生这种情况吗?我觉得系统性能比正常情况要差一些,我不得不停止该服务,因为除非稳定(即它正确地描述了用户模式进程的可用内存),earlyoom否则它的逻辑将无法工作。MemAvailable
根据https://superuser.com/a/980821/100154 MemAvailable 是对可用于启动新应用程序(无需交换)的内存量的估计。由于我没有交换,这是什么意思?这是否意味着在触发 OOM Killer 之前新进程可以获取的内存量(因为这在逻辑上会遇到“交换已满”的情况)?
我曾假设MemAvailable>=MemFree总是正确的。不在这里。
附加信息:
在互联网上搜索表明,原因可能是打开的文件不受文件系统支持,因此无法从内存中释放。该命令sudo lsof | wc -l输出653100所以我绝对无法手动浏览该列表。
顶部sudo slabtop说
Active / Total Objects (% used) …Run Code Online (Sandbox Code Playgroud) kernel ×10
linux ×6
10gbethernet ×1
amazon-ec2 ×1
centos ×1
centos6 ×1
debugging ×1
interrupts ×1
memory-usage ×1
networking ×1
nic ×1
redhat ×1
rhel6 ×1
security ×1
tcp ×1
ubuntu ×1
yum ×1