宝塔面板性能优化方案
照着做完这一套,你能把宝塔面板服务器的响应速度和内存占用明显压下来,配置低的 2 核 2G 机器也能跑得稳。
第一步:先看清家底,别上来就改
这一步的目的是知道你的机器有多少内存、几个核、瓶颈在哪,后面所有参数都要按这个来定。登录宝塔面板(本文以 8.0.5 版为例),进「首页」,左上角能看到 CPU 核心数、内存总量、负载和实时流量。再点左侧「文件」,打开 /www/server/ 看各服务占的磁盘。
注意:内存数字要按「实际可用」算。1G 内存的机器给 MySQL 分配 1G 缓冲池,只会把自己搞崩。一般按总内存的 50%~60% 给数据库,剩下留给 PHP 和系统。
第二步:升级面板和运行环境
这一步是把老版本里已知的性能缺陷和 bug 修掉。面板里点「面板设置」→「关于」→ 点「检查更新」,升到最新稳定版。软件商店里进「已安装」,看 Nginx、MySQL、PHP 的版本,Nginx 建议 1.24 以上,PHP 建议 8.1 或 8.2(WordPress 等主流程序已兼容),MySQL 建议 5.7 或 8.0。
注意:升级 PHP 大版本前,先在「网站」里把站点 PHP 版本逐个切换测试,别一次性全切,否则某个老插件报错会让整站白屏。
第三步:调 Nginx 并发参数
这一步是让 Nginx 能扛住更多同时在线请求。软件商店 →「已安装」→ Nginx → 右侧「设置」→「配置修改」,在 http {} 段里调整:
worker_processes auto;
worker_connections 10240;
keepalive_timeout 65;
client_max_body_size 64m;
gzip on;
gzip_min_length 1k;
gzip_comp_level 5;
gzip_types text/plain text/css application/json application/javascript text/xml application/xml image/svg+xml;
open_file_cache max=10000 inactive=30s;
open_file_cache_valid 60s;
open_file_cache_min_uses 2;
open_file_cache_errors on;
改完点「保存」,再点右上角「重载配置」。open_file_cache 这组是重点,它把静态文件的句柄缓存住,能显著降低小站点的磁盘 IO。
注意:
worker_connections设太大会吃内存,2G 内存的机器填 10240 就够,1G 的填 5120。
第四步:调 PHP-FPM 和 OPcache
这一步决定动态页面的处理速度。软件商店 →「已安装」→ PHP 8.1 →「设置」→「性能调整」,按面板给出的内存推荐值选档,2G 内存一般选「2G 推荐方案」。同一页面点「安装扩展」,找到 OPcache 装上,再去「配置修改」里确认:
opcache.enable=1
opcache.memory_consumption=256
opcache.max_accelerated_files=10000
opcache.validate_timestamps=1
opcache.revalidate_freq=60
validate_timestamps=1 保持开启,否则你改了 PHP 文件不会立即生效,调试时会以为代码没保存成功。
第五步:调 MySQL 缓冲池
这一步是让数据库尽量在内存里查数据,不用读磁盘。软件商店 →「已安装」→ MySQL 8.0 →「设置」→「配置修改」:
innodb_buffer_pool_size = 1G
innodb_flush_log_at_trx_commit = 2
max_connections = 200
innodb_log_file_size = 256M
innodb_buffer_pool_size 按前面说的总内存 50%~60% 填。innodb_flush_log_at_trx_commit = 2 会牺牲极端断电时最后一秒的数据,换取明显更快的写入,普通站点可以接受。
注意:改完 MySQL 配置必须点「保存」再「重启」,MySQL 是重载不生效的。
第六步:装 Redis 做对象缓存
这一步能把大量重复的数据库查询挡在内存里。软件商店 →「软件商店」→ 搜索 Redis,安装并设置开机自启。然后回 PHP 设置的「安装扩展」里装 redis 扩展,重启 PHP。如果你的程序是 WordPress,再装「Redis Object Cache」插件并点「启用」。
第七步:改 Linux 内核参数
这一步是提高系统能同时处理的连接数。点「终端」,编辑 /etc/sysctl.conf,追加:
net.core.somaxconn = 65535
net.ipv4.tcp_max_syn_backlog = 8192
net.ipv4.tcp_tw_reuse = 1
net.ipv4.tcp_fin_timeout = 30
fs.file-max = 1000000
执行 sysctl -p 生效。再编辑 /etc/security/limits.conf,加两行 * soft nofile 65535 和 * hard nofile 65535,保存后 reboot 重启一次。
第八步:清理日志、关掉不用的插件
这一步是减少无效的磁盘写入。到「计划任务」里添加一条「日志切割」任务,对所有站点执行,保留 7 天。再检查两个吃资源的大户:「网站监控报表」和「系统监控」插件,用不上就停掉,它们会持续写数据库。「网站」→ 站点 →「设置」→「配置文件」里,访问量小的站点可以直接注释掉 access_log 那一行。
小结
- 所有参数按实际内存定,别照抄别人的数值
- Nginx 重点调
worker_connections和open_file_cache - PHP 装 OPcache,MySQL 把
innodb_buffer_pool_size给足 - Redis 做对象缓存,是提升动态页面最直接的一招
- 内核参数改完要
sysctl -p,文件句柄改完要重启 - 关掉高频写库的监控插件,顺手做好日志切割
原文链接:https://www.gj0.com/thread-1224.html
转载请注明出处并保留本声明;内容仅代表作者观点,与本站立场无关。若本文涉嫌侵权,请联系本站处理。