centos lnmp服务器性能调优策略
导读:CentOS LNMP 性能调优策略 一 系统层优化 资源与存储:优先使用 SSD/NVMe,数据库与日志分离;网卡至少 1Gbps,更高并发建议 10Gbps 或链路聚合。 文件句柄与进程数:提升系统及服务可打开文件数与进程数,避免“t...
CentOS LNMP 性能调优策略
一 系统层优化
- 资源与存储:优先使用 SSD/NVMe,数据库与日志分离;网卡至少 1Gbps,更高并发建议 10Gbps 或链路聚合。
- 文件句柄与进程数:提升系统及服务可打开文件数与进程数,避免“too many open files”。
示例(/etc/security/limits.conf):
在 systemd 服务单元中添加:* soft nofile 65535 * hard nofile 65535 * soft nproc 65535 * hard nproc 65535[Service] LimitNOFILE=65535 LimitNPROC=65535 - 内核与虚拟内存:降低换页倾向、优化脏页刷新,提升 I/O 稳定性。
示例(/etc/sysctl.conf):vm.swappiness=10 vm.dirty_background_ratio=5 vm.dirty_ratio=10 net.core.somaxconn=65535 net.ipv4.tcp_tw_reuse=1 net.ipv4.tcp_fin_timeout=30 - 文件系统与调度:数据库建议使用 XFS;I/O 调度器优先 noop/deadline(SSD/NVMe)。
- 监控与告警:部署 Prometheus + Grafana,采集 Nginx、PHP-FPM、MySQL、系统资源 指标;定期分析 Nginx、MySQL、PHP 错误与慢日志。
二 Nginx 调优
- 并发与连接:
worker_processes auto; worker_rlimit_nofile 65535; events { worker_connections 8192; use epoll; multi_accept on; accept_mutex off; # 高并发下通常关闭更稳 } - 传输与长连接:
http { 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; } - 状态与观测:启用 stub_status 与 /nginx_status 页面,配合监控观察 Active/Reading/Writing/Waiting 连接状态。
三 PHP-FPM 调优
- 进程模型与数量:按内存与观测值设定 pm.max_children,避免 OOM;启用慢日志定位问题。
示例(/etc/php-fpm.d/www.conf):
内存估算:若单进程约 25MB,则 150 进程约 3.75GB(在 8GB 内存机器上可接受)。[www] user = nginx group = nginx pm = static pm.max_children = 150 pm.max_requests = 1000 slowlog = /var/log/php-fpm/www-slow.log request_slowlog_timeout = 3s pm.status_path = /php_status - OPcache 加速:
opcache.enable=1 opcache.memory_consumption=256 opcache.max_accelerated_files=7963 opcache.revalidate_freq=60 - 连接与池化:Nginx 与 PHP-FPM 使用 Unix Socket 通常较 TCP 127.0.0.1:9000 更低开销;合理设置 pm.process_idle_timeout 与 request_terminate_timeout。
- 观测:通过 /php_status 与日志分析 queue、slow requests、process usage。
四 MySQL MariaDB 调优
- 缓冲与内存:将 innodb_buffer_pool_size 设为物理内存的 50%–70%(写多或内存紧张可下调),提升热点数据与索引命中率。
- 连接与会话:根据压测与业务峰值设置 max_connections,避免连接风暴;结合连接池/长连接在应用侧复用连接。
- 日志与持久化:权衡性能与安全,必要时将 innodb_flush_log_at_trx_commit=2(宕机可能丢失最近 1 秒事务)。
- 日志文件大小:适度增大 innodb_log_file_size 与 innodb_log_files_in_group,减少 checkpoint 频率(变更前务必备份并按步骤操作)。
- 查询与索引:开启 slow_query_log,用 pt-query-digest 分析;为高频 WHERE/JOIN/ORDER BY 字段建立合适索引,避免全表扫描,使用 EXPLAIN 验证执行计划。
- 架构与缓存:引入 Redis/Memcached 做热点数据缓存;大表考虑 分区/分表;定期维护与监控。
五 压测与瓶颈定位流程
- 基线压测:使用 wrk 或 ab 建立基线(示例:
wrk -t4 -c100 -d60s http://127.0.0.1/index.php),记录 Requests/sec、P95/P99 延迟、错误率。 - 分层定位:
- Nginx:观察 Active/Waiting 与 带宽/连接数,先调 worker_connections、keepalive、gzip/缓存。
- PHP-FPM:查看 /php_status 队列与 slowlog,按 pm.max_children 与 OPcache 逐步放大。
- MySQL:分析 慢查询 与 连接数,优化索引/SQL,再调整 innodb_buffer_pool_size 等。
- 系统资源:用 top/vmstat/iostat/ss 观察 CPU、内存、I/O 等待、网络;若 I/O 等待高,优先检查存储与索引/查询。
- 迭代验证:每次只变更少量参数,回放相同压测场景,确认 P95/P99 延迟与吞吐 的改善是否稳定。
声明:本文内容由网友自发贡献,本站不承担相应法律责任。对本内容有异议或投诉,请联系2913721942#qq.com核实处理,我们将尽快回复您,谢谢合作!
若转载请注明出处: centos lnmp服务器性能调优策略
本文地址: https://pptw.com/jishu/758995.html
