主要程序 (gwd) 的記憶體會由 vc_process_monitor 監控,這可確保其永遠不會耗用超過 75% 的可用記憶體。因此,監控系統記憶體總計已完成,其警告臨界值為 80%,嚴重臨界值為 90%。

您可以使用臨界值來監控閘道,這些臨界值提供警告或嚴重狀態,以便在潛在問題影響服務之前,指出這些問題。下表列出臨界值和建議的動作。

臨界值狀態 臨界值 建議的更正動作
警告 80%

如果記憶體超過警告臨界值:

  • 收集閘道診斷服務包。
  • 檢查每項程序的記憶體使用量。

繼續主動監控,並檢查使用量是否增加。

嚴重 90%

如果記憶體超過嚴重臨界值:

  • 監控找出可能的嚴重封包捨棄問題 (可能表示超出容量)。

如果再次觀察到該問題:

  • 如果在 5 分鐘間隔內持續觀察到超出容量,請增加閘道容量,並重新平衡以避免發生與容量有關的服務影響。
備註: 在重新平衡閘道之前,請確認容量度量是在建議的限制內。如需容量度量的詳細資訊,請參閱 閘道元件的容量
以下是用於監控記憶體使用量的範例 Python 指令碼:
備註: 您還可以使用 Telegraf 來監控記憶體使用量。如需詳細資訊,請參閱 使用 Telegraf 監控閘道
#!/usr/bin/env python

from optparse import OptionParser
import sys

# Parse commandline options:
parser = OptionParser(usage="%prog -w <warning threshold>% -c <critical threshold>% [ -h ]")
parser.add_option("-w", "--warning",
    action="store", type="string", dest="warn_threshold", help="Warning threshold in absolute(MB) or percentage")
parser.add_option("-c", "--critical",
    action="store", type="string", dest="crit_threshold", help="Critical threshold in ansolute(MB) or percentage")
(options, args) = parser.parse_args()

def read_meminfo():
    meminfo = {}
    for line in open('/proc/meminfo'):
        if not line: continue
        (name, value) = line.split()[0:2]
        meminfo[name.strip().rstrip(':')] = int(value)
    return meminfo

if __name__ == '__main__':
    if not options.crit_threshold:
        print "UNKNOWN: Missing critical threshold value."
        sys.exit(3)
    if not options.warn_threshold:
        print "UNKNOWN: Missing warning threshold value."
        sys.exit(3)

    is_warn_pct = options.warn_threshold.endswith('%')
    if is_warn_pct:
       warn_threshold = int(options.warn_threshold[0:-1])
    else:
       warn_threshold = int(options.warn_threshold)

    is_crit_pct = options.crit_threshold.endswith('%')
    if is_crit_pct:
       crit_threshold = int(options.crit_threshold[0:-1])
    else:
       crit_threshold = int(options.crit_threshold)

    if crit_threshold >= warn_threshold:
        print "UNKNOWN: Critical percentage can't be equal to or bigger than warning percentage."
        sys.exit(3)
    
    meminfo = read_meminfo()
    memTotal = meminfo["MemTotal"]
    memFree = meminfo["MemFree"] + meminfo["Buffers"] + meminfo["Cached"]
    memFreePct = 100.0*memFree/memTotal
    if (is_crit_pct and memFreePct <= crit_threshold) or (not is_crit_pct and memFree/1024<=crit_threshold):
        print "CRITICAL: Free memory is at %2.0f %% ( %d MB free our of %d MB total)" % (memFreePct, memFree/1024, memTotal/1024)
        sys.exit(2)
    if (is_warn_pct and memFreePct <= warn_threshold) or (not is_warn_pct and memFree/1024<=warn_threshold):
        print "WARNING: Free memory is at %2.0f %% ( %d MB free our of %d MB total)" % (memFreePct, memFree/1024, memTotal/1024)
        sys.exit(1)
    else:
        print "OK: Free memory is at %2.0f %% ( %d MB free our of %d MB total)" % (memFreePct, memFree/1024, memTotal/1024)
        sys.exit(0)