进阶 docs.memcached.org 2026-10-13 18:51:48 · 22 阅读

第3章 Memcached 配置指南:命令行参数与网络设置

第 3 章:配置

命令行参数

Memcached 自带关于其命令行参数的基础文档。输入 `memcached -h` 或查看 `man memcached` 可获取最新文档。该服务致力于提供大多数情况下合理的默认设置。

首次配置 memcached 时,应重点关注 `-m`、`-d` 和 `-v` 这三个参数:

- `-m` 指定用于存储项目的内存量(单位:兆字节)。注意这并非全局内存上限,memcached 实际使用的内存会略多于此值。请设置为安全的数值。即便设为低于 64 MB,其最小使用量也可能达到 64 MB。 - `-d` 令 memcached 以守护进程模式运行。如果你通过 init 脚本启动服务,可能无需设置此项。初次使用 memcached 时,建议先不加 `-d` 在前台启动并观察其运行,这有助于理解其行为。 - `-v` 控制输出到 STDOUT/STDERR 的详细程度。叠加多个 `-v` 会逐步提高详细度。单个 `-v` 会打印额外的启动信息;多个 `-v` 则会输出关于命中 memcached 的请求的详细信息。如果想验证测试脚本是否按预期运行,在前台启动 memcached 并开启若干详细输出级别是个好主意。

我们致力于提供合理的默认值,以减少终端用户需要手动配置的选项数量。

Init 脚本

如果你通过操作系统的包管理系统安装 memcached,通常它会自带 init 脚本。这些脚本提供了配置 memcached 启动选项的替代方法,例如通过 `/etc/sysconfig/memcached` 文件。在修改或自行编写 init 脚本之前,务必先检查这些配置。

如果是自行编译 memcached,源码包中的 `scripts/` 目录包含几个 init 脚本示例。

多实例

运行多个本地 memcached 实例非常简单。如果你正在维护开发环境或本地测试集群,只需更改其监听的端口即可,例如:`memcached -p 11212`。

网络

自 1.5.6 版本起,memcached 默认仅监听 TCP 连接。`-l` 允许你绑定到特定的接口或 IP 地址。Memcached 几乎不花费精力来防御来自互联网的随机连接。因此,绝不能直接将 memcached 暴露给互联网或其他不可信用户。此处使用 SASL 认证有帮助,但不应完全依赖它。

TCP

`-p` 修改 TCP 连接的监听端口。通过 `-p` 更改端口时,UDP 端口也会随之改变。

UDP

`-U` 修改 UDP 端口,自 1.5.6 版本起默认关闭。UDP 适用于获取或设置小型项目,但不太适用于操纵大型项目。如果担心安全或性能,可将其设为 0 以禁用。

Unix 套接字

如果你希望限制守护进程仅能被单个本地用户访问,或者不想通过网络暴露它,可以使用 Unix 域套接字。所需参数为 `-s `。启用此项后,TCP/UDP 将被禁用。

连接限制

默认情况下,最大并发连接数设为 1024。正确配置此项至关重要。额外的连接可能会因等待空闲槽位而挂起。你可以通过执行 `stats` 命令并查看 “listen_disabled_num” 来检测实例是否连接数耗尽。该值应为零或接近零。

Memcached 能轻松扩展以支持大量连接。每个连接的内存开销很低(空闲连接更低),因此不必担心将其设置得非常高。

例如,如果你有 5 台 Web 服务器,每台运行 Apache,且每个 Apache 进程的 MaxClients 设置为 12。这意味着你可能接收到的最大并发连接数为 5 x 12(即 60)。如果可以,始终保留几个额外槽位用于管理任务、添加更多 Web 服务器、定时任务/脚本等。

线程

线程用于在多个 CPU 上扩展 memcached。其模型采用“工作线程”,意味着每个线程处理并发连接。由于使用 libevent 能以良好扩展性处理并发连接,每个线程能够处理许多客户端。

这与某些 Web 服务器不同,例如 Apache 会为每个活动客户端连接使用一个进程或线程。由于 memcached 效率极高,少量线程即可满足需求。在 Web 服务器领域,这更像 nginx 而非 Apache。

默认分配 4 个线程。除非 memcached 负载极重,否则不应将此数值设置得更高。将其设为极大值(如 80+)会显著降低运行速度。

检查运行配置

```bash $ echo "stats settings" | nc localhost 11211 ```

输出示例: ```text STAT maxbytes 67108864 STAT maxconns 1024 STAT tcpport 11211 STAT udpport 11211 STAT inter NULL STAT verbosity 0 STAT oldest 0 STAT evictions on STAT domain_socket NULL STAT umask 700 STAT growth_factor 1.25 STAT chunk_size 48 STAT num_threads 4 STAT stat_key_prefix : STAT detail_enabled no STAT reqs_per_event 20 STAT cas_enabled yes STAT tcp_backlog 1024 STAT binding_protocol auto-negotiate STAT auth_enabled_sasl no STAT item_size_max 1048576 END ```

很酷,对吧?通过 `stats` 和 `stats settings`,你可以双重确认 memcached 实际正在执行的操作是否与你要求的操作一致。

评论 (0)