NFSファイルサーバの過負荷試験(*1)を行ったところ、Panicに😑。
syslogを確認したところ、”mbuf_jumbo_9k”に警告が出たので、ネットワーク関係のカーネルパラメータをチューニングしました【注*2】。
1. トラブルを発生させてみた
2.5GbE下で、NFS書込み/読込の比較をした結果にどうも釈然としないので、過負荷試験を実施。
とりあえず、メモリー容量を32Gbyte(32Gbyte:シングルチャンネル)から16Gbyte(8Gbyte×2:デュアルチャンネル)にスペックダウンしてテスト。
NFSクライアント(Ubuntu24.04)から”dd if=/dev/urandom of=/mnt/nfs_zfs/100G.dummy_U2F bs=1M count=102400”等でファイル書込/読込。
何回か、NFS書込/読込を繰り返すと、カーネルがpanicで落.ち.た.😑(*3)。
panicになる直前に”[zone: mbuf_jumbo_9k] kern.ipc.nmbjumbo9 limit reached”のメッセージが。。。。

”top”コマンドで確認すると、CPUのロードが4.0越え😵(*4)。
しかも、nfsdのcpu利用率が200%近く(*5)😵。
2.カーネルパラメータのチューニング
(1)原因調査
”mbuf_jumbo_9k”は、2.5GbEを使い始める前は見たことがないパラメータなので🤔、調べてみると、MTU[*6]のパラメータを/etc/sysctl.confに設定すれば良いとのこと[*7]。
(2)デフォルトの設定値を確認
デフォルトは"73941"。

(3)パラメータ変更
デフォルトの2倍にパラメータ(*8)を変更してみます。
| root@file_sv:# sysctl kern.ipc.nmbjumbo9="147882" |
また、””[zone: mbuf_jumbo_9k] kern.ipc.nmbjumbo9 limit reached””が出たので😅、panicで落ちる前に、NFS書込みを中止。
デフォルトの4倍にパラメータを変更してみます。
| root@file_sv:# sysctl kern.ipc.nmbjumbo9="295764" |
”mbuf_jumbo_9k”のワーニングは出なくなりました😀。
"netstat -m"コマンドで確認すると、”9k jumbo clusters”は、max:295764に対して、 total:181906なので、最大値内には収まるようになりました😀。
(4)システム設定変更
確認したパラメータを起動時に有効になる様に、/etc/sysctl.confに設定しておきます。
| root@file_sv:# cd /etc | ; | ディレクトリ移動。 |
| root@file_sv:# vi /etc/sysctl.conf | ; | 設定ファイル編集。 |
下記の黄色字部分を追加します。
|
[..] # are being run under another UID.
|
出典・引用・備考
*1:実運用に入る前の、今だから試せますが。。。😅
メインファイルサーバーのメンテする際は、できるだけ早く実運用に戻したいですし😀。
*2:この投稿の内容は、特定の機種並びに特定の環境での確認結果になります。
同等機種や異なる環境での動作他を保証するものではありませんので、ご留意いただけます様お願いいたします。
*3:過負荷を掛けたので、トラブルが発生するとは思っていましたが、
正直、カーネルがpanicで落ちるとは思っていませんでした😅。
*4:load averagesが2.0越えを見たのは、FreeBSD4.xでMySQLに過負荷を掛けて以来です😅。
*5:4Coreなので最大400%
*6:MTU(Maximum Transmission Unit)とは、 ノードが隣接したネットワークへ、1回の通信で転送可能な最大のIPデータグラム(IPパケット)サイズ。
引用元:"MTUとは"、一般社団法人日本ネットワークインフォメーションセンター(JPNIC)、https://www.nic.ad.jp/ja/basics/terms/mtu.html、最終閲覧日:2025年3月11日
*7:"kernel: [zone: mbuf_jumbo_9k] kern.ipc.nmbjumbo9 limit reached"、https://forum.netgate.com/topic/80094/kernel-zone-mbuf_jumbo_9k-kern-ipc-nmbjumbo9-limit-reached/3、最終閲覧日:2025年3月11日
*8:この数値はスイッチやコンピューターの搭載メモリー容量によって異なるので、
スイッチのデータシートもしくはホワイトペーパーで確認するか、
トライアンドエラーで設定する必要があります。