LNMP在Ubuntu上的性能调优方法
导读:LNMP在Ubuntu上的性能调优方法 一 基线与环境准备 保持组件为最新稳定版(Nginx、MySQL/MariaDB、PHP),及时获取性能修复与新特性。 启用HTTPS/HTTP/2,优先使用Let’s Encrypt获取免费证书,...
LNMP在Ubuntu上的性能调优方法
一 基线与环境准备
- 保持组件为最新稳定版(Nginx、MySQL/MariaDB、PHP),及时获取性能修复与新特性。
- 启用HTTPS/HTTP/2,优先使用Let’s Encrypt获取免费证书,减少握手开销并提升加载速度。
- 打开Gzip压缩与静态资源长缓存,降低传输体积与重复请求。
- 接入CDN分发静态资源,减轻源站压力、缩短用户时延。
- 建立监控与告警(如 Prometheus + Grafana、Zabbix),持续观测 CPU、内存、连接、QPS、慢查询等关键指标。
二 Nginx调优
- 进程与连接
- 设置worker_processes auto(通常等于CPU核心数);必要时使用worker_cpu_affinity绑定 CPU,减少上下文切换。
- 提升worker_connections(如 16384/32768),并相应提高系统文件描述符限制(见第四节)。
- 启用keepalive:如 keepalive_timeout 15;upstream 长连接复用可显著减少握手与建连开销。
- 传输与压缩
- 开启sendfile on; tcp_nopush on; (静态资源高效直传);按需开启gzip on并配置合适类型与阈值。
- 静态资源缓存
- 对图片、CSS、JS 等设置Cache-Control/expires(如 30 天),减少重复请求与回源。
- 反向代理/页面缓存
- 配置proxy_cache_path与缓存键/有效期,缓存后端动态页面或接口结果,降低后端负载。
三 PHP与PHP-FPM调优
- 启用字节码缓存
- 打开OPcache(如 opcache.enable=1,memory_consumption=128,interned_strings_buffer=8,max_accelerated_files=4000),避免重复编译,提高脚本执行速度。
- FPM进程模型与内存
- 采用pm=dynamic,按内存与负载设置pm.max_children / start_servers / min_spare_servers / max_spare_servers;必要时使用pm.max_requests定期重启子进程回收内存碎片。
- 合理设置php.ini的memory_limit(如 128M/256M),避免过大导致 OOM,也避免过小频繁报错。
- 连接与会话
- 应用层合理使用持久连接(PDO/MySQLi),减少频繁建连开销;会话存储优先使用Redis/Memcached,提升并发读写性能。
四 系统与内核参数调优
- 文件描述符与进程限制
- 提升系统/进程可打开文件数:在**/etc/security/limits.conf设置如“* soft/hard nofile 65535”,并在 Nginx 配置中使用worker_rlimit_nofile**与之匹配。
- 网络与连接
- 增大net.core.somaxconn、net.ipv4.tcp_max_syn_backlog,扩展net.ipv4.ip_local_port_range,提升高并发下连接排队与端口复用能力。
- 启用tcp_tw_reuse(谨慎评估环境),缩短tcp_fin_timeout,减少 TIME_WAIT 占用。
- 生效方式
- 通过sysctl -p使内核参数生效,变更前在测试环境验证稳定性。
五 MySQL与高并发实践
- 缓冲与连接
- 调整innodb_buffer_pool_size(常见为内存的50%–70%,视负载而定),合理设置max_connections与临时表/堆表上限,避免连接风暴与磁盘临时表。
- 查询与索引
- 为高频查询条件建立索引/联合索引,避免SELECT ,使用EXPLAIN分析执行计划,必要时用JOIN替代低效子查询,分页使用LIMIT*。
- 慢查询与维护
- 开启slow_query_log,设置long_query_time=2,定期执行ANALYZE/OPTIMIZE TABLE,必要时进行分区/分表降低单表压力。
- 读多写少场景
- 引入Redis/Memcached做查询/对象缓存;读压力大时部署主从复制分担读请求,提升整体吞吐。
六 压测与持续监控
- 压测方法
- 使用ab/wrk/webbench等工具进行渐进式压测,观察RPS、P95/P99 时延、错误率、CPU/内存/IO变化,定位瓶颈后再调参。
- 监控与日志
- 搭建Prometheus + Grafana或Zabbix监控面板,结合Nginx access/error log与PHP-FPM 慢日志定位问题;对数据库启用慢查询日志并周期性审计。
声明:本文内容由网友自发贡献,本站不承担相应法律责任。对本内容有异议或投诉,请联系2913721942#qq.com核实处理,我们将尽快回复您,谢谢合作!
若转载请注明出处: LNMP在Ubuntu上的性能调优方法
本文地址: https://pptw.com/jishu/770757.html
