CentOS LNMP服务器配置优化指南
sudo yum update -y,确保内核及软件包为最新版本(修复安全漏洞并提升性能);noatime,nodiratime选项(减少文件访问时间记录);/etc/sysctl.conf优化网络与内存管理,关键参数如下:vm.swappiness = 10 # 减少内存交换(值越低越优先使用物理内存)
vm.dirty_background_ratio = 10 # 脏页刷新后台阈值(避免内存占用过高)
vm.dirty_ratio = 20 # 脏页刷新强制阈值
net.ipv4.tcp_tw_reuse = 1 # 复用TIME-WAIT连接(提升TCP并发能力)
net.core.somaxconn = 65535 # 监听队列最大长度(避免连接拒绝)
执行sudo sysctl -p使配置生效。worker_processes auto;(设置为CPU核心数,充分利用多核);events块中调整:worker_connections 1024;(单进程最大连接数,根据内存调整,如8G内存可设为2048)、use epoll;(Linux下高性能事件模型)、multi_accept on;(一次接受多个连接,提升吞吐量);http块中启用,减少传输数据量:gzip on;
gzip_types text/plain text/css application/json application/javascript text/xml application/xml;
gzip_comp_level 6; # 压缩级别(1-9,6为平衡点)
location ~* \.(jpg|jpeg|png|gif|css|js)$ {
expires 30d;
add_header Cache-Control "public, no-transform";
}
keepalive_timeout 65;
keepalive_requests 100;
ssl_protocols TLSv1.2 TLSv1.3;
ssl_ciphers HIGH:!aNULL:!MD5;
ssl_prefer_server_ciphers on;
ssl_session_cache shared:SSL:10m;
ssl_session_timeout 10m;
修改配置后执行sudo systemctl reload nginx生效。innodb_buffer_pool_size是InnoDB核心参数,设置为服务器内存的50%-80%(如8G内存设为4G-6G),用于缓存数据与索引,显著提升查询性能;innodb_log_file_size:增大日志文件大小(如256M-512M),减少日志切换频率;innodb_flush_log_at_trx_commit:设为2(平衡性能与数据安全,允许事务提交后日志异步刷盘,丢失1秒内数据);max_connections根据并发需求设置(如500-1000),避免过多连接导致内存耗尽;slow_query_log = 1;
slow_query_log_file = /var/log/mysql/slow.log;
long_query_time = 1; # 超过1秒的查询视为慢查询
使用pt-query-digest或mysqlslowdump分析日志,优化慢查询语句;INT代替VARCHAR存储数字),添加必要索引(避免全表扫描)。dynamic模式(动态调整进程数,适合大多数场景);pm.max_children:根据内存计算(如(可用内存 - 1G) / 单个PHP进程内存,单个进程约20-30M),如8G内存设为50-60;pm.start_servers:启动时的进程数(设为max_children的1/4-1/2,如12-30);pm.min_spare_servers/pm.max_spare_servers:空闲进程数范围(避免频繁创建/销毁进程,如10-40);pm.max_requests:每个进程处理的最大请求数(如500),防止内存泄漏;php-opcache扩展,配置/etc/php.ini:[opcache]
zend_extension=opcache.so;
opcache.enable=1;
opcache.memory_consumption=128; # 缓存大小(MB,根据内存调整)
opcache.interned_strings_buffer=8;
opcache.max_accelerated_files=10000; # 缓存文件数
opcache.revalidate_freq=60; # 文件修改后重新编译的时间间隔(秒)
opcache.fast_shutdown=1; # 快速关闭,提升性能
重启PHP-FPM使配置生效:sudo systemctl restart php-fpm。OPTIMIZE TABLE命令整理表碎片(针对频繁更新的表),提升查询效率;EXPLAIN分析查询计划,添加缺失索引,避免SELECT *等低效查询。top、htop、vmstat、iostat等工具监控CPU、内存、磁盘I/O、网络带宽等资源使用情况;access_log与error_log、MySQL的slow.log、PHP-FPM的status页面(sudo systemctl status php-fpm),分析访问趋势与错误信息;upstream模块(如轮询、IP哈希、最少连接等策略);