vSphere Client を快適にするならヒープは今でも増やしたほうがいい話

# vCenter のメモリ設定をカスタマイズして、vSphere Client を快適に使おうというお話
出典: https://blog.kstyle.net/2023/01/14/vsphere-ui-heap/

vCenter Server 6.0 の頃から使われている方は、以下の KB によくお世話になったんじゃないでしょうか。

vmware-dataservice-sca and vsphere-client status change from green to yellow (2144950)
https://kb.vmware.com/s/article/2144950

これは、flash 版の vsphere web client (vsphere-client) に割り当てているヒープメモリが足りず
健全性のエラーを繰り返してしまうからヒープメモリを増やして不要なアラームを抑制しようとするものです。

実は、vCenter 8.0 でもデフォルトのままだとヒープメモリがやや少ないので、アラームは出ないにしても拡張しておいたほうがよさそうです。

## 初期状態の vCenter のヒープメモリサイズ

```bash
root@vcsa801 [ ~ ]# cloudvm-ram-size -S | egrep "applmgmt|vsphere-ui|AllocatedMB|TOTAL"
Service-Name            AllocatedMB     MaxMB CurrentMB  Curr-RSS    Cache  MapFiles   MemoryLimit
applmgmt                        236     14067      2133       171     1961       230 8796093022207
vsphere-ui                     1193      2006      1254       950      304         1 8796093022207
TOTAL(RAM=21054.328125MB)      4972     38835     37181     12215     6996       743 8796093022207
```

AllocatedMB : 許可されたヒープメモリサイズ。AllocatedMB >= Curr-RSS
MaxMB       : 今までで最も消費された RSS+Cache
CurrentMB   : Curr-RSS + Cache
Curr-RSS    : 現在の RSS(物理メモリ消費)
Cache       : 現在の File Cache。 OS管理

こんな感じです。
applmgmt の MaxMB がすごいことになってますが、これは一度 vami から upgrade をかけたからですね。
で、vSphere Client(vsphere-ui) ですが、RSS が AllocatedMB の 80% まできていて窮屈そうです。

コマンドでみてみると、-Xmx 937m となっていることもわかります。

```bash
root@vcsa801 [ ~ ]# ps -eo user,pid,ppid,%cpu,%mem,vsz:8,rss:8,lstart,cputime,cmd | egrep "RSS|vsphere-ui" | cut -b-200
USER        PID   PPID %CPU %MEM      VSZ      RSS                  STARTED     TIME CMD
vsphere+  48939  24067  0.1  4.1  4171232   895580 Thu Jan  5 08:19:22 2023 00:11:42 /usr/java/jre-vmware/bin/vsphere-ui.launcher -Xmx937m -XX:CompressedClassSpaceSize=256m -Xss320k -XX:ParallelGCThre
```

## ヒープメモリサイズを増やしてみる
KB にならって vsphere-ui のヒープメモリサイズを拡張してみます。どれぐらいが妥当か？という議論はありますが、自分の環境にもよるのでこれは運用してみないとわかりません。とりあえず4GBにして様子を見てみましょう。

cloudvm-ram-size -C xxx でサイズを指定します

```bash
root@vcsa801 [ ~ ]# cloudvm-ram-size -C 4096 vsphere-ui
```

コマンド実行後、vsphere-ui の AllocatedMB が増えたことがわかります。
でも、Curr-RSS は増えていません。プロセスを再起動するまで -Xmx937m が変わらないからです。

```bash
root@vcsa801 [ ~ ]# cloudvm-ram-size -S | egrep "applmgmt|vsphere-ui|AllocatedMB|TOTAL"
Service-Name            AllocatedMB     MaxMB CurrentMB  Curr-RSS    Cache  MapFiles   MemoryLimit
applmgmt                        223     14067      2133       171     1961       230 8796093022207
vsphere-ui                     4352      2006      1254       950      304         1 8796093022207
TOTAL(RAM=21054.328125MB)      7541     38835     37201     12220     7001       744 8796093022207
```

反映させるために、vsphere-ui を再起動します。

```bash
root@vcsa801 [ ~ ]# vmon-cli -r vsphere-ui
Completed Restart service request.
```

再起動後、-Xmx4096m にしっかり増えています。
```bash
root@vcsa801 [ ~ ]# ps -eo user,pid,ppid,%cpu,%mem,vsz:8,rss:8,lstart,cputime,cmd | egrep "RSS|vsphere-ui" | cut -b-200
USER        PID   PPID %CPU %MEM      VSZ      RSS                  STARTED     TIME CMD
vsphere+  29661  24067  104  5.6  7248516  1214876 Thu Jan 12 13:25:49 2023 00:01:08 /usr/java/jre-vmware/bin/vsphere-ui.launcher -Xmx4096m -XX:CompressedClassSpaceSize=256m -Xss320k -XX:ParallelGCThr
```

## vSphere Client 起動直後
なんと、起動直後の vsphere-ui ですでに Curr-RSS が前回の制限値 1193 を超えています。

```bash
root@vcsa801 [ ~ ]# cloudvm-ram-size -S | egrep "applmgmt|vsphere-ui|AllocatedMB|TOTAL"
Service-Name            AllocatedMB     MaxMB CurrentMB  Curr-RSS    Cache  MapFiles   MemoryLimit
applmgmt                        223     14067      2133       171     1961       230 8796093022207
vsphere-ui                     4352      2006      1729      1197      531         1 8796093022207
TOTAL(RAM=21054.328125MB)      7541     38835     38351     12555     7241       751 8796093022207
```

## 1度 vSphere Client からログインしたところ
vsphere-ui の Curr-RSS は更に増えて 1356 に増えています。使用環境（インベントリ数、プラグイン等）によってメモリ要件は変わるので一概には言えませんが、しばらくこれで使ってみて Curr-RSS が増えていかないか見てみるといいでしょう。

```bash
root@vcsa801 [ ~ ]# cloudvm-ram-size -S | egrep "applmgmt|vsphere-ui|AllocatedMB|TOTAL"
Service-Name            AllocatedMB     MaxMB CurrentMB  Curr-RSS    Cache  MapFiles   MemoryLimit
applmgmt                        223     14067      2133       171     1961       230 8796093022207
vsphere-ui                     4352      2006      1897      1356      540         1 8796093022207
TOTAL(RAM=21054.328125MB)      7541     38839     38595     12662     7255       758 8796093022207
```

## まとめ
vCenter の vSphere Client サービスのヒープメモリサイズは初期設定のままだとちょっと小さい。
そのままでも使えるけれど、無用なガベージ・コレクションを引き起こしてしまいます。
デフォルト値から増やして、GUIを快適に利用しましょう。

## 参考資料
Manually increasing the heap memory on vCenter Server components in vCenter 6.x / 7.x (2150757)
https://kb.vmware.com/s/article/2150757