温馨提示×

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 -nworker_rlimit_nofile65535 或更高,避免 “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 等;用 abwrk 进行压测,示例:ab -n 1000 -c 100 http://your_server_ip/;每次变更先备份并在测试环境验证后再上线。

0