ubuntu缓存如何适应高并发场景
小樊
31
2025-12-29 21:05:56
Ubuntu 缓存适配高并发的实用方案
一 分层缓存总体策略
- 建议采用“多层缓存 + 连接复用 + 内核与存储优化”的组合:应用层(如 OPcache、APCu)、对象层(Redis/Memcached)、边缘层(Varnish/Nginx 反向代理缓存)、浏览器层(Cache‑Control/Expires),再配合 KeepAlive、HTTP/2 与内核参数、I/O 调度、SSD TRIM 等系统优化,形成端到端的高并发缓存体系。
二 应用与对象层缓存
- PHP 运行时缓存
- 启用 OPcache(字节码缓存)与 APCu(用户态键值缓存)。示例关键配置(以 PHP 8.1 为例,路径如:/etc/php/8.1/fpm/php.ini 或 /etc/php/8.1/apache2/php.ini):
- OPcache:opcache.enable=1;opcache.memory_consumption=128;opcache.interned_strings_buffer=8;opcache.max_accelerated_files=4000;opcache.revalidate_freq=60;opcache.fast_shutdown=1
- APCu:apcu.enable=1;apcu.shm_size=32M;apcu.ttl=7200;apcu.enable_cli=0(生产 CLI 建议关闭)
- 安装与启用:sudo apt install php-opcache php-apcu;修改后重启 apache2 或 php8.1-fpm。
- 对象缓存选型
- Redis:支持持久化与丰富数据结构,适合会话、通用对象缓存;安装:sudo apt install redis-server php-redis;在 php.ini 加入 extension=redis.so;生产务必设置 requirepass 并仅监听内网。
- Memcached:简单高效,适合读多写少;安装:sudo apt install memcached php-memcached;在 php.ini 加入 extension=memcached.so;建议仅监听 127.0.0.1 或内网。
- 会话存储优化:在 php.ini 设置 session.save_handler=redis/memcached;session.save_path=tcp://127.0.0.1:6379(或 127.0.0.1:11211)。
三 边缘层与 Web 服务器缓存
- Nginx 反向代理缓存
- 示例:proxy_cache_path /var/cache/nginx levels=1:2 keys_zone=my_cache:10m max_size=1g inactive=60m;在 location 中使用 proxy_cache my_cache; proxy_cache_valid 200 302 10m; proxy_cache_valid 404 1m;
- Varnish 整页缓存
- 安装:sudo apt install varnish;编辑 /etc/varnish/default.vcl 设置后端(如 .host=127.0.0.1; .port=80;),按需配置缓存策略与 Bypass Cookie;启动:sudo systemctl start varnish。
- Apache 层缓存与静态资源
- 启用模块:sudo a2enmod cache cache_disk expires;配置示例:CacheEnable disk /static/;CacheRoot /var/cache/apache2/mod_cache_disk;CacheDefaultExpire 3600;ExpiresActive On;ExpiresByType text/css “access plus 1 month”;ExpiresByType application/javascript “access plus 1 month”。
- 启用压缩与连接复用:sudo a2enmod deflate;KeepAlive On;MaxKeepAliveRequests 100;KeepAliveTimeout 5。
四 内核与存储层优化
- 内存与 VFS 缓存
- 降低换页倾向:vm.swappiness=10(临时:sudo sysctl vm.swappiness=10;永久:写入 /etc/sysctl.conf)。
- 适度保留 VFS 目录项/索引节点缓存:vm.vfs_cache_pressure=50(默认 100,值越高回收越积极)。
- I/O 调度与文件系统
- 调度器选择:HDD 适合 deadline;SSD 适合 noop(查看:cat /sys/block/sda/queue/scheduler;临时设置:echo deadline > /sys/block/sda/queue/scheduler)。
- 文件系统:性能敏感场景优先 XFS/ext4;SSD 开启 TRIM:sudo systemctl enable fstrim.timer。
- 顺序读场景预读
- ext4 可调 readahead:blockdev --setra 8192 /dev/sda1(示例为 8MB)。
五 验证与运维要点
- 生效验证
- PHP 层:phpinfo.php 查看 OPcache/APCu/Redis/Memcached;CLI 与 FPM 可能使用不同 php.ini,需分别检查。
- 数据层:简单脚本验证 set/get;Memcached 可用 telnet localhost 11211 执行 stats/flush_all。
- HTTP 层:curl -I 检查 Cache‑Control/Expires 与 X‑Cache/Varnish 等头。
- 监控与容量
- 关注命中率、内存占用与驱逐(evictions);Redis 用 INFO/慢查询日志;Memcached 用 stats;必要时调大内存或优化 TTL/键设计。
- 安全与网络
- Redis 生产启用 requirepass 并绑定内网;Memcached 仅监听 127.0.0.1/内网;启用 HTTP/2、合理 KeepAlive 与 SSL 会话缓存 降低握手开销。
- 变更与压测
- 每次仅调整 1–2 项并重启对应服务,配合监控与压测逐步验证效果,避免一次性大幅改动。