CentOS LNMP服务器优化指南
优化CentOS LNMP(Linux+Nginx+MySQL+PHP)服务器需从硬件基础、系统底层、组件配置、缓存策略、前端加速、监控维护六大维度综合调整,以下是具体措施:
硬件是服务器性能的基础,需根据业务规模选择合适的配置:
worker_processes、PHP-FPM的pm.max_children参数匹配,以充分利用多线程处理能力。操作系统配置直接影响资源调度效率:
numactl --interleave=all),避免内存分配不均导致的性能下降;调整内核参数优化内存与网络:# 减少交换分区使用(优先使用物理内存)
echo "vm.swappiness = 5" >> /etc/sysctl.conf
# 控制脏页刷新频率(平衡磁盘I/O与内存利用率)
echo "vm.dirty_background_ratio = 5" >> /etc/sysctl.conf
echo "vm.dirty_ratio = 10" >> /etc/sysctl.conf
sysctl -p # 生效配置
noatime,nodiratime选项(减少文件访问时间记录的开销)。Nginx作为Web服务器,需调整进程与连接参数提升并发处理能力:
worker_processes auto; # 自动匹配CPU核心数
events {
worker_connections 1024; # 单个进程最大连接数(需大于等于PHP-FPM的pm.max_children)
use epoll; # Linux下高性能事件模型
multi_accept on; # 一次接受多个连接
}
gzip on;
gzip_types text/plain text/css application/json application/javascript text/xml application/xml application/xml+rss text/javascript;
gzip_comp_level 6; # 压缩级别(1-9,6为平衡值)
location ~* \.(jpg|jpeg|png|gif|css|js|ico)$ {
expires 30d;
access_log off;
add_header Cache-Control "public";
}
fastcgi_read_timeout避免超时报错):location ~ \.php$ {
fastcgi_pass 127.0.0.1:9000;
fastcgi_index index.php;
include fastcgi_params;
fastcgi_read_timeout 300; # 超时时间(秒)
}
数据库是性能瓶颈的重灾区,需重点调整缓冲区与查询效率:
[mysqld]
innodb_buffer_pool_size = 4G # 示例:4GB内存分配4GB给InnoDB
innodb_buffer_pool_instances = 4 # 缓冲池实例数(减少锁竞争,建议为缓冲池大小的1/4-1/2)
key_buffer_size = 256M # MyISAM索引缓冲区(若使用InnoDB可设为64M)
max_connections = 200 # 最大并发连接数(需小于等于Nginx的worker_connections)
thread_cache_size = 16 # 线程缓存(减少线程创建开销)
query_cache_type = 0 # MySQL 8.0+默认禁用(高并发写入场景建议关闭)
slow_query_log = 1 # 开启慢查询日志
long_query_time = 1 # 慢查询阈值(秒)
EXPLAIN分析慢查询,为高频查询字段添加索引;使用OPTIMIZE TABLE整理碎片(针对频繁更新的表)。PHP作为动态脚本,需通过缓存与进程管理提升执行效率:
zend_extension=opcache.so
opcache.enable=1
opcache.memory_consumption=128 # 缓存大小(MB,根据内存调整)
opcache.max_accelerated_files=10000 # 缓存文件数(需覆盖项目文件总数)
opcache.revalidate_freq=60 # 文件修改后重新编译的时间间隔(秒)
pm = dynamic),根据内存调整进程数(示例:1GB内存分配50个PHP进程):[www]
pm = dynamic
pm.max_children = 50 # 最大子进程数(避免内存耗尽)
pm.start_servers = 5 # 启动时的进程数
pm.min_spare_servers = 5 # 最小空闲进程数
pm.max_spare_servers = 10 # 最大空闲进程数
request_terminate_timeout = 30 # 脚本执行超时时间(秒)
通过缓存减少后端压力,提升访问速度:
pm为ondemand(按需启动进程),配合Redis缓存动态内容。loading="lazy"),优化图片格式(如WebP替代JPEG/PNG)。提升系统容灾能力与并发处理能力:
upstream backend {
server 192.168.1.101:80;
server 192.168.1.102:80;
keepalive 32; # 长连接数(减少TCP握手开销)
}
server {
listen 80;
location / {
proxy_pass http://backend;
}
}
持续监控系统状态,快速定位性能瓶颈:
htop(实时进程监控)、iostat(磁盘I/O监控)、vmstat(系统资源监控)等命令行工具。/var/log/nginx/error.log)、MySQL慢查询日志(slow_query.log)、PHP错误日志(/var/log/php-fpm/error.log),使用pt-query-digest(MySQL性能分析工具)找出高频慢查询,针对性优化。mysqldump、配置文件备份cp /etc/my.cnf /etc/my.cnf.bak),避免误操作导致数据丢失。yum update),修复安全漏洞并获取最新性能优化补丁。