
一、Web 服务器优化(以 Nginx 和 Apache 为例)
1. Nginx 优化
- 调整进程与连接数:根据 CPU 核心数设置工作进程(worker_processes),建议与核心数一致(如 4 核 CPU 设为 4);通过worker_connections限制单进程最大连接数(默认 1024,可提升至 4096),同时设置multi_accept on让进程快速响应新连接。
示例配置:
worker_processes 4;
worker_connections 4096;
multi_accept on;
- 启用高效传输模式:开启sendfile on减少用户态与内核态数据拷贝,tcp_nopush on合并数据包发送,tcp_nodelay on加速小数据包传输,降低带宽和 CPU 消耗。
- 压缩静态资源:通过gzip模块压缩 HTML、CSS、JS 等文本资源(压缩率设为 6-7 级),减少传输数据量。排除图片、视频等已压缩文件,避免无效消耗:
gzip on;
gzip_types text/html text/css application/javascript;
gzip_comp_level 6;
gzip_min_length 1k;
- 设置缓存策略:对静态资源(图片、字体)设置长期缓存(expires),减少重复请求。例如:
location ~* /.(jpg|jpeg|png|gif|ico)$ {
expires 30d;
add_header Cache-Control "public, max-age=2592000";
}
2. Apache 优化
- 切换高效 MPM 模式:将默认的prefork模式改为event或worker模式(多线程处理请求),减少进程创建开销。例如在httpd.conf中配置:
LoadModule mpm_event_module modules/mod_mpm_event.so
<IfModule mpm_event_module>
StartServers 2
MinSpareThreads 25
MaxSpareThreads 75
ThreadsPerChild 25
MaxRequestWorkers 150
MaxConnectionsPerChild 1000
</IfModule>
- 限制请求资源:通过LimitRequestBody限制 POST 请求大小(如设为 1M),避免大文件上传占用过多内存;关闭Indexes模块禁止目录浏览,减少不必要的请求处理。
二、数据库优化(以 MySQL 为例)
1. 内存与连接优化
- 合理分配缓存:根据 VPS 内存调整innodb_buffer_pool_size(建议占可用内存的 50-70%),缓存表数据和索引,减少磁盘 IO;设置query_cache_size(小型网站 50-100MB)缓存查询结果,重复查询直接返回。
示例配置(my.cnf):
innodb_buffer_pool_size = 2G # 4GB内存VPS建议值
query_cache_size = 64M
query_cache_type = ON
- 限制连接数:设置max_connections(如 200)避免连接过多导致内存溢出,同时通过wait_timeout(如 60 秒)回收闲置连接:
max_connections = 200
wait_timeout = 60
2. 查询与存储优化
- 启用慢查询日志:通过slow_query_log = 1记录执行时间超过long_query_time(如 2 秒)的 SQL,针对性优化(如添加索引、简化语句)。
- 优化表结构:使用合适的数据类型(如用int代替varchar存储数字),为频繁查询的字段建立索引(index),避免SELECT *查询冗余字段。
- 定期维护:执行OPTIMIZE TABLE优化碎片化表,减少磁盘占用;使用InnoDB引擎(支持事务和行级锁)替代MyISAM,提升并发处理能力。
三、通用资源节省策略
- 启用 PHP 缓存:安装OPcache缓存 PHP 预编译字节码,避免重复解析脚本,减少 CPU 消耗。配置php.ini:
opcache.enable = 1
opcache.memory_consumption = 128
opcache.max_accelerated_files = 10000
- 静态资源分离:将图片、视频等静态文件迁移至 CDN,降低 VPS 带宽和 IO 压力;通过Content-Disposition设置文件下载方式,避免浏览器解析非网页文件。
- 定期清理日志:设置logrotate自动压缩和删除旧日志(如 Nginx/MySQL 日志),防止磁盘空间耗尽。
效果验证
优化后通过htop观察 CPU / 内存使用率,iostat查看磁盘 IO(%util理想值<50%),mysqladmin status检查数据库连接数。若单站 CPU 峰值从 15% 降至 8%、内存占用减少 30%,则说明优化有效,可支持更多站点稳定运行。