"nf_conntrack: falling back to vmalloc" のメッセージが /var/log/messages に 表示される
Environment
- Red Hat Enterprise Linux (RHEL) (すべてのバージョン)
Issue
複数のメッセージ "kernel: nf_conntrack: falling back to vmalloc
" が /var/log/messages
ファイルに記録されます。
~~~
kernel: nf_conntrack: falling back to vmalloc.
kernel: nf_conntrack: falling back to vmalloc.
~~~
Resolution
vm.min_free_kbytes
sysctl の値を増やします。
このチューナブルの現在の値は、次のように表示できます。
$ cat /proc/sys/vm/min_free_kbytes
67584
そして、以下のような設定で 2 倍にします。
vm.min_free_kbytes = 135168
- 設定は
/etc/sysctl.conf
に適用し、#sysctl -p
を使用してロードできます。 - より多くのメモリーを解放できるように、この値を何度か倍増し続けることができます。
- システムの使用状況にもよりますが、システムメモリーの 5-10% を超えない範囲で設定する必要があります。カーネルは、メモリーをすぐに利用できるようにするためにさまざまな操作を実行することから、
vm.min_free_kbytes
をより大きな値に設定すると、カーネルが誤ってメモリーを回収し、パフォーマンスに悪影響を与える可能性があります。
- ダウンタイムをスケジューリングしてシステムを再起動すると、メモリーの断片化問題が解決し、エラーが消えます。
Root Cause
- カーネルは、2 つの方法 (kmalloc と vmalloc) を使用してメモリーを割り当てます。Kmalloc は連続した物理ブロックを割り当てますが、連続したブロックが利用できず、カーネルが vmalloc メソッドにフォールバックすると失敗します。
- vmalloc は、実質的に連続しているだけのメモリーを割り当てることを意味します。報告されたエラーは、メモリーが断片化され、カーネルが割り当て用の連続した空きページを取得できない場合に表示されます。
vm.min_free_kbytes
sysctl パラメーターは、lowmem free の最小しきい値を決定します。最も重要なカーネル操作用に最小限のメモリー量を解放しておくために使用します。- つまり、マシンで使用可能なメモリーが不足した場合に、このパラメーターにより、最も重要な操作のために少なくともいくらかのメモリーが常に確保されます。
- 注: RHEL 8 ではこの警告は表示されなくなりました。以下が警告を削除したときのコミットです。
netfilter: nf_conntrack: silence warning on falling back to vmalloc()
Since 88eab472ec21 ("netfilter: conntrack: adjust nf_conntrack_buckets default
value"), the hashtable can easily hit this warning. We got reports from users
that are getting this message in a quite spamming fashion, so better silence
this.
diff --git a/net/netfilter/nf_conntrack_core.c b/net/netfilter/nf_conntrack_core.c
index 651039a..f168099 100644
--- a/net/netfilter/nf_conntrack_core.c
+++ b/net/netfilter/nf_conntrack_core.c
@@ -1544,10 +1544,8 @@ void *nf_ct_alloc_hashtable(unsigned int *sizep, int nulls)
sz = nr_slots * sizeof(struct hlist_nulls_head);
hash = (void *)__get_free_pages(GFP_KERNEL | __GFP_NOWARN | __GFP_ZERO,
get_order(sz));
- if (!hash) {
- printk(KERN_WARNING "nf_conntrack: falling back to vmalloc.\n");
+ if (!hash)
hash = vzalloc(sz);
- }
if (hash && nulls)
for (i = 0; i < nr_slots; i++)
Diagnostic Steps
-
/var/log/messages ファイルで "
kernel: nf_conntrack: falling back to vmalloc
" メッセージを検索します。$ grep 'kernel: nf_conntrack: falling back to vmalloc' /var/log/messages* kernel: nf_conntrack: falling back to vmalloc kernel: nf_conntrack: falling back to vmalloc
This solution is part of Red Hat’s fast-track publication program, providing a huge library of solutions that Red Hat engineers have created while supporting our customers. To give you the knowledge you need the instant it becomes available, these articles may be presented in a raw and unedited form.
Comments