网关是一个管道架构,在管道的每个阶段之间具有一个切换队列。由于通过网关的流量具有突发性,预计切换队列中偶尔会出现数据包堆积。不过,如果在某些队列中队列长度持续较高,则表示存在容量问题。
以下示例显示 debug.py 命令输出以查看切换队列输出。
为了简洁起见,截断了输出以仅显示第一个和最后一个条目。您可以在命令中排除 -v 选项以使用表格格式查看输出。
vcadmin@vcg1-example:~$ /opt/vc/bin/debug.py -v --handoff
{
"handoffq": [
{
"deq": 1087872263,
"drops": 0,
"dummy": 81805328,
"enq": 1087872265,
"head": 81805328,
"lockfree": 0,
"next": 0,
"qlength": 2,
"qlimit": 2048,
"sleeping": 1,
"state": "UNMONITORED",
"tail": 81805328,
"wmark": 948,
"wokenup": 817162303
},
…
{
"deq": -1801919228,
"drops": 0,
"dummy": 176733280,
"enq": -1801919223,
"head": 176733280,
"lockfree": 0,
"name": "glob_ls_0",
"next": 0,
"qlength": 5,
"qlimit": 1024,
"sleeping": 1,
"state": "UNMONITORED",
"tail": 176733280,
"wmark": 1024,
"wokenup": 1567885088
}
]
}
vcadmin@vcg1-example:~$
您需要关注 qlength 和 wmark 值。
qlength 列指示当前在队列中缓冲的数据包数。wmark 列指示队列曾经到达的最大深度,这表示网关距离丢弃数据包有多远。这些问题的影响和修复在很大程度上取决于监控的队列。
您应同时监控关键队列和非关键队列。