LNMP网站优化技巧分享
小樊
37
2025-11-16 09:55:00
LNMP网站性能优化实用清单
Nginx 层优化
- 进程与连接:将 worker_processes 设为 auto 或接近 CPU 核心数;在 events { worker_connections } 中结合内存与 CPU 调整,常见从 1024 起步;开启 sendfile on 提升静态文件效率;按需开启 gzip on(CPU 充裕时收益明显)。
- 长连接复用:设置 keepalive_timeout 65; keepalive_requests 100000; 减少握手开销。
- 静态资源缓存:对图片、CSS、JS 设置 expires 30d; add_header Cache-Control “public”; 降低回源。
- 缓存加速:启用 FastCGI 缓存 或 proxy_cache_path 做页面/接口层缓存,命中后直接回源静态结果。
- 安全与开销:关闭 server_tokens 减少信息泄露;按需调整 fastcgi_read_timeout 避免大请求中断。
PHP 与 PHP-FPM 优化
- 字节码缓存:启用 OPcache,推荐参数示例:opcache.enable=1、opcache.memory_consumption=256、opcache.interned_strings_buffer=64、opcache.max_accelerated_files=10000、opcache.jit=on、opcache.jit_buffer_size=128M(生产环境可按内存适度放大)。
- 进程模型与池:采用 pm=dynamic,结合内存与请求特征设置 pm.max_children、pm.start_servers、pm.min_spare_servers、pm.max_spare_servers,避免进程过多导致内存抖动或过少导致排队。
- 运行与扩展:按应用需求调整 memory_limit、max_execution_time;禁用不必要的 PHP 扩展 降低内存占用。
- 代码与数据库:减少 N+1 查询 与重复计算,使用 EXPLAIN 分析慢 SQL,配合缓存层降低数据库压力。
MySQL MariaDB 优化
- 缓冲与内存:将 innodb_buffer_pool_size 设为系统内存的 50%–80%(写多或内存充足可上探),并合理设置 key_buffer_size 等缓冲。
- 连接与并发:根据实例规格与负载调整 max_connections,避免过大导致上下文切换与内存压力。
- 查询与索引:为高频查询条件建立合适索引,避免 **SELECT *** 与复杂子查询,利用 慢查询日志 持续定位问题。
- 高可用扩展:读多写少场景可部署 主从复制 分担读压力,必要时引入 GTID 简化运维。
系统与网络优化
- 文件描述符:提升 ulimit -n 与 worker_rlimit_nofile 至 65535 或更高,避免 “too many open files”。
- 内核网络:优化 net.core.somaxconn、net.ipv4.ip_local_port_range、net.ipv4.tcp_fin_timeout、net.ipv4.tcp_fastopen、net.ipv4.tcp_syncookies、net.core.netdev_max_backlog 等,提升并发连接与网络吞吐。
- 存储与交换:优先使用 SSD;适度降低 vm.swappiness,减少换页,保障响应时延稳定。
缓存、CDN 与高可用及验证
- 数据缓存:引入 Redis/Memcached 做对象/页面片段缓存,显著减轻数据库压力。
- 边缘加速:使用 CDN 分发静态资源,降低跨地域访问时延与源站带宽。
- 反向代理缓存:在 Nginx 侧配置 proxy_cache_path 缓存动态接口的可缓存结果。
- 负载均衡与高可用:使用 Nginx/HAProxy/LVS 做流量分发,配合 主从复制 与故障转移提升稳定性。
- 监控与压测:以 Prometheus + Grafana 监控 CPU、内存、连接、QPS、P95/P99 等;用 ab 或 wrk 进行压测,示例:
ab -n 1000 -c 100 http://your_server_ip/;每次变更先备份并在测试环境验证后再上线。