外观
Memcached核心配置文件
配置文件格式
1. 命令行参数式配置
最简单的配置方式是将命令行参数写入配置文件,每行一个参数:
bash
# Memcached配置文件示例
-m 256
-c 4096
-t 4
-p 11211
-u memcached
-l 0.0.0.0
-d2. 服务式配置文件
在系统服务管理环境中(如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.targetSysVinit配置文件
文件路径:/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) | 64 | 256-4096 |
| 内存限制 | -I | 单个item的最大大小(默认1MB) | 1m | 1m-10m |
2. 连接配置
| 配置项 | 命令行参数 | 说明 | 默认值 | 建议值 |
|---|---|---|---|---|
| 最大连接数 | -c | 允许的最大同时连接数 | 1024 | 4096-16384 |
| 端口 | -p | 监听端口 | 11211 | 11211 |
| 监听地址 | -l | 监听的IP地址 | 127.0.0.1 | 0.0.0.0(公网)或内网IP |
| TCP积压队列 | -b | TCP监听积压队列大小 | 1024 | 2048 |
3. 线程配置
| 配置项 | 命令行参数 | 说明 | 默认值 | 建议值 |
|---|---|---|---|---|
| 工作线程数 | -t | 处理请求的工作线程数 | 4 | CPU核心数 |
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 | 每个事件的最大请求数 | 20 | 50 |
| 绑定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.conf3. 内存配置原则
- 分配的内存应小于服务器可用内存的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: 根据不同的启动方式,重启方法不同:
- systemd:
systemctl restart memcached - SysVinit:
service memcached restart - 命令行:先kill进程,再重新启动
Q3: 如何优化Memcached的内存配置?
A3: 内存优化建议:
- 监控内存使用率,避免内存不足导致频繁eviction
- 根据业务数据大小调整单个item最大大小
- 使用
memcached-tool分析slab使用情况,调整slab配置 - 避免分配超过服务器可用内存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: 可以通过以下方式检查:
- 查看进程状态:
ps aux | grep memcached,守护进程模式会显示-d参数 - 检查是否存在PID文件:
ls -la /var/run/memcached/memcached.pid - 查看是否有多个Memcached进程(守护进程模式下会有一个主进程和多个工作线程)
