- 首页 >
- 问答 >
-
云计算 >
- 怎样优化centos lnmp服务器配置
怎样优化centos lnmp服务器配置
小樊
37
2025-12-09 19:27:38
CentOS LNMP 性能优化实操指南
一 基线评估与容量规划
- 明确硬件与业务特征:CPU 核数、内存大小、磁盘类型(优先 SSD/NVMe)、业务类型(静态资源占比、动态接口 QPS、长连接/短连接)、峰值并发目标。
- 建立监控与压测基线:部署 Prometheus + Grafana 监控 Nginx/MySQL/PHP-FPM 关键指标;用 wrk、ab 做渐进式压测,记录 RPS、P95/P99 延迟、错误率、带宽 等,作为调优前后对比依据。
- 安全与可达性:仅开放必要端口(如 80/443/3306),为站点启用 HTTPS/TLS,避免明文传输与暴力扫描带来的性能与安全风险。
二 Nginx 层优化
- 进程与连接
- 设置 worker_processes auto(通常等于 CPU 核数);必要时使用 worker_cpu_affinity 做亲和绑定。
- 提升 worker_connections(如 8192 或更高),并开启 use epoll; multi_accept on; accept_mutex off; 以降低连接调度开销。
- 传输与长连接
- 启用 sendfile on; tcp_nopush on; tcp_nodelay on; 提升静态资源吞吐与网络效率。
- 合理设置 keepalive_timeout 30; keepalive_requests 1000; 复用连接、降低握手成本。
- 缓冲与请求体
- 适度增大 client_body_buffer_size 128k; client_max_body_size 50m; client_header_buffer_size 32k; large_client_header_buffers 4 32k; 减少磁盘临时文件与头部拷贝。
- 压缩与缓存
- 启用 gzip on; gzip_vary on; gzip_min_length 1024; gzip_comp_level 6; gzip_types text/plain text/css application/json application/javascript text/xml application/xml; 降低传输体积。
- 对静态资源设置强缓存:location ~ .(jpg|jpeg|png|gif|ico|css|js)$ { expires 1y; add_header Cache-Control “public, immutable”; access_log off; }*。
三 PHP-FPM 层优化
- 进程模型与容量
- 选择 pm = static/dynamic 结合业务稳态与峰值;按内存估算 pm.max_children,例如每进程约 25MB、内存 8GB 时,150 个子进程约 3.75GB,在可接受范围内;设置 pm.max_requests=1000 定期回收避免内存泄漏累积。
- 打开 pm.status_path = /php_status 与 slowlog,便于定位瓶颈与慢请求。
- OPcache 加速
- 启用并合理设置:opcache.enable=1; opcache.memory_consumption=128–256; opcache.interned_strings_buffer=8; opcache.max_accelerated_files=4000–7963; opcache.revalidate_freq=60;(生产建议关闭频繁校验,开发环境可缩短)。
- 运行与超时
- 调整 max_execution_time、max_input_time、memory_limit 与上传相关参数;开启 display_errors=Off; log_errors=On 避免泄露与性能抖动。
四 MySQL/MariaDB 层优化
- 内存与日志
- 将 innodb_buffer_pool_size 设为物理内存的 50%–80%(专用库可更高);innodb_log_file_size 设为 128M–512M 平衡恢复时间与写放大。
- 连接与会话
- 结合实例规格与业务峰值设置 max_connections,避免过大导致上下文切换与内存压力;必要时使用连接池/中间件降低直连数。
- 持久化与 I/O
- innodb_flush_log_at_trx_commit=1 提供强一致性(性能较低);对允许一定数据丢失的场景可评估 2 或 0 提升吞吐(需充分评估风险)。
- 设置 innodb_io_capacity 匹配磁盘能力;使用 ext4/XFS 并挂载 noatime 减少元数据开销。
- 索引与查询
- 为高频查询条件建立合适索引,优先 覆盖索引;用 EXPLAIN 分析执行计划,优化慢 SQL;定期 ANALYZE/OPTIMIZE TABLE 降低碎片。
- 工具与扩展
- 借助 MySQLTuner、Percona Toolkit 做持续体检;引入 Redis/Memcached 做热点数据缓存,减轻数据库压力。
五 操作系统与压测闭环
- 文件描述符与内核
- 提升系统/进程文件句柄:worker_rlimit_nofile 65535; 并在 /etc/security/limits.conf 设置 nofile 65535;必要时调大 net.core.somaxconn、net.ipv4.tcp_max_syn_backlog 提升连接接纳能力。
- 适度降低 vm.swappiness,优先使用物理内存,减少 swap 抖动对延迟的影响。
- 存储与文件系统
- 使用 SSD/NVMe,挂载 noatime;对高写入场景考虑 XFS 或优化 ext4 挂载参数。
- 监控与日志
- 定制 Nginx 访问/错误日志,对静态资源可关闭访问日志;集中采集 error.log 与 slowlog,配合 Prometheus/Grafana 建立告警与容量水位线。
- 压测与迭代
- 采用 wrk -t4 -c100 -d60s 等渐进式压测,观察 RPS、P95/P99、超时/错误;按“瓶颈定位→参数调整→复测验证”的闭环迭代,避免一次性大幅改动带来不确定性。