博客 / Linux/ LNMP 环境全方位性能优化指南:从应用到系统内核

LNMP 环境全方位性能优化指南:从应用到系统内核

LNMP 环境全方位性能优化指南:从应用到系统内核

LNMP 性能优化综合指南

本文旨在提供一套全面的 LNMP(Linux + Nginx + MySQL + PHP)环境性能优化方案,涵盖应用层、服务配置与系统内核等多个层面。请注意,优化应追求稳定、安全与性能的平衡,而非单纯追求极致性能指标。

一、PHP 应用层优化

  1. 代码性能分析:使用 XHProf、Xdebug 或 Blackfire 等工具分析代码执行瓶颈,重点优化频繁执行的代码路径。
  2. 减少系统调用:避免在循环中频繁调用 is_file()time() 等函数。使用 require/include 替代 require_once/include_once(若确保不会重复加载)。
  3. 使用缓存
    • 使用 Memcached 或 Redis 缓存系统配置、模块数据及用户会话数据。
    • 开启 MySQL 慢查询日志,分析并优化执行效率低的 SQL 语句。
  4. OPcache 配置:启用并正确配置 PHP 的 OPcache(替代已过时的 APC),设置 opcache.revalidate_freq=0opcache.validate_timestamps=0(生产环境)以减少文件系统检查。
  5. 精简 PHP 模块:重新编译 PHP 或通过包管理工具,仅启用必要的扩展模块(如禁用 gd、soap、xmlrpc 等未用模块)。
  6. 优化 php.ini 配置
    • php.ini 中统一设置时区(date.timezone)、内存限制等,避免在代码中使用 ini_set()
    • 生产环境关闭 display_errors,开启 log_errors

二、PHP-FPM 配置优化

  1. 进程管理:根据服务器内存和负载,合理设置 pm.max_children。可通过监控工具(如 top、htop)观察内存使用情况来调整。
  2. 使用 Unix Socket:将 PHP-FPM 监听方式配置为 Unix Socket(listen = /var/run/php/php-fpm.sock),相比 TCP 减少网络开销。
  3. 资源限制:确保 rlimit_files 与系统文件描述符限制一致。

三、Nginx 配置优化

  1. 工作进程worker_processes 通常设置为 CPU 核心数。对于 I/O 密集型场景,可适当增加。
  2. 连接处理:使用 epoll(Linux)或 kqueue(FreeBSD)事件驱动模型。
  3. Keep-alive:启用并设置合理的 keepalive_timeout(如 65 秒),复用 TCP 连接。
  4. Gzip 压缩:启用 gzip,并设置 gzip_min_length 1024 以避免压缩过小文件。
  5. 日志优化:生产环境可考虑关闭 access_log 或将其写入内存文件系统。如需保留,应使用日志轮替。
  6. 静态文件处理
    • 启用 sendfile
    • 为静态资源设置 expires 头,利用浏览器缓存。
  7. 文件描述符:设置 worker_rlimit_nofileworker_connections 与系统限制匹配。

四、系统与内核优化

  1. 关闭非必要服务:使用 systemctl 禁用不需要的系统服务(如 sendmail、bluetooth 等)。
  2. 调整文件描述符限制:在 /etc/security/limits.conf 中为 nginx 和 php-fpm 用户增加限制:
    * soft nofile 65535
    * hard nofile 65535
  3. 磁盘挂载选项:在 /etc/fstab 中添加 noatime 选项,减少访问时间更新开销。
  4. 本地 DNS 解析:将频繁访问的域名/IP 对应关系添加到 /etc/hosts,减少 DNS 查询延迟。
  5. 内核网络参数优化:在 /etc/sysctl.conf 中添加或修改以下参数,然后执行 sysctl -p 生效:
    net.ipv4.tcp_max_syn_backlog = 65536
    net.core.netdev_max_backlog = 32768
    net.core.somaxconn = 32768
    net.core.wmem_default = 8388608
    net.core.rmem_default = 8388608
    net.core.rmem_max = 16777216
    net.core.wmem_max = 16777216
    net.ipv4.tcp_tw_reuse = 1
    # 注意:net.ipv4.tcp_tw_recycle 在 NAT 环境下可能导致问题,建议禁用
    # net.ipv4.tcp_tw_recycle = 0
    net.ipv4.ip_local_port_range = 1024 65535

五、安全与监控注意事项

  • 防火墙:不应完全关闭防火墙(iptables/firewalld),而应配置最小必要规则。
  • SELinux:生产环境建议保持为 enforcing 模式,通过审计日志调整策略,而非直接禁用。
  • 性能监控:优化前后应使用工具(如 ab、wrk、siege)进行压力测试,并使用监控系统(如 Prometheus + Grafana)持续观察关键指标(TPS、响应时间、资源利用率)。

总结:性能优化是一个系统性工程,需要从应用代码、服务配置、操作系统到硬件等多个层面进行综合调整。优化后应进行充分测试,确保系统稳定性和业务功能正常。

发表评论

您的邮箱不会公开。必填项已用 * 标注。