温馨提示×

LNMP性能Debian如何提升

小樊
45
2026-01-03 09:23:06
栏目: 智能运维

Debian 上 LNMP 性能优化实操清单

一 基线与环境准备

  • 保持系统与软件为最新稳定版:执行 sudo apt update && sudo apt full-upgrade -y,并优先使用官方或可信仓库的 Nginx、MariaDB/MySQL、PHP 版本。
  • 规划资源基线:记录服务器 CPU 核数、内存、磁盘类型(SSD/NVMe)、带宽,后续参数均以实际资源为边界进行调优。
  • 建立可回滚机制:对 /etc/nginx、/etc/php、/etc/mysql 等目录做版本化备份(如 etckeeper 或手动 tar),变更遵循“小步变更—验证—固化”的流程。
  • 启用基础监控与日志:部署 Prometheus + Grafana 监控 Nginx、PHP-FPM、MariaDB 关键指标,并定期分析 Nginx 与 PHP-FPM 日志 以定位瓶颈。

二 Nginx 优化

  • 进程与连接
    • 设置 worker_processes auto(通常等于 CPU 核心数);必要时启用 worker_cpu_affinity auto 做亲和性绑定。
    • 提升文件描述符限制:worker_rlimit_nofile 65535;在 events 中设置 worker_connections(如 16384/32768,视内存与负载而定)。
  • 传输与协议
    • 启用 sendfile on 减少内核态拷贝;启用 tcp_nodelay on 降低 Nagle 延迟。
    • 开启 gzip on(建议 gzip_comp_level 5–6)以压缩文本类响应,注意 CPU 权衡。
    • 启用 HTTP/2 提升并发与首包体验(需 TLS)。
  • 连接复用与超时
    • 调整 keepalive_timeout 65(或按业务适当增大);keepalive_requests 100000 提高长连接复用率。
    • 按需设置 fastcgi_read_timeout(如 300s)避免大文件/慢接口过早断开。
  • 安全与观测
    • 关闭 server_tokens 减少信息泄露;合理设置 client_max_body_size 避免异常请求放大。
    • 配置 access_log/error_log 与必要的 request_time/upstream_response_time 记录,便于定位慢请求。

三 PHP 与 PHP-FPM 优化

  • OPcache 必开(建议值,按内存与代码规模微调)
    • opcache.enable=1
    • opcache.memory_consumption=128–256(MB)
    • opcache.interned_strings_buffer=16
    • opcache.max_accelerated_files=10000–20000
    • opcache.validate_timestamps=1(开发环境)/ 0(生产环境,配合部署刷新)
    • opcache.revalidate_freq=60(生产建议 60s 级)
  • PHP 运行时
    • memory_limit=128–256M(依据业务与框架需求)
    • max_execution_time=30(接口类建议 15–30s)
    • cgi.fix_pathinfo=0(安全与规范)
  • PHP-FPM 进程模型(以 pm=dynamic 为例)
    • 估算公式:max_children ≈ 可用内存 / 单进程峰值内存(含框架与扩展)。
    • 示例:2GB 内存、单进程约 80MB 时,max_children 可先设 20–25,观察 pm.max_requests(如 500–1000)与 slowlog 再细调。
    • 开启慢日志:request_slowlog_timeout=1s,slowlog=/var/log/php-fpm/www-slow.log,用于定位耗时函数/SQL。
  • 安全与噪声控制
    • expose_php=Off;display_errors=Off(生产);log_errors=On;open_basedir(按需)。

四 MariaDB MySQL 优化

  • 内存与缓存
    • innodb_buffer_pool_size 设为可用内存的 50%–70%(数据库专用机可更高,留出 OS/缓存/连接开销)。
  • 连接与会话
    • 合理设置 max_connections(避免过大导致上下文切换与内存压力),结合应用连接池与超时策略。
  • 日志与一致性
    • 启用 slow_query_log,设置 long_query_time=1(或 0.5s),定期用 pt-query-digest 分析并优化慢 SQL。
    • 统一字符集为 utf8mb4(支持 emoji),校对规则 utf8mb4_unicode_ci
  • 基线参数示例(/etc/mysql/mariadb.conf.d/50-server.cnf)
    • [mysqld]
      • innodb_buffer_pool_size=1G(示例,按内存调整)
      • innodb_log_file_size=256M
      • innodb_flush_log_at_trx_commit=1(强一致)/ 2(性能优先)
      • max_connections=500–2000(按业务与内存评估)
      • slow_query_log=1;slow_query_log_file=/var/log/mysql/mysql-slow.log
      • long_query_time=1
      • character-set-server=utf8mb4;collation-server=utf8mb4_unicode_ci
  • 安全与网络
    • 仅在内网需要远程管理时开放 3306;执行 mysql_secure_installation 完成加固。

五 Linux 内核与网络及上线验证

  • 文件描述符与进程限制
    • 系统级:/etc/security/limits.conf 增加
        • soft nofile 65535;* hard nofile 65535
    • 服务级:在 Nginx/PHP-FPM systemd unit 中加入
      • LimitNOFILE=65535;重启服务生效。
  • 网络与内核参数(/etc/sysctl.conf 或 /etc/sysctl.d/99-tuning.conf)
    • net.core.somaxconn=65535
    • net.ipv4.ip_local_port_range=1024 65535
    • net.ipv4.tcp_fin_timeout=30
    • net.ipv4.tcp_slow_start_after_idle=0
    • net.ipv4.tcp_fastopen=3(客户端/服务端一致)
    • net.ipv4.tcp_syncookies=1(防御 SYN Flood)
    • net.core.netdev_max_backlog=65535
    • 如启用 iptables/nftables 连接跟踪:net.netfilter.nf_conntrack_max=2097152
  • 存储与文件系统
    • 使用 ext4/xfs 并挂载 noatime,nodiratime(减少元数据写放大);数据库数据目录使用独立 LVM/分区write-back 策略(权衡数据安全)。
  • 上线验证与压测
    • 基线压测:使用 wrk/wrk2ab 对关键接口进行 ≥3 次 压测,记录 RPS、P95/P99、错误率、带宽/CPU/内存/IO
    • 慢请求验证:确认 Nginx $request_timePHP-FPM slowlogMySQL slow_query_log 能准确捕获超时/慢操作。
    • 渐进式调参与回滚预案:每次只变更一个关键参数,观察 24–48 小时 稳定性与指标趋势,异常即回滚。

0