require session sessmgr-per-vcpu コマンド使用時の注意点についての記事です。十分に注意して使用しない場合、ssh アクセスができなくなると言った問題を引き起こす可能性があります。
UP のアップグレード作業を実施した後、ユーザートラフィックを流し始めた頃から ssh でのアクセスができなくなり、SSD の取得等ができなくといったことが起こりました。
Syslog を見ると、unreserved memory の不足により新規 task の作成ができないことを示すメッセージが出ています。
2025-02-16T20:00:02.356245+09:00 uhn3sne4upda0001 evlogd: [local-60sec11.518] uhn3sne4upda0001 [resmgr 14704 warning] [1/0/8061 <rmctrl:0> rmctrl_events.c:902] [software internal system critical-info syslog] The resources needed for task vpnmgr/3 could not be adjusted. Reason: CPU 1/0: insufficient unreserved memory (-13372M avail), mem: total: 167772160, used: 57724380, reclaimable: 355980, unused_reserved: 134583196, available: -24179436, realloc mem: 172945→174197
UP 上で Usable メモリーがマイナスとなっており、やはりメモリが不足している様子が確認できます。
[local]UP01# show cpu info verbose
Memory Usage : 56299M 34.4% used, 345M 0.2% reclaimable
Memory Details:
Static : 2317M kernel, 194M system files
System : 4M tmp, 89M buffers, 234M kcache, 545M cache
Process/Task : 21943M (5336M small, 13198M huge, 3408M other)
Other : 31315M shared data
Free : 107194M free
Usable : -13541M usable (107194M free, 31315M shared data, 345M reclaimable, 131321M reserved by tasks)
今回のアップグレード作業ではアップグレード以外に Hyper Threading を有効にする変更を行いました。Hyper Threading は1つの CPU で複数のスレッドを実行できるようにする技術であり、UP 上の vCPU を2倍に増やすことで、リソースを効率的に使用できるようにするためのものとなります。
vCPU の数が倍になったことで、UP 上で立ち上がる sessmgr の数も2倍になっています。
アップグレード前:
----sessmgr--- ----aaamgr---- demux
cpu state active standby active standby active status
---- ------- ------ ------- ------ ------- ------ -------------------------
1/0 Active 20 1 20 1 8 Good
アップグレード後:
----sessmgr--- ----aaamgr---- demux
cpu state active standby active standby active status
---- ------- ------ ------- ------ ------- ------ -------------------------
1/0 Active 40 1 40 1 8 Good
実際にアップグレード前に76925Mだったreserved memoryのサイズが、アップグレード後に136583Mに増えています。
アップグレード前:
Usable : 62768M usable (129111M free, 14494M shared data, 343M reclaimable, 76925M reserved by tasks)
アップグレード後:
Usable : 1951M usable (127939M free, 16700M shared data, 356M reclaimable, 136583M reserved by tasks)
ただ、通常 Hyper Threading に変更する場合は vCPU 当たりの sessmgr を減らすようにするのが普通です。vCPU 当たりの sessmgr の数を決めるコマンドは require session sessmgr-per-vcpu であり、今回もアップグレード作業の中で設定を変更していました。
アップグレード前:
show config:
require session sessmgr-per-vcpu 2
アップグレード後:
show config:
表示なし(デフォルトの require session sessmgr-per-vcpu 1 になっているはず)
このような設定であれば、Hyper Threading を有効にしても、sessmgr が増えることはないはずです。
アップグレード時の手順を確認したところ、アップグレード後に require session sessmgr-per-vcpu 2 を実施した後に require session sessmgr-per-vcpu 1 を実行していたことがわかりました。これは、require session sessmgr-per-vcpu コマンドが vCPU 当たりの sessmgr を増やす場合には即時に有効になるものの、sessmgr の数を減らす場合には再起動が必要となる動作のためです。
本来、require session sessmgr-per-vcpu コマンドは運用の途中で設定変更するようなコマンドではなく、設定変更時には(増やす場合であっても)再起動が必要というのがガイドラインとなっています。