はじめに
このドキュメントでは、Cisco Virtualized Infrastructure Manager(CVIM)コンピュートノードの高メモリ使用率に関連する問題を分析する手順について説明します。
前提条件
要件
Linuxのメモリ管理とHugePagesに関する知識があることが推奨されます。
HugePagesとは
HugePagesを有効にすると、オペレーティングシステムは既定(通常4 KB)より大きいメモリページをサポートできます。非常に大きなページサイズを使用すると、ページテーブルエントリへのアクセスに必要なシステムリソースが減り、システムパフォーマンスが向上します。その結果、HugePagesは通常、メモリ遅延を軽減するために使用されます。
事象の説明
CVIMがアラートをトリガーしていないにもかかわらず、CVIMコンピューティングノードでメモリ使用量が多いアラートが発生する。メモリ使用率に関連するアラートは、サードパーティ製のモニタリングツールまたはモニタリングダッシュボードを使用して生成できます。
分析
OSのメモリ使用率が高くなることが free
と sar
コマンドの出力をLinuxで表示します。
[root@cvim-computex ~]# free -m
total used free shared buff/cache available
Mem: 385410 365882 7602 3621 11925 8411
Swap: 2047 0 2047
[root@cvim-computex ~]# sar -r
Linux 4.18.0-193.81.1.el8_2.x86_64 (pod1-compute4.mx2) 08/24/2023 _x86_64_ (112 CPU)
12:00:46 AM kbmemfree kbavail kbmemused %memused kbbuffers kbcached kbcommit %commit kbactive kbinact kbdirty
12:10:34 AM 7493576 7871200 387166528 98.10 4240 9334356 12893752 3.25 4891940 6325076 68
12:20:11 AM 7503208 7883396 387156896 98.10 4240 9337364 12872708 3.24 4885008 6328096 16
12:30:34 AM 7485648 7869540 387174456 98.10 4240 9340556 12902748 3.25 4892948 6331276 36
12:40:46 AM 7494396 7880940 387165708 98.10 4240 9343636 12866964 3.24 4886908 6334364 20
12:50:34 AM 7479616 7869772 387180488 98.10 4240 9346720 12905156 3.25 4892408 6337444 56
01:00:46 AM 7490304 7883016 387169800 98.10 4240 9349832 12860152 3.24 4885308 6340500 56
01:10:34 AM 7472248 7868672 387187856 98.11 4240 9352836 12896932 3.25 4892604 6343556 28
01:20:46 AM 7484308 7883276 387175796 98.10 4240 9355948 12867972 3.24 4885172 6346676 16
01:30:34 AM 7475092 7869596 387185012 98.11 4240 9350840 12904328 3.25 4892448 6341556 44
01:40:46 AM 7485436 7882508 387174668 98.10 4240 9353932 12864252 3.24 4885148 6344660 56
01:50:34 AM 7468840 7869520 387191264 98.11 4240 9357036 12907464 3.25 4893552 6347752 164
02:00:46 AM 7479076 7882428 387181028 98.10 4240 9360124 12861892 3.24 4886044 6350844 68
ps
コマンドを発行して、メモリ使用量が最も高いプロセスを特定します。
[root@cvim-computex ~]# ps -aux --sort -rss
USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND
root 328199 1207 0.2 541893584 ? RLl Mar12 2948779:31 /usr/bin/vpp -c /etc/vpp/vpp.conf
root 1829 0.0 0.0 379024 227692 ? Ss Mar12 14:21 /usr/lib/systemd/systemd-journald
CLIで統計情報をチェックして、コンテナのメモリ使用量を確認します。 podman
または docker
コマンドを発行します。
[root@cvim-computex ~]# podman stats
ID NAME CPU % MEM USAGE / LIMIT MEM % NET IO BLOCK IO PIDS
2f8fdc4b63a4 fluentd_31902 -- 301.2MB / 404.1GB 0.07% -- / -- 9.265MB / 89.68GB 75
34d806a30733 novalibvirt_31902 -- 42.16MB / 404.1GB 0.01% -- / -- 589.8kB / 22.13MB 44
48292d2fa956 novassh_31902 -- 5.882MB / 404.1GB 0.00% -- / -- 475.1kB / 167.3MB 2
7b2ce84e86b3 novacompute_31902 -- 231.8MB / 404.1GB 0.06% -- / -- 761.9kB / 2.43GB 49
89c01c14ef3f neutron_vpp_31902 -- 1.209GB / 404.1GB 0.30% -- / -- 0B / 7.66MB 35
提供された出力によると、高いメモリ使用率を示すプロセスはないように思われます。さらに、コンテナは少量のメモリを使用しているようです。
「 free
コマンドを実行しても、高いメモリ使用率が表示されます。
root@cvim-computex ~]# free -m
total used free shared buff/cache available
Mem: 385410 366751 7310 3496 11348 7696
Swap: 2047 5 2042
[root@cvim-computex ~]#
トラブルシュート
このメモリ使用率を理解するには、HugePageメモリの知識が不可欠です。
ポッドがHugePagesで有効になっている場合は、システムメモリがVMの起動に使用されないように、適切なフレーバーを使用するように注意する必要があります。VMのシステムメモリの使用は、ワークロードとインフラストラクチャの両方がインフラストラクチャ用に予約されたリソースを奪い合うため、CVIMが不安定になる可能性があります。
HugePagesを確認します。
[root@cvim-computex ~]# tail /sys/devices/system/node/node0/hugepages/hugepages-2048kB/nr_hugepages
90001
[root@cvim-computex ~]# tail /sys/devices/system/node/node0/hugepages/hugepages-1048576kB/nr_hugepages
0
[root@cvim-computex ~]# tail /sys/devices/system/node/node1/hugepages/hugepages-2048kB/nr_hugepages
90000
[root@cvim-computex ~]# tail /sys/devices/system/node/node1/hugepages/hugepages-1048576kB/nr_hugepages
0
[root@cvim-computex ~]#
nr_hugepages
は、HugePagesの総数です。
(90001 + 90000) x 2M = 360GBはHugePage用に予約されています。
また、HugePageが100 %構成されている場合でも、物理メモリ全体の5 %のメモリが通常のメモリページ(4 KB)用に予約され、OSが使用されることに注意してください。
385GB (合計フリー) - 360GB (HugePage用に予約) = 25GBは通常のページ用に予約されています。
したがって、メモリ使用率が高くなります。 sar
と free
コマンドが必要です。
上記のコマンドを使用して、実際のメモリ使用量を確認します。
[root@mgmt-node ~]# ip -br -4 a s br_api
br_api UP 10.x.x.x/24
[root@mgmt-node ~]# curl -sS -g -u admin:password --cacert /var/www/mercury/mercury-ca.crt https://10.x.x.x:9090/api/v1/query --data-urlencode 'query=100 * (mem_free + mem_buffered + mem_cached) / ((mem_total - sum without(NUMAnode, pagename, pagesize) (hugepages_nr)) or mem_total)' | python -mjson.tool
sample output:
{
"status": "success",
"data": {
"resultType": "vector",
"result": [
{
"metric": {
"host": "cvim-computex",
"instance": "10.x.x.x:9273",
"job": "telegraf",
"node_type": "compute"
},
"value": [
1693479719.383,
"76.16486394450624" --> Actual available memory percentage.
]
},
{
"metric": {
"host": "cvim-computey",
"instance": "10.x.x.x:9273",
"job": "telegraf",
"node_type": "compute"
},
"value": [
1693479719.383,
"76.63431887455388"
CVIMは、使用可能なメモリが10 %未満の場合にのみアラートをトリガーします。
アラート名: mem_available_percent
使用可能なシステムメモリが10 %未満である。通常の4Kページのメモリは、システムとOpenStackインフラストラクチャサービスの両方で使用され、大きなページは含まれません。このアラートは、システムまたはインフラストラクチャによるRAMの不足または異常なメモリ使用を示す可能性があります。