0

这是运行 Linux 的实例上的 dmesg 命令的输出,可能会处理内存紧缩。这些日志的含义有什么帮助吗?


dmesg | tail -n 25
[23498.234294]  warn_alloc+0x114/0x1c0
[23498.238447] ena 0000:00:05.0 eth0: refilled rx qid 1 with only 64 buffers (from 131)
[23498.242537]  __alloc_pages_slowpath+0xce2/0xd20
[23498.242541]  ? ___slab_alloc+0xc1/0x4b0
[23498.242544]  ? get_page_from_freelist+0x525/0xba0
[23498.268528]  __alloc_pages_nodemask+0x25d/0x280
[23498.271780]  ena_refill_rx_bufs+0x55/0x2c0 [ena]
[23498.275046]  ena_clean_rx_irq+0x4ac/0x840 [ena]
[23498.278303]  ? netif_receive_skb_internal+0x42/0xe0
[23498.281698]  ena_io_poll+0x2d1/0x720 [ena]
[23498.284738]  net_rx_action+0x156/0x3f0
[23498.287680]  __do_softirq+0xe3/0x2c7
[23498.290553]  irq_exit+0xbd/0xd0
[23498.391684]  do_IRQ+0x89/0xe0
[23498.394364]  common_interrupt+0x85/0x85
[23498.397335]  </IRQ>
[23498.399697] RIP: 0033:0x7fb8c2cc8ad4
[23498.402642] RSP: 002b:00007f98402f3ea0 EFLAGS: 00000216 ORIG_RAX: ffffffffffffff73
[23498.408552] RAX: 00007fb8b5f52815 RBX: 00007f9a190e9678 RCX: 00007f986351ede0
[23498.412754] RDX: 0000000000000164 RSI: 00007fb812079d50 RDI: 00007f99dbfa83d4
[23498.416948] RBP: 0000000000001fae R08: 0000000000000164 R09: 0000000000000075
[23498.421138] R10: 00007fb812079d38 R11: 0000000000000074 R12: 00007faee54d9ba0
[23498.425357] R13: 0000000000000001 R14: 0000000000000007 R15: 00007fb8b5f52800
[23498.429598] ena 0000:00:05.0 eth0: failed to alloc buffer for rx queue 0
[23498.433666] ena 0000:00:05.0 eth0: refilled rx qid 0 with only 62 buffers (from 132)

另外,有哪些潜在的方法,

  1. 做进一步的根本原因分析?
  2. 缓解问题?
4

1 回答 1

3

日志的第一部分是函数调用栈,从中我们可以看出这与ENA网络驱动有关,当好友系统尝试分配一个页面时,由于内存不足而失败。

从第二部分,我们知道了确切的消息:“未能为 rx 队列 0 分配缓冲区”。

谷歌之后,我找到了一个对你有帮助的博客。这是摘要。

当 napi 处理程序无法重新填充新的 Rx 描述符时,将引发此消息,通常是由于内存不足。鉴于必须重新安排某些请求,这种情况可能会导致性能下降。

解决方案与“min_free_kbytes”内核参数的内存增加有关。例如:

vm.min_free_kbytes = 1048576

将以下命令放在 /etc/sysctl.conf 中。并使用以下命令加载新设置:

sysctl -p

建议至少有 512MB,对于受限环境,至少有 128MB。在运行压力作业的大型实例类型(例如 64+ vCores + 256GiB + RAM)上,此值通常可以设置为 10MB。

于 2021-01-07T02:26:46.410 回答