Memcached是一款开源的高性能分布式内存缓存系统,常用来缓存数据库查询结果、会话数据以及页面片段,从而大幅降低后端数据库的压力。Fedora作为滚动更新较快的Linux发行版,其软件仓库中自带了Memcached软件包,安装和配置都相当方便。不过很多初学者装完之后直接使用默认配置就上线,结果遇到了内存分配不合理、监听地址不安全等问题。本文将从安装、配置、服务管理到性能优化,完整走一遍Fedora下Memcached的部署流程。

一、在Fedora上安装并启动Memcached
Fedora使用dnf作为包管理器,安装Memcached只需要一条命令。执行以下操作前建议先更新一下软件仓库:
sudo dnf update sudo dnf install memcached
安装完成后可以使用rpm -qi memcached查看软件包信息,用memcached -h查看当前版本支持的参数列表。接下来启动服务并设置开机自启,Fedora已经内置了systemd服务单元,不需要自己编写:
sudo systemctl start memcached sudo systemctl enable memcached sudo systemctl status memcached
如果status显示active (running),说明服务已经正常工作。默认情况下Memcached监听11211端口,可以通过ss -tlnp | grep 11211确认监听状态。也可以安装telnet或libmemcached工具包进行简单测试,例如用memstat --servers=127.0.0.1查看服务统计信息,能正常返回数据就说明部署成功。
二、核心配置文件详解
Fedora下的Memcached配置文件位于/etc/sysconfig/memcached,这是一个shell风格的环境变量文件,systemd服务单元会读取它并传递给memcached进程。默认内容大致如下:
PORT="11211" USER="memcached" MAXCONN="1024" CACHESIZE="64" OPTIONS=""
各个参数的含义需要理解清楚。PORT指定监听端口,默认11211,如无冲突建议保持默认。USER指定运行进程的系统用户,Fedora安装时会自动创建memcached用户,以非root身份运行可以降低安全风险。MAXCONN是最大并发连接数,默认1024对小型应用够用,高并发场景建议调整到4096甚至更高,但要注意每个连接都会占用一定内存和文件描述符,需要同步修改/etc/security/limits.conf中的nofile限制。CACHESIZE是以MB为单位的内存总量,默认只有64MB,生产环境通常需要根据机器可用内存调大,比如4GB或8GB。
OPTIONS是最灵活的一项,可以附加任意命令行参数。常用的配置例如:
OPTIONS="-l 127.0.0.1 -o modern,slab_reassign -I 4m"
其中-l指定监听IP,只监听本机回环地址是最常见的做法;-I设置单个item的最大值,默认1MB,如果需要缓存较大的对象可以调大,但过大会影响内存利用率;-o slab_reassign允许运行期重新分配slab,配合slab_automove可以在内存分布不均时自动调整。修改完成后执行sudo systemctl restart memcached使配置生效。
三、内存分配机制与性能优化
Memcached采用slab分配器管理内存,这是理解其性能特征的关键。启动时,它会把CACHESIZE指定的一大块内存切分成多个slab class,每个class负责存储特定大小区间的item。例如默认配置下最小的chunk只有48字节左右,之后按1.25倍左右的因子递增。存储一个100字节的数据实际上会占用112字节的chunk,这就是所谓的空间浪费。
这种机制的优点是彻底避免了频繁的malloc和free带来的内存碎片,分配和释放都是常数时间操作,这也是Memcached能做到极高吞吐量的原因之一。缺点是如果业务数据的尺寸分布与slab分级不匹配,可能出现某个class内存耗尽而其他class大量空闲的情况。可以通过memcached -o slab_reassign -o slab_automove缓解,也可以使用-f参数调整增长因子,例如-f 1.1让分级更细腻。
观察内存使用情况主要依赖stats命令。用telnet连接后执行stats、stats slabs、stats items可以查看命中率、各class的使用量以及LRU淘汰情况。get_hits除以cmd_get就是命中率,一般生产环境应保持在95%以上。如果命中率偏低,通常是缓存容量不足导致频繁淘汰,或者是过期时间设置不合理,可以从这两个方向排查。
四、安全加固与远程访问配置
Memcached本身没有用户认证体系(SASL支持在Fedora默认构建中并未启用),协议还是明文的,所以网络层面的隔离非常重要。最基本的原则是:如果缓存只给本机的应用使用,务必保持-l 127.0.0.1。曾经发生过大规模攻击事件,就是因为大量服务器把Memcached暴露在公网的11211端口,被利用发起UDP反射放大攻击。
如果应用部署在其他机器上,必须通过防火墙限制访问来源。Fedora默认使用firewalld,可以这样配置:
sudo firewall-cmd --permanent --new-zone=memcached sudo firewall-cmd --permanent --zone=memcached --add-source=192.168.1.0/24 sudo firewall-cmd --permanent --zone=memcached --add-port=11211/tcp sudo firewall-cmd --reload
这样只有192.168.1.0/24网段的主机可以访问缓存服务。此外,在OPTIONS中绑定内网网卡的内网IP也是必要的双重保险。对于安全要求更高的场景,可以考虑在应用与Memcached之间建立SSH隧道,或者改用支持TLS和认证的Redis等方案,再或者使用本地的Unix套接字方式通信,Memcached支持-s /var/run/memcached/memcached.sock指定套接字路径。
五、日常运维与故障排查
日常运维中最常见的命令组合是systemctl restart memcached重启服务和journalctl -u memcached -f实时查看日志。Memcached重启后所有缓存数据会丢失,这是内存缓存的天然特性,应用侧需要有缓存穿透的应对策略,比如请求失败时回源数据库并做限流保护。
如果发现服务无法启动,首先检查配置文件中是否有拼写错误,尤其是OPTIONS里的参数格式。其次用sudo -u memcached memcached -u memcached -m 64 -vv以前台verbose模式手动运行,能快速定位参数问题。内存不足时Memcached不会直接崩溃,而是按LRU淘汰旧数据,但如果系统本身的可用内存被耗尽,进程可能被内核的OOM killer杀掉,可以用dmesg | grep -i oom确认,此时需要下调CACHESIZE或增加机器内存。
监控方面建议配置stats数据的定时采集,libmemcached提供的memstat、第三方的memcached_exporter配合Prometheus都是成熟方案。关注的核心指标包括命中率、当前连接数、evictions(每秒淘汰数)以及bytes与limit_maxbytes的比值,当evictions持续大于零或内存使用率长期超过90%,就该扩容了。
总体来说,Fedora下部署Memcached的门槛不高,难的是根据业务特点把内存大小、chunk分级、连接数上限这些参数调到合适的状态,并做好网络隔离。把这些细节处理好,一个单机支撑每秒数万次读请求的缓存服务就基本成型了。
Fedora Memcached配置Memcached安装缓存服务器优化修改时间:2026-09-04 16:28:51