目录

  1. stats 命令简介
  2. stats 命令的语法
  3. stats 命令的参数说明
  4. 使用 Telnet 查看 Memcached 状态
  5. 不同编程语言的 stats 示例
  6. 参考资料

1. stats 命令简介

stats 命令用于获取 Memcached 服务器的统计信息。这些统计信息包括缓存的使用情况、命中率、存储的键数、内存的使用情况等。通过这些统计数据,用户可以更好地了解 Memcached 实例的性能和健康状态。

Memcached 提供了多种不同的统计信息,例如缓存的命中和未命中率、连接数、内存使用情况等。stats 命令是 Memcached 管理和性能监控的重要工具。


2. stats 命令的语法

stats [<subcommand>]

  • <subcommand>:可选参数,可以指定某一特定的统计信息。常用的子命令包括 slabsitemssizesdetails 等。如果不指定子命令,stats 命令会返回所有的统计信息。

常见的 stats 子命令:

  • stats slabs:查看各个 slab 的统计信息。
  • stats items:查看所有缓存项的统计信息。
  • stats sizes:查看缓存项大小的统计信息。
  • stats reset:重置统计信息。

3. stats 命令的参数说明

参数说明示例
<subcommand>可选参数,用于指定要查看的统计类别。slabs, items, sizes
stats reset用于重置统计信息。stats reset

4. 使用 Telnet 查看 Memcached 状态

4.1 连接 Memcached

telnet 127.0.0.1 11211

4.2 使用 stats 命令查看基本统计信息

stats

返回结果:

STAT pid 12345
STAT uptime 67890
STAT time 1616683305
STAT version 1.6.9
STAT libevent 2.1.8-stable
STAT pointer_size 64
STAT rusage_user 1.234
STAT rusage_system 2.345
STAT curr_items 1024
STAT total_items 2048
STAT bytes 2048000
STAT cmd_get 15000
STAT cmd_set 12000
STAT get_hits 12000
STAT get_misses 3000
STAT evictions 50
...

4.3 使用 stats slabs 查看各 slab 的统计信息

stats slabs

返回结果:

STAT 1:chunk_size 128
STAT 1:chunks 1024
STAT 1:free_chunks 512
STAT 1:used_chunks 512
STAT 2:chunk_size 256
STAT 2:chunks 2048
STAT 2:free_chunks 1024
STAT 2:used_chunks 1024
...

4.4 使用 stats items 查看缓存项的统计信息

stats items

返回结果:

STAT items:1:number 512
STAT items:2:number 1024
STAT items:3:number 256
...

4.5 使用 stats sizes 查看缓存项大小的统计信息

stats sizes

返回结果:

STAT sizes:1 128
STAT sizes:2 256
STAT sizes:3 512
...


5. 不同编程语言的 stats 示例

5.1 PHP stats 示例

<?php
$memcached = new Memcached();
$memcached->addServer("127.0.0.1", 11211);

// 获取 Memcached 统计信息
$stats = $memcached->getStats();

// 输出所有统计信息
foreach ($stats as $server => $stat) {
    echo "Server: $server\n";
    foreach ($stat as $key => $value) {
        echo "$key: $value\n";
    }
}

// 获取特定的统计信息(例如 slabs)
$slabs = $memcached->getStats('slabs');
foreach ($slabs as $server => $slab) {
    echo "Slabs for $server:\n";
    foreach ($slab as $key => $value) {
        echo "$key: $value\n";
    }
}
?>


5.2 Python stats 示例

from pymemcache.client import base

client = base.Client(('127.0.0.1', 11211))

# 获取 Memcached 统计信息
stats = client.get_stats()
for server, stat in stats:
    print(f"Server: {server}")
    for key, value in stat.items():
        print(f"{key}: {value}")

# 获取特定的统计信息(例如 slabs)
slabs = client.get_stats('slabs')
for server, slab in slabs:
    print(f"Slabs for {server}:")
    for key, value in slab.items():
        print(f"{key}: {value}")


5.3 Java stats 示例

import net.spy.memcached.MemcachedClient;
import java.io.IOException;
import java.net.InetSocketAddress;
import java.util.Map;

public class MemcachedTest {
    public static void main(String[] args) throws IOException {
        MemcachedClient client = new MemcachedClient(new InetSocketAddress("127.0.0.1", 11211));

        // 获取 Memcached 统计信息
        Map<String, String> stats = client.getStats();
        for (Map.Entry<String, String> entry : stats.entrySet()) {
            System.out.println(entry.getKey() + ": " + entry.getValue());
        }

        // 获取特定的统计信息(例如 slabs)
        Map<String, String> slabs = client.getStats("slabs");
        for (Map.Entry<String, String> entry : slabs.entrySet()) {
            System.out.println(entry.getKey() + ": " + entry.getValue());
        }

        client.shutdown();
    }
}


5.4 Node.js stats 示例

const Memcached = require('memcached');
const memcached = new Memcached("127.0.0.1:11211");

// 获取 Memcached 统计信息
memcached.stats(function(err, stats) {
    if (err) {
        console.error(err);
    } else {
        console.log("All Stats:", stats);
    }
});

// 获取特定的统计信息(例如 slabs)
memcached.stats('slabs', function(err, slabs) {
    if (err) {
        console.error(err);
    } else {
        console.log("Slabs Stats:", slabs);
    }
});


6. 参考资料