目录

  1. stats slabs 命令简介
  2. stats slabs 命令的语法
  3. stats slabs 命令的输出解释
  4. 使用 Telnet 查看 Memcached Slab 信息
  5. 不同编程语言的 stats slabs 示例
  6. 参考资料

1. stats slabs 命令简介

stats slabs 命令用于查看 Memcached 中不同 slab 类别的详细统计信息。Slab 是 Memcached 使用的内存分配机制,它根据缓存项的大小将内存分为不同的块(slab)。stats slabs 命令提供了关于这些块的信息,例如每个 slab 中使用的内存、剩余的内存以及分配的缓存项数量等。

通过 stats slabs 命令,用户可以深入了解 Memcached 内存的使用情况,并优化内存配置和管理。


2. stats slabs 命令的语法

stats slabs

执行该命令后,Memcached 将返回每个 slab 类别的详细统计信息。可以查看到每个 slab 的大小、块数、已使用块数、已空闲块数等信息。


3. stats slabs 命令的输出解释

执行 stats slabs 命令后的输出包含有关每个 slab 类别的内存分配和缓存项的详细信息。输出内容包括以下字段:

  • chunk_size:每个 chunk 的大小,单位为字节。Memcached 将内存划分为多个大小一致的 chunk,每个 slab 类别对应一个不同的 chunk 大小。
  • chunks:该 slab 类别中总共分配了多少个 chunk。
  • free_chunks:该 slab 类别中剩余的空闲 chunk 数量。
  • used_chunks:该 slab 类别中已使用的 chunk 数量。
  • items:该 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

这意味着:

  • Slab 1 的每个 chunk 大小为 128 字节,包含 1024 个 chunk,其中 512 个 chunk 是空闲的,512 个 chunk 被使用。
  • Slab 2 的每个 chunk 大小为 256 字节,包含 2048 个 chunk,其中 1024 个 chunk 是空闲的,1024 个 chunk 被使用。

4. 使用 Telnet 查看 Memcached Slab 信息

4.1 连接 Memcached

telnet 127.0.0.1 11211

4.2 使用 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.3 使用 stats slabs 查看特定 slab 信息

如果需要查看某个特定 slab 的详细信息,可以直接指定 slab 编号:

stats slabs 1

返回结果:

STAT 1:chunk_size 128
STAT 1:chunks 1024
STAT 1:free_chunks 512
STAT 1:used_chunks 512


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

5.1 PHP stats slabs 示例

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

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

// 输出所有 slab 的信息
foreach ($stats as $server => $stat) {
    echo "Server: $server\n";
    foreach ($stat as $key => $value) {
        if (strpos($key, 'slabs') === 0) { // 只输出 slabs 相关的信息
            echo "$key: $value\n";
        }
    }
}
?>


5.2 Python stats slabs 示例

from pymemcache.client import base

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

# 获取 Memcached 的 slabs 统计信息
stats = client.get_stats()

# 输出所有 slab 的信息
for server, stat in stats:
    print(f"Server: {server}")
    for key, value in stat.items():
        if key.startswith('slabs'):  # 只输出 slabs 相关的信息
            print(f"{key}: {value}")


5.3 Java stats slabs 示例

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 的 slabs 统计信息
        Map<String, String> stats = client.getStats();
        for (Map.Entry<String, String> entry : stats.entrySet()) {
            if (entry.getKey().startsWith("slabs")) {  // 只输出 slabs 相关的信息
                System.out.println(entry.getKey() + ": " + entry.getValue());
            }
        }

        client.shutdown();
    }
}


5.4 Node.js stats slabs 示例

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

// 获取 Memcached 的 slabs 统计信息
memcached.stats(function(err, stats) {
    if (err) {
        console.error(err);
    } else {
        console.log("Slabs Stats:");
        for (let key in stats) {
            if (key.startsWith('slabs')) {  // 只输出 slabs 相关的信息
                console.log(`${key}: ${stats[key]}`);
            }
        }
    }
});


6. 参考资料