网关是一个管道架构,在管道的每个阶段之间具有一个切换队列。由于通过网关的流量具有突发性,预计切换队列中偶尔会出现数据包堆积。不过,如果在某些队列中队列长度持续较高,则表示存在容量问题。

以下示例显示 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:~$ 

您需要关注 qlengthwmark 值。

qlength 列指示当前在队列中缓冲的数据包数。wmark 列指示队列曾经到达的最大深度,这表示网关距离丢弃数据包有多远。这些问题的影响和修复在很大程度上取决于监控的队列。

您应同时监控关键队列和非关键队列。