如何优化Ubuntu上的LNMP
导读:Ubuntu 上 LNMP 性能优化实操指南 一 基线检查与系统准备 保持系统组件为最新稳定版:Nginx、MySQL/MariaDB、PHP,及时修补安全与性能问题。 启用防火墙并放行 Web 流量:sudo ufw allow ‘Ng...
Ubuntu 上 LNMP 性能优化实操指南
一 基线检查与系统准备
- 保持系统组件为最新稳定版:Nginx、MySQL/MariaDB、PHP,及时修补安全与性能问题。
- 启用防火墙并放行 Web 流量:sudo ufw allow ‘Nginx Full’。
- 为站点启用 HTTPS:sudo apt install certbot python3-certbot-nginx -y & & sudo certbot --nginx -d your_domain.com。
- 建立监控与告警:关注 CPU、内存、磁盘 IO、网络 与关键服务状态,便于滚动调优与故障定位。
二 Nginx 优化
- 进程与连接
- 将 worker_processes 设为 CPU 核心数;启用 worker_cpu_affinity 做亲和绑定(如 8 核示例:00000001 … 10000000)。
- 提升 worker_connections(如 16384/32768),并同步提升系统文件句柄限制。
- 设置 worker_rlimit_nofile(如 65535/1048576),避免 “Too many open files”。
- 事件模型与长连接
- 在 Linux 上使用 use epoll。
- 合理配置 keepalive_timeout(如 15–65s)与 keepalive_requests(如 1000),复用连接降低握手开销。
- 传输与压缩
- 启用 Gzip:gzip on; gzip_comp_level 6; gzip_types text/plain text/css application/json application/javascript; 对图片/视频等已压缩资源不必再压缩。
- 静态资源与缓存
- 对静态资源设置强缓存(Cache-Control/Expires),并使用 sendfile on; tcp_nopush on; tcp_nodelay on; 提升传输效率。
- 反向代理/动态内容缓存(可选)
- 配置 proxy_cache_path /var/cache/nginx levels=1:2 keys_zone=my_cache:10m max_size=1g inactive=60m use_temp_path=off; 并在 location 中使用 proxy_cache my_cache; proxy_cache_valid 200 1h; 等策略。
三 PHP-FPM 优化
- 进程模型与关键参数(/etc/php/X.Y/fpm/pool.d/www.conf)
- 使用 pm = dynamic,按内存与负载设置:
- pm.max_children:最大子进程数(由内存决定,见下方估算公式)。
- pm.start_servers / pm.min_spare_servers / pm.max_spare_servers:平滑扩缩容。
- pm.max_requests:防止内存泄漏累积(如 500–5000)。
- 使用 pm = dynamic,按内存与负载设置:
- OPcache 加速
- 在 php.ini 启用并调优:opcache.enable=1; opcache.memory_consumption=128; opcache.interned_strings_buffer=16; opcache.max_accelerated_files=10000; opcache.validate_timestamps=0(生产建议关闭,用部署流程刷新)。
- 资源与超时
- 合理设置 request_terminate_timeout、pm.process_idle_timeout,避免慢请求拖垮进程池。
- 估算示例(避免 OOM)
- 若单进程常驻内存约 40MB,计划 pm.max_children=50,则 PHP-FPM 子进程常驻约 2GB;需为系统与其他服务预留充足内存。
四 MySQL MariaDB 优化
- 基本安全与维护
- 运行 mysql_secure_installation;定期做备份与慢查询分析。
- 缓冲与连接
- 适度提高 innodb_buffer_pool_size(如物理内存的 50%–70%,视负载而定)。
- 合理设置 max_connections(避免过高导致上下文切换与内存压力)。
- 查询与索引
- 优化慢查询(long_query_time)、建立合适索引、减少全表扫描与临时表。
- 维护与统计
- 定期 OPTIMIZE TABLE(InnoDB 视碎片化情况)、更新统计信息,确保执行计划稳定。
五 系统与网络调优及上线验证
- 文件句柄与进程限制
- /etc/security/limits.conf:* soft/hard nofile 65535(或更高);
- /etc/sysctl.conf:fs.file-max 提升系统级上限;重新登录或重启后生效。
- TCP 内核参数(/etc/sysctl.conf,按业务与带宽调优)
- net.ipv4.tcp_fin_timeout=30;net.ipv4.tcp_keepalive_time=1200;
- 结合并发目标与端口占用,合理规划 somaxconn 与 backlog,缓解 TIME_WAIT/SYN 压力。
- 上线前后验证
- 配置语法与重载:sudo nginx -t & & sudo systemctl reload nginx;
- 观察 /var/log/nginx/error.log、PHP-FPM 日志与数据库慢查询日志;
- 使用 ab/wrk/hey 或真实业务压测,关注 P95/P99 延迟、吞吐、错误率与资源利用率,按指标逐步回调参数。
声明:本文内容由网友自发贡献,本站不承担相应法律责任。对本内容有异议或投诉,请联系2913721942#qq.com核实处理,我们将尽快回复您,谢谢合作!
若转载请注明出处: 如何优化Ubuntu上的LNMP
本文地址: https://pptw.com/jishu/757248.html
