此篇文章主要是面向WP站点
宝塔面板性能优化步骤
“Linux工具箱”,第一步直接用它。
• 操作: 打开 Linux工具箱 -> 找到 Swap/虚拟内存。
• 设置: 填入 2048 (即 2GB) 或 4096 (4GB),点击确定。
• 作用: 这是保命底线。当你在后台高频保存复杂页面时,如果 4G 物理内存瞬间吃满,Swap 可以防止数据库和 PHP 崩溃。

MySQL 是重型展示站最容易卡脖子的地方,我们要给它足够的内存去缓存数据。
• 操作: 点击 MySQL 5.7 -> 设置 -> 性能调整。
• 设置:
○ 找到 优化方案,下拉菜单直接选择 2-4GB 这个档位。
○ 重点检查 innodb_buffer_pool_size 这个参数,它应该被自动调高到了 512M 或 1024M(如果没有,手动改成 512M)。
• 作用: 让绝大多数的产品查询直接在内存中完成,不再慢吞吞地去读写硬盘。

PHP 负责把前端的请求动态编译出来
• 第一步(装扩展): 点击 PHP 8.2 -> 设置 -> 安装扩展。务必安装 opcache 和 redis 这两个扩展(不要漏掉 redis,否则装的 Redis 软件就不起作用)。
• 第二步(调并发): 点击 性能调整。
○ 运行模式:动态模式 (Dynamic)
○ max_children:40(这是给整台服务器设定的最高安全水位,保证即使 5 个站同时活跃,也不会抽干 4G 内存)
○ start_servers:5
○ min_spare_servers:5
○ max_spare_servers:10
• 第三步(扩内存): 点击 配置修改。把 memory_limit 从默认的 128M 修改为 256M 。



• 操作: 点击 Nginx 1.26.3 -> 设置 -> 性能调整。
• 设置: 检查 worker_processes,通常可以设置为 2(对应你的 2 核 CPU),或者保持 auto。同时确保 Gzip 压缩 是开启状态(压缩级别 4 左右即可,不用太高以免吃 CPU)。

服务器底层架构调优完毕后,在每一个部署好的 WordPress 站点内部,必须完成这两个动作,彻底形成闭环:
1. 接通 Redis 内存数据库: 装好Redis后,在每个站点的后台安装 Redis Object Cache 插件并一键开启。让海量的重复查询直接走内存,大幅降低 MySQL 的运算压力。
2. 建立全页静态缓存: 给每个站点安装 WP Rocket(或其他强大的缓存插件),把前台海外访客看产品的流量 100% 挡在 PHP 和数据库之外。


服务器上要放 3-5 个站点,并且每个站点都要开启 Redis Object Cache,必须要修改 wp-config.php,给每个站点分配不同的 Redis 数据库 ID 或前缀。
• 如果不改的后果: 默认情况下,所有站点都会把缓存写进 Redis 的 0 号数据库。结果就是——A 网站的前台可能会莫名其妙显示出 B 网站的产品,整个数据库全乱套。
• 解决办法: 在每一个站点的 wp-config.php 文件中,加入以下两行代码(每个站点的编号必须唯一): 站点 A:
• PHP
|
Plain Text |
• 站点 B:
• PHP
|
Plain Text |
• 以此类推,这样 Redis 就会把每个网站的数据严格物理隔离,查询速度极快且互不干扰。
|
原来的WPconfig.php里可能会有自动生成的 |
1. Behavior in backend (WordPress 后台)
• 关掉会怎样? 你的 WordPress 仪表盘将不再“实时更新”。比如 WooCommerce 的实时销售额统计、插件的实时通知提示将停止自动刷新,必须等你手动按 F5 刷新网页才会更新。
• 对服务器的影响: 如果你开着后台挂机,关闭它可以省下大量无意义的 CPU 消耗。
• 建议:选择【Disable completely (完全禁用)】。平时谁也不会一直盯着仪表盘看实时数据,直接禁用,把宝贵的并发进程省下来。
2. Behavior in post editor (文章/页面编辑器)
• 关掉会怎样? 这会带来致命后果。Heartbeat 在这里的核心作用是“自动保存 (Autosave)”和“文章锁定(防止两个管理员同时编辑覆盖)”。如果完全关闭,当你在排版一个复杂的页面时,浏览器突然崩溃或断网,你刚才几个小时的努力就会全部白费,因为系统没有自动保存。
• 对服务器的影响: 编辑页面时高频的自动保存确实很吃 CPU。
• 建议:保持【Reduce activity (减少活动)】。也就是你截图里现在的状态。WP Rocket 会把自动保存的频率从默认的每 15 秒强制拉长到每 2 分钟一次。既保住了你的工作心血,又大幅降低了对 PHP 的压力。
3. Behavior in frontend (网站前台 - 访客看到的页面)
• 关掉会怎样? 如果你的网站前台安装了实时聊天插件、或者某些极其依赖 AJAX 实时刷新购物车的 WooCommerce 迷你购物车(Mini Cart),完全关闭可能会导致这些功能失效。
• 对服务器的影响: 如果前台有几百个访客,每个人每分钟都在向服务器发一次心跳请求,你的 2核4G 瞬间就会被击穿(出现 502 错误)。
• 建议:选择【Disable completely (完全禁用)】。既然你的前台页面已经有了 WP Rocket 的静态缓存,访客根本不需要和服务器保持这种毫无意义的“心跳连接”。(注:如果禁用后发现 WooCommerce 加入购物车有卡顿,再把它退回到截图里的【Reduce activity】即可)。

云厂商为了防止服务器被黑客用来发垃圾邮件,默认都是死死封锁 25 端口的。
站点触发了发邮件的动作,WordPress 底层的 PHPMailer 就会傻傻地去请求 25 端口。
因为端口被墙,请求发不出去,它就会一直在那里“等超时”。
40 个 PHP 并发进程,如果同时有 40 个人触发了邮件动作,这 40 个进程就会瞬间全部处于“挂起等待”状态,直接导致 CPU 飙升到 100%,整个网站彻底卡死报 502 Bad Gateway。
1. PHP 底层禁用
直接从 PHP 的配置文件里把 mail 函数阉割掉,让 PHP 彻底丧失发邮件的能力。
1. 打开宝塔面板,找到左侧的 软件商店 -> 点击 PHP-8.2 的 设置。
2. 在左侧菜单找到 【禁用函数】。
3. 在输入框里输入 mail,点击 添加。
4. 点击左侧的 【服务】,点击 重启 PHP。
• 效果: 只要有代码试图调用 PHP 底层的发件系统,会被瞬间拦截并报错,绝不会出现“等待超时”卡死 CPU 的情况。
2. WordPress 业务层拦截
仅仅禁用 PHP 函数,WordPress 有时候还是会走一遍耗时的代码逻辑然后再报错。作为开发者,最干净的做法是在 WordPress 刚要张嘴发邮件的时候,直接把堵回去。
你可以把下面这行代码,加到你当前主题的 functions.php 文件里(或者通过 Code Snippets 插件添加):
|
Plain Text |
• 效果: 这是 WordPress 官方提供的一个前置钩子(Hook)。只要有任何插件(包括 WooCommerce)试图发邮件,走到这里直接返回 false 结束流程。
注意:如果邮件功能被彻底关掉,登录点击“忘记密码”是收不到重置链接的,账号就彻底成了死档,必须有个发邮件的解决方案。(详细详见SMTP教程)



