CentOS LNMP 内存优化实操指南
一 基线评估与监控
free -m、top/htop、vmstat 1、iostat -x 1 观察可用内存、缓存/缓冲、swap、I/O 等待。stub_status 观察 Active/Reading/Writing/Waiting 连接数,确认是否连接数触顶。Threads_connected、慢查询、临时表与缓冲池命中率。wrk 进行不同并发与连接数的压测,例如 wrk -t12 -c100 -d30s --latency http://your-domain/,对比 RPS、P95/P99 延迟、超时/错误 等指标,验证优化成效。二 Nginx 内存优化
worker_processes 设为 CPU 核心数;worker_connections 结合业务并发与文件句柄上限设置;keepalive_timeout 与 keepalive_requests 复用连接,降低连接建立开销。sendfile on,按需开启 gzip 压缩减少传输体积。worker_rlimit_nofile(如 65535)以避免 “too many open files”。net.core.somaxconn、net.ipv4.ip_local_port_range、net.ipv4.tcp_fin_timeout 等,缓解高并发下的连接排队与端口耗尽。三 PHP-FPM 内存优化
pm.max_children,确保大致满足:max_children × 单进程RSS < 可用内存 × 安全系数(如 0.7);pm.start_servers、pm.min_spare_servers、pm.max_spare_servers,避免频繁启停与空闲过多。memory_limit 设为业务所需上限,避免无限制;opcache.memory_consumption、opcache.max_accelerated_files),减少重复编译开销;四 MySQL 内存优化
max_connections,避免过大导致内存与上下文切换激增;tmp_table_size 与 max_heap_table_size 设为 64M 或更高(但需控制总量,避免把内存吃满)。innodb_flush_log_at_trx_commit:主库设为 1(安全优先),从库可设为 2(吞吐优先);SELECT *,使用覆盖索引与合适的 JOIN;五 操作系统与压测闭环
vm.swappiness(如 10–30),减少换页;vm.dirty_background_ratio、vm.dirty_ratio,平衡写回与抖动。ulimit -n 65535 或 systemd 服务 LimitNOFILE);net.core.somaxconn、net.ipv4.tcp_tw_reuse、net.ipv4.tcp_fin_timeout 等,提升连接复用与回收效率。noatime 等挂载选项减少不必要写放大。