Debian 上提升 LNMP 响应速度的系统化做法
一 基线检查与快速收益
- 保持系统与软件为最新稳定版,及时获得性能修复与安全改进。
- 启用 HTTP/2 提升多路复用与头部压缩效率:
- 示例:listen 443 ssl http2; 并正确配置 ssl_certificate/ssl_certificate_key。
- 开启 Gzip 压缩以减小传输体积(适合文本类资源):
- 示例:gzip on; gzip_types text/plain text/css application/json application/javascript text/xml application/xml application/xml+rss text/javascript;
- 为静态资源设置长期缓存,减少重复请求:
- 示例:location ~* .(jpg|jpeg|png|gif|ico|css|js)$ { expires 30d; add_header Cache-Control “public, no-transform”; }
- 使用 CDN 分发静态资源与可缓存内容,降低源站压力与时延。
二 Nginx 关键优化
- 进程与连接:
- worker_processes auto; worker_cpu_affinity auto; worker_rlimit_nofile 65535;
- 开启 sendfile on; 提升静态文件传输效率;
- 开启 tcp_nodelay on; 降低 Nagle 延迟;
- 复用连接:keepalive_timeout 65; keepalive_requests 100000;
- 安全与开销:关闭 server_tokens; 按需调整 error_log 级别以减少 I/O。
- 内容加速:
- 启用 Gzip(见上);
- 启用 proxy_cache / fastcgi_cache 做页面/后端与动态内容缓存:
- 示例:
- proxy_cache_path /var/cache/nginx levels=1:2 keys_zone=my_cache:10m max_size=1g inactive=60m use_temp_path=off;
- proxy_cache my_cache; proxy_cache_valid 200 302 10m; proxy_cache_valid 404 1m;
- 静态资源长缓存(见上)。
三 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.revalidate_freq=60(开发环境可设为 0 便于调试)
- opcache.save_comments=1
- opcache.jit=on; opcache.jit_buffer_size=128M
- PHP-FPM 进程管理(以 pm=dynamic 为例):
- 依据内存与单进程占用估算 pm.max_children;
- 设定 pm.start_servers、pm.min_spare_servers、pm.max_spare_servers(如 max_spare ≈ 0.75 × max_children);
- 设置 pm.max_requests(如 500–1000)以回收潜在内存泄漏进程;
- 调整 PHP.ini 关键项:memory_limit、max_execution_time 等。
四 MySQL MariaDB 优化
- InnoDB 缓冲池:将 innodb_buffer_pool_size 设为总内存的50%–80%(数据库专用机可趋近上限)。
- 连接与超时:根据业务峰值设置 max_connections,并优化交互与连接回收相关参数。
- 查询与索引:开启并定期分析慢查询日志,建立合适索引、优化 SQL;
- 缓存策略:在 MySQL 5.7 及更早版本可启用查询缓存(query_cache_type=1, query_cache_size 适度);在 MySQL 8.0+ 查询缓存已移除,建议以应用层缓存(如 Redis/Memcached)替代。
五 Linux 系统与网络调优及压测闭环
- 文件描述符与进程限制:
- 提升进程可打开文件数:ulimit -n 65535;在 systemd 服务单元中设置 LimitNOFILE=65535。
- 内核网络参数(/etc/sysctl.conf 或 sysctl -w 临时生效):
- 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
- net.core.netdev_max_backlog=65535
- 如启用防火墙/连接跟踪:net.netfilter.nf_conntrack_max=2097152;可按需缩短 fin_wait/time_wait 等超时
- 监控与验证:
- 使用 Prometheus + Grafana 监控 Nginx、PHP-FPM、MySQL 与系统资源;
- 使用 ab 进行基线压测并对比优化前后:ab -n 1000 -c 100 http://your_server_ip/;
- 每次变更遵循“备份—小步变更—压测—回滚预案”的闭环。