Memcached 是高效能分散式記憶體快取系統,廣泛用於動態網站加速。本文整理啟動參數、Telnet 管理命令、stats 統計指標解讀與部署建議,協助運維與開發人員快速上手。
一、Memcached 啟動常用參數
| 參數 | 說明 | 預設值 / 備註 |
-p <num> | TCP 監聽埠 | 11211 |
-U <num> | UDP 監聽埠 | 11211(0 關閉) |
-d | 守護進程模式運行 | 生產環境必加 |
-u <username> | 執行使用者 | 非 root 權限,提升安全性 |
-m <num> | 最大記憶體用量 (MB) | 64 MB |
-c <num> | 最大同時連線數 | 1024 |
-v | 輸出警告/錯誤訊息 | 除錯用 |
-vv | 輸出客戶端請求/回應細節 | 詳細除錯 |
-l <ip_addr> | 綁定 IP 位址 | 預設全部介面(生產環境建議綁定內網 IP 或 127.0.0.1) |
-P <file> | PID 檔案路徑 | 需搭配 -d 使用,方便進程管理 |
生產環境建議啟動指令:
memcached -d -u memcache -m 1024 -c 2048 -l 10.0.0.5 -p 11211 -P /var/run/memcached.pid
二、Telnet 管理命令速查表
連線方式:telnet <host> 11211
1. 資料操作命令
| 命令 | 說明 | 範例 |
set | 無條件儲存(新增或覆蓋) | set mykey 0 60 5\r\nhello (flags=0, exptime=60s, bytes=5) |
add | 鍵不存在時才新增 | add newkey 0 60 5\r\nworld |
replace | 鍵存在時才覆蓋 | replace key 0 60 5\r\nnewval |
get | 讀取單一或多鍵值 | get mykey 或 get key1 key2 |
gets | 讀取並回傳 CAS token | gets mykey (多回傳一個版本號) |
cas | 檢查並設定(樂觀鎖) | cas mykey 0 60 5 10\r\nvalue (最後參數為 gets 取得的 token) |
append | 在現有值後附加資料 | append key 0 60 15\r\nappend_data |
prepend | 在現有值前置入資料 | prepend key 0 60 15\r\nprepend_data |
incr | 數值遞增 | incr mykey 2 |
decr | 數值遞減 | decr mykey 5 |
delete | 刪除鍵值 | delete mykey |
flush_all | 立即或延遲失效所有項目 | flush_all 或 flush_all 900 (900 秒後) |
2. 統計與監控命令
| 命令 | 說明 |
stats | 通用統計資訊 |
stats items | 各 slab 類別項目數 |
stats slabs | 記憶體 slab 分配細節 |
stats sizes | 各大小區間項目統計 |
stats cachedump <slab_id> <limit> | 列出指定 slab 的鍵值(limit=0 顯示全部) |
stats reset | 重置統計計數器 |
version | 顯示版本號 |
verbosity <level> | 調整日誌輸出等級 |
quit | 結束 Telnet 連線 |
三、stats 關鍵指標深度解讀
| 指標 | 含義 | 異常判斷建議 |
uptime | 服務運行秒數 | 重啟後歸零,可監控服務穩定性 |
curr_items / total_items | 目前/歷史總儲存項目數 | 持續增長可能暗示記憶體洩漏或未正確設定過期 |
bytes | 目前佔用記憶體位元組數 | 接近 limit_maxbytes 時需擴容或調整策略 |
curr_connections / total_connections | 目前/歷史總連線數 | 連線數飆升檢查客戶端連線池設定 |
cmd_get / cmd_set | get/set 總請求次數 | 比例失衡可能表示讀寫模式異常 |
get_hits / get_misses | 命中/未命中次數 | 命中率 = hits/(hits+misses),低於 90% 需優化快取策略 |
evictions | 為釋放空間而淘汰的項目數 | 非零表示記憶體不足,需增加 -m 或縮短過期時間 |
bytes_read / bytes_written | 網路讀寫流量 | 流量異常可能暗示熱鍵或攻擊 |
threads | 目前執行緒數 | 通常等於 CPU 核心數 |
四、實戰部署建議
- 綁定內網 IP:
-l 10.0.0.5 避免公開網路暴露,防止未授權存取與資料洩漏。
- 修改預設埠:非標準埠(如 11211 → 21211)降低自動掃描風險。
- 設定合理記憶體與連線上限:依據機器規格與預估 QPS 設定
-m、-c,並預留 20% 緩衝。
- 監控淘汰率:
evictions > 0 即需擴容或檢查過期策略。
- 使用 SASL 認證(Memcached 1.4.3+):生產環境建議啟用
-S 要求認證。
- 定期備份關鍵快取:雖為暫存資料,但熱鍵重建成本高時可考慮定期 dump 至磁碟。
五、常見問題排查
| 現象 | 可能原因 | 排查步驟 |
| 連線被拒絕 | 防火牆阻擋 / IP 綁定錯誤 / 服務未啟動 | 檢查 netstat -tlnp | grep 11211、防火牆規則、-l 參數 |
| 命中率極低 | 快取鍵設計不當 / 過期時間太短 / 資料更新太頻繁 | 分析 stats、調整鍵粒度、延長 TTL、引入快取預熱 |
| 記憶體快速耗盡 | 大物件儲存 / 無過期時間 / slab 碎片化 | 檢查 stats slabs、拆分大物件、設定合理 TTL、調整 -f 增長因子 |
| CAS 操作頻繁失敗 | 高併發修改同一鍵 | 引入分散式鎖、或改用 Redis 事務/Lua 腳本 |
掌握 Memcached 核心參數與監控指標,能讓快取層穩定支撐高併發業務。建議將 stats 關鍵指標納入監控系統(Prometheus + Grafana / Zabbix / Datadog),設定告警閾值,實現問題早發現、早處理。