Memcached 是高效能分散式記憶體快取系統,但它是「黑箱」:無法直接查詢記憶體使用率、命中率、連線數等關鍵指標。stats 指令提供即時內部狀態快照,是運維、效能調優、故障排查的核心工具。
# 連線到 Memcached(預設 port 11211)
telnet localhost 11211
# 連線成功後輸入
stats
或使用 nc / socat 單行執行:
echo "stats" | nc localhost 11211
STAT pid 1552
STAT uptime 3792
STAT time 1262517674
STAT version 1.2.6
STAT pointer_size 32
STAT curr_items 1
STAT total_items 2
STAT bytes 593
STAT curr_connections 2
STAT total_connections 28
STAT connection_structures 9
STAT cmd_get 3
STAT cmd_set 2
STAT get_hits 2
STAT get_misses 1
STAT evictions 0
STAT bytes_read 1284
STAT bytes_written 5362
STAT limit_maxbytes 67108864
STAT threads 1
END
| 欄位 | 說明 | 運維關注重點 |
|---|---|---|
| pid | Memcached 進程 ID | 配合系統監控確認進程存活 |
| uptime | 服務啟動至今秒數 | 重啟後指標歸零,需注意 |
| time | 伺服器當前 Unix 時間戳 | 驗證時間同步 |
| version | Memcached 版本 | 確認版本相容性、安全性修補 |
| pointer_size | 作業系統指標大小(32/64 位元) | 64 位元系統可支援更大記憶體 |
| curr_items | 目前快取項目數量 | 監控快取佔用情況 |
| total_items | 啟動以來總儲存項目數(含已過期/刪除) | 計算替換率參考 |
| bytes | 目前快取佔用位元組數 | 核心指標:bytes / limit_maxbytes = 記憶體使用率 |
| curr_connections | 目前開啟連線數 | 連線洩漏會導致數值持續增長 |
| total_connections | 啟動以來總連線數 | 流量趨勢分析 |
| connection_structures | 已配置連線結構數 | 內部實作細節,通常無需關注 |
| cmd_get | 累積 GET 請求次數 | 讀取流量基準 |
| cmd_set | 累積 SET 請求次數 | 寫入流量基準 |
| get_hits | GET 命中次數 | 核心指標:命中率 = get_hits / cmd_get |
| get_misses | GET 未命中次數 | 未命中率高代表快取策略需優化 |
| evictions | 為釋放空間而淘汰的項目數(LRU/過期) | 非零代表記憶體不足,需擴容或調整 TTL |
| bytes_read | 從網路讀取總位元組 | 流入頻寬參考 |
| bytes_written | 寫入網路總位元組 | 流出頻寬參考 |
| limit_maxbytes | 快取記憶體上限(啟動參數 -m 設定) | 容量規劃基準 |
| threads | 工作執行緒數(啟動參數 -t 設定) | CPU 核心數建議值 |
bytes / limit_maxbytes × 100%(建議 < 80%)get_hits / cmd_get × 100%(建議 > 90%)evictions / total_items(持續增長需擴容)bytes / curr_items(偵測大物件問題)watch -n 5 'echo stats | nc localhost 11211' 即時觀察。memcached_exporter、Datadog、Zabbix 模板、Grafana 儀表板。stats 指令輕量、無副作用、資訊豐富,是 Memcached 運維的「聽診器」。熟練掌握各欄位含義與衍生指標,能快速定位記憶體壓力、連線洩漏、快取策略失效等核心問題,保障高併發系統穩定運行。