温馨提示×

Linux LNMP怎样提升性能

小樊
42
2025-12-27 19:05:45
栏目: 智能运维

Linux LNMP性能提升实操指南

一 基线评估与压测

  • 明确目标:以应用真实流量为基准,优先优化对延迟与吞吐影响最大的环节(静态资源、数据库、动态脚本)。
  • 建立基线:记录当前QPS、P95/P99 延迟、错误率、CPU/内存/磁盘 I/O、连接数等关键指标。
  • 压测工具与流程:
    • Nginx/HTTP:ab、wrk、k6;示例:ab -n 10000 -c 200 http://your_server_ip/
    • 数据库:sysbench、mysqlslap;示例:sysbench oltp_read_write 准备与运行,观察 TPS/QPS 与延迟变化。
  • 变更流程:每次只调整一个变量→压测→对比基线→保留有效优化→循环迭代。

二 Nginx 调优要点

  • 并发与进程:
    • worker_processes auto;(通常等于CPU 核心数
    • worker_connections 1024+;(结合内存与带宽评估)
    • worker_rlimit_nofile 65535;(提升文件描述符上限)
  • 传输与连接:
    • sendfile on;tcp_nopush on;tcp_nodelay on;
    • 长连接复用:keepalive_timeout 65;keepalive_requests 100000;
  • 压缩与缓存:
    • 启用 Gzip(文本类资源):gzip on; gzip_types text/plain text/css application/json application/javascript text/xml application/xml application/xml+rss text/javascript;
    • 静态资源缓存:expires 30d; add_header Cache-Control "public";
    • 动态内容可用反向代理缓存:proxy_cache_path ...
  • 协议与安全:
    • 启用 HTTP/2listen 443 ssl http2;
    • 关闭版本暴露:server_tokens off;
  • 日志与观察:
    • 降低日志开销:access_log ... buffer=32k flush=300s; error_log ... warn;
    • 按需禁用模块、保持 Nginx 版本为稳定最新

三 PHP 与 PHP-FPM 调优

  • OPcache(必开):
    • opcache.enable=1
    • opcache.memory_consumption=128–256
    • opcache.interned_strings_buffer=8–64
    • opcache.max_accelerated_files=4000–10000
    • opcache.validate_timestamps=1(开发)或按需增大 revalidate_freq(生产)
    • 启用 JIT(PHP 8+):opcache.jit=onopcache.jit_buffer_size=128M
  • PHP-FPM 进程模型(以 dynamic 为例):
    • 计算思路:pm.max_children ≈ 内存 / 单进程内存占用;单进程内存可通过 pm.status_path 观察 RSS 估算。
    • 示例:pm.max_children=50; pm.start_servers=5; pm.min_spare_servers=5; pm.max_spare_servers=35
    • 超时与慢日志:request_terminate_timeout=30s; slowlog=/var/log/php-fpm/www-slow.log
  • 运行环境与代码:
    • 使用最新稳定版 PHP,禁用不必要的扩展与模块
    • 减少文件 I/O、优化算法与循环、避免 N+1 查询
    • 引入 Redis/Memcached 做数据缓存,耗时任务走消息队列异步化

四 MySQL MariaDB 调优要点

  • 内存与引擎:
    • InnoDB 缓冲池:innodb_buffer_pool_size=物理内存的50%–80%
    • 缓冲池实例:innodb_buffer_pool_instances=CPU 核心数(或 8 的倍数)
    • 日志与刷盘:innodb_log_file_size=128M–1Ginnodb_log_buffer_size=64M
    • 事务提交策略:权衡一致性与性能(如 innodb_flush_log_at_trx_commit=2 更偏性能;=1 更偏一致)
    • 其他:innodb_flush_method=O_DIRECT; innodb_file_per_table=1; innodb_io_capacity=2000(SSD)
  • 连接与会话:
    • max_connections 与业务峰值匹配,避免过大导致上下文切换与内存压力
    • 合理 wait_timeout/interactive_timeout,回收空闲连接
  • 查询与索引:
    • 开启并定期分析慢查询日志,用 EXPLAIN 检查执行计划
    • 避免 SELECT *、在 WHERE 中避免函数计算、合理使用索引与覆盖索引
  • 压测与监控:
    • sysbench 做 OLTP 基准测试,观察 TPS/QPS、锁等待与缓冲池命中率
    • 持续监控:Threads_connected/Threads_running、InnoDB 缓冲池命中率、临时表与排序使用情况。

五 系统与网络优化及上线验证

  • 文件句柄与系统限制:
    • ulimit -n 65535
    • /etc/security/limits.conf* soft/hard nofile 65535
  • 内核网络参数(/etc/sysctl.conf,按需调整):
    • net.core.somaxconn=65535
    • net.ipv4.ip_local_port_range=1024 65535
    • net.ipv4.tcp_fin_timeout=30
    • net.ipv4.tcp_tw_reuse=1(注意与业务兼容)
    • net.core.netdev_max_backlog=65535
    • 如启用连接跟踪:net.nf_conntrack_max=2097152
  • 存储与 I/O:
    • 优先 SSD;MySQL 数据目录放在高性能存储上
    • 文件系统与挂载:noatime、XFS/ext4 合理挂载选项
    • I/O 调度器:SSD 可用 deadline
  • 交付与验证:
    • 灰度/蓝绿发布,变更前后对比基线指标
    • 异常回滚预案与回放压测
    • 持续监控与告警(如 Prometheus + Grafana),定期审计慢查询与错误日志。

0