centos lnmp如何优化内存
导读:CentOS LNMP 内存优化实操指南 一 基线评估与监控 明确总内存与角色分工:例如 4C/8G 的小站,建议将 MySQL InnoDB 缓冲池控制在约 4–6G,为 PHP-FPM 工作进程、Nginx、系统与其他服务预留充足余量...
CentOS LNMP 内存优化实操指南
一 基线评估与监控
- 明确总内存与角色分工:例如 4C/8G 的小站,建议将 MySQL InnoDB 缓冲池控制在约 4–6G,为 PHP-FPM 工作进程、Nginx、系统与其他服务预留充足余量。
- 建立监控基线:
- 系统层:
free -m、top/htop、vmstat 1、iostat -x 1观察可用内存、缓存/缓冲、swap、I/O 等待。 - Nginx:启用
stub_status观察 Active/Reading/Writing/Waiting 连接数,确认是否连接数触顶。 - PHP-FPM:观察进程数、请求排队与慢请求。
- MySQL:关注
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 内存优化
- 进程模型与内存上限:
- 采用 动态(dynamic) 或 按需(ondemand) 模式,避免静态模式下常驻进程过多;
- 计算单进程常驻内存(RSS)后,设置
pm.max_children,确保大致满足:max_children × 单进程RSS < 可用内存 × 安全系数(如 0.7); - 合理设置
pm.start_servers、pm.min_spare_servers、pm.max_spare_servers,避免频繁启停与空闲过多。
- 脚本与缓存:
memory_limit设为业务所需上限,避免无限制;- 启用并调优 OPcache(如
opcache.memory_consumption、opcache.max_accelerated_files),减少重复编译开销; - 禁用不必要的 PHP 扩展,降低常驻内存占用。
四 MySQL 内存优化
- 缓冲池:将 innodb_buffer_pool_size 设为物理内存的 50%–70%(数据库专用机可更高,但需预留系统与其他服务内存)。
- 连接与会话:
- 合理设置
max_connections,避免过大导致内存与上下文切换激增; - 结合业务将
tmp_table_size与max_heap_table_size设为 64M 或更高(但需控制总量,避免把内存吃满)。
- 合理设置
- 持久性与刷盘策略:
innodb_flush_log_at_trx_commit:主库设为 1(安全优先),从库可设为 2(吞吐优先);
- 查询与索引:
- 避免
SELECT *,使用覆盖索引与合适的 JOIN; - 启用并定期分析 慢查询日志,优化高成本 SQL。
- 避免
五 操作系统与压测闭环
- 内核与虚拟内存:
- 适度降低
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等,提升连接复用与回收效率。
- 提升进程可打开文件数(如
- 存储与文件系统:优先 SSD,文件系统可用 XFS,并结合
noatime等挂载选项减少不必要写放大。 - 监控与持续迭代:
- 使用 Prometheus + Grafana 等监控内存、连接、查询、I/O 等关键指标;
- 以压测数据驱动参数微调,遵循“小步变更—回归验证—保留基线”的流程。
声明:本文内容由网友自发贡献,本站不承担相应法律责任。对本内容有异议或投诉,请联系2913721942#qq.com核实处理,我们将尽快回复您,谢谢合作!
若转载请注明出处: centos lnmp如何优化内存
本文地址: https://pptw.com/jishu/774675.html
