Skip to content

Memcached核心配置文件

配置文件格式

1. 命令行参数式配置

最简单的配置方式是将命令行参数写入配置文件,每行一个参数:

bash
# Memcached配置文件示例
-m 256
-c 4096
-t 4
-p 11211
-u memcached
-l 0.0.0.0
-d

2. 服务式配置文件

在系统服务管理环境中(如systemd),配置文件通常包含完整的服务配置:

systemd配置文件

文件路径/etc/systemd/system/memcached.service

ini
[Unit]
Description=Memcached
After=network.target

[Service]
Type=simple
User=memcached
Group=memcached
ExecStart=/usr/bin/memcached -u memcached -m 256 -c 4096 -t 4 -p 11211 -l 0.0.0.0
Restart=always

[Install]
WantedBy=multi-user.target

SysVinit配置文件

文件路径/etc/init.d/memcached

bash
#!/bin/sh
### BEGIN INIT INFO
# Provides:          memcached
# Required-Start:    $remote_fs $syslog
# Required-Stop:     $remote_fs $syslog
# Should-Start:      $local_fs
# Should-Stop:       $local_fs
# Default-Start:     2 3 4 5
# Default-Stop:      0 1 6
# Short-Description: Start memcached daemon
# Description:       Start memcached daemon
### END INIT INFO

daemon=/usr/bin/memcached
lockfile=/var/lock/subsys/memcached

MEMCACHED_USER=memcached
MEMCACHED_PORT=11211
MEMCACHED_MEMORY=256
MEMCACHED_CONNECTIONS=4096
MEMCACHED_THREADS=4
MEMCACHED_LISTEN=0.0.0.0

start() {
    echo -n "Starting memcached: "
    daemon $daemon -u $MEMCACHED_USER -m $MEMCACHED_MEMORY -c $MEMCACHED_CONNECTIONS -t $MEMCACHED_THREADS -p $MEMCACHED_PORT -l $MEMCACHED_LISTEN -d
    RETVAL=$?
    echo
    [ $RETVAL -eq 0 ] && touch $lockfile
    return $RETVAL
}

# 其他服务管理函数...

Windows配置文件

在Windows环境中,Memcached可以通过注册表或配置文件进行配置:

注册表路径HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\memcached Server

ImagePath值示例

"C:\Program Files\memcached\memcached.exe" -d runservice -m 256 -c 4096 -t 4

主要配置项

1. 内存配置

配置项命令行参数说明默认值建议值
内存大小-m分配给Memcached的内存大小(MB)64256-4096
内存限制-I单个item的最大大小(默认1MB)1m1m-10m

2. 连接配置

配置项命令行参数说明默认值建议值
最大连接数-c允许的最大同时连接数10244096-16384
端口-p监听端口1121111211
监听地址-l监听的IP地址127.0.0.10.0.0.0(公网)或内网IP
TCP积压队列-bTCP监听积压队列大小10242048

3. 线程配置

配置项命令行参数说明默认值建议值
工作线程数-t处理请求的工作线程数4CPU核心数

4. 运行模式

配置项命令行参数说明默认值建议值
守护进程模式-d以守护进程方式运行生产环境启用
PID文件-P指定PID文件路径/var/run/memcached/memcached.pid
用户-u指定运行用户memcached

5. 日志配置

配置项命令行参数说明默认值建议值
日志级别-v, -vv, -vvv日志详细程度生产环境建议-v
日志文件重定向标准输出将日志输出到文件标准输出/var/log/memcached.log

6. 高级配置

配置项命令行参数说明默认值建议值
slab页大小-I指定slab页大小1m根据业务需求调整
禁用大页-L禁用大页分配生产环境启用
连接超时-R每个事件的最大请求数2050
绑定CPU-C绑定到特定CPU核心根据服务器配置调整

配置文件最佳实践

1. 按环境分离配置

建议为不同环境创建不同的配置文件:

  • 开发环境memcached-dev.conf
  • 测试环境memcached-test.conf
  • 生产环境memcached-prod.conf

2. 配置文件权限

确保配置文件具有适当的权限:

bash
chmod 644 /etc/memcached.conf
chown root:root /etc/memcached.conf

3. 内存配置原则

  • 分配的内存应小于服务器可用内存的80%
  • 单个item大小不宜过大,建议不超过1MB
  • 根据业务数据大小调整slab页大小

4. 连接数配置

  • 根据预期并发量设置最大连接数
  • 定期监控连接数使用情况,及时调整
  • 结合操作系统的文件描述符限制进行配置

5. 线程配置

  • 工作线程数建议设置为CPU核心数
  • 过多的线程会导致上下文切换开销增加
  • 对于多核CPU,适当增加线程数可以提高性能

配置示例

1. 小型生产环境配置

bash
# 小型生产环境配置(2GB内存服务器)
-m 1536          # 分配1.5GB内存
-c 4096          # 最大4096个连接
-t 4             # 4个工作线程
-p 11211         # 监听默认端口
-u memcached     # 运行用户
-l 0.0.0.0       # 监听所有IP
-d               # 守护进程模式
-P /var/run/memcached/memcached.pid  # PID文件
-v               # 基本日志

2. 大型生产环境配置

bash
# 大型生产环境配置(16GB内存服务器)
-m 12288         # 分配12GB内存
-c 16384         # 最大16384个连接
-t 8             # 8个工作线程
-p 11211         # 监听默认端口
-u memcached     # 运行用户
-l 192.168.1.100 # 监听内网IP
-d               # 守护进程模式
-P /var/run/memcached/memcached.pid  # PID文件
-I 2m            # 单个item最大2MB
-L               # 禁用大页分配
-R 50            # 每个事件最大50个请求

配置验证

1. 查看当前配置

使用memcached-tool查看当前配置:

bash
memcached-tool 127.0.0.1:11211 stats settings

输出示例:

#127.0.0.1:11211   Field       Value
accepting_conns           1
auth_cmds                 0
auth_errors               0
cas_enabled               1
conn_yields               0
curr_connections         10
curr_items              120
...

2. 测试连接

使用telnet测试连接:

bash
telnet 127.0.0.1 11211

常见问题(FAQ)

Q1: Memcached为什么没有官方的配置文件格式?

A1: Memcached设计理念是简单高效,最初只支持命令行参数配置。虽然没有官方配置文件格式,但可以通过将命令行参数写入文件,或使用系统服务管理工具的配置文件来实现配置管理。

Q2: 如何修改Memcached配置后重启服务?

A2: 根据不同的启动方式,重启方法不同:

  • systemdsystemctl restart memcached
  • SysVinitservice memcached restart
  • 命令行:先kill进程,再重新启动

Q3: 如何优化Memcached的内存配置?

A3: 内存优化建议:

  1. 监控内存使用率,避免内存不足导致频繁eviction
  2. 根据业务数据大小调整单个item最大大小
  3. 使用memcached-tool分析slab使用情况,调整slab配置
  4. 避免分配超过服务器可用内存80%的内存

Q4: 如何限制Memcached只监听特定IP?

A4: 使用-l参数指定监听IP,例如:

  • 只监听本地:-l 127.0.0.1
  • 监听内网IP:-l 192.168.1.100
  • 监听所有IP:-l 0.0.0.0

Q5: 如何查看Memcached是否以守护进程模式运行?

A5: 可以通过以下方式检查:

  1. 查看进程状态:ps aux | grep memcached,守护进程模式会显示-d参数
  2. 检查是否存在PID文件:ls -la /var/run/memcached/memcached.pid
  3. 查看是否有多个Memcached进程(守护进程模式下会有一个主进程和多个工作线程)