赞片CMSCPU高

liulian
liulian 正式会员超兽战士
发布于 2026-10-07 12:05 ·0 浏览 ·0 回复

学完这篇你能拿到一套可照做的排查顺序:从定位高CPU进程开始,依次处理赞片CMS的采集任务、缓存、MySQL慢查询、PHP-FPM并发和恶意采集,把服务器负载降下来。

第一步:确认到底是谁在吃CPU

这一步要拿到“罪魁祸首”的进程名和PID,避免瞎改配置。SSH登录服务器,执行:

top -c

按 P 键按CPU排序。看第一行是 php-fpm、nginx、mysqld 还是 redis-server。如果是 php-fpm 占满,问题在PHP层;如果是 mysqld,先查数据库。记下PID后执行:

ps aux | grep php-fpm

看具体是哪个站点池。宝塔面板用户也可以打开“宝塔面板 8.0.5”左侧“监控”,看CPU曲线和进程排行。

注意:不要一上来就重启MySQL或PHP,先记录进程和访问日志,否则重启后现场就没了。

第二步:关掉赞片CMS的自动采集和后台统计

这一步要切断最耗CPU的定时任务。进入赞片CMS后台,路径一般是:后台 - 系统 - 定时任务,把“自动采集”“自动生成缓存”“蜘蛛统计”“访问日志记录”全部设为“关闭”。再进后台 - 采集管理,暂停所有采集任务。

然后清运行缓存。假设站点目录是 /www/wwwroot/zhanpian,执行:

rm -rf /www/wwwroot/zhanpian/runtime/cache/*
rm -rf /www/wwwroot/zhanpian/runtime/log/*

如果赞片CMS用的是ThinkPHP,缓存目录通常是 runtime/cache 和 runtime/log。清完后刷新前台,观察 top 里php-fpm是否下降。

注意:清缓存前先备份 runtime 目录,避免把授权文件或自定义配置清掉。

第三步:给赞片CMS接上Redis缓存

这一步让数据库查询次数大幅下降。宝塔面板“软件商店”安装Redis,再进“软件商店 - PHP 7.4 - 设置 - 安装扩展”,安装 redis 扩展。然后回赞片CMS后台:系统 - 基本设置 - 缓存设置,缓存类型选 Redis,主机 127.0.0.1,端口 6379,密码留空,数据库 0,保存。

如果后台没有缓存设置,就改配置文件。在站点根目录找 config/cache.php 或 application/config.php,写入:

'cache' => [
    'type' => 'redis',
    'host' => '127.0.0.1',
    'port' => 6379,
    'password' => '',
    'select' => 0,
],

保存后重启PHP-FPM:

/etc/init.d/php-fpm-74 restart

注意:Redis只监听127.0.0.1,并设置 requirepass。如果6379对公网开放且无密码,几小时内就会被挖矿程序占满CPU。

第四步:优化MySQL慢查询和伪静态

这一步减少数据库全表扫描。宝塔面板“数据库 - 管理 - phpMyAdmin”,执行:

SHOW FULL PROCESSLIST;

看到 Sending data、Copying to tmp table 的SQL,记下来。给赞片CMS常用表加索引,表前缀看 config/database.php。例如:

ALTER TABLE mac_vod ADD INDEX idx_type_id (type_id);
ALTER TABLE mac_vod ADD INDEX idx_vod_time (vod_time);
ALTER TABLE mac_play ADD INDEX idx_vod_id (vod_id);

再开慢查询:宝塔“数据库 - 配置修改”,设置 slow_query_log=1、long_query_time=1,保存后重启MySQL。伪静态在“网站 - 站点设置 - 伪静态”,选 thinkphp 或粘贴赞片CMS官方规则。

注意:加索引前先 EXPLAIN 看是否真用到,视频表数据大时加索引会锁表,建议低峰期操作。

第五步:限制PHP-FPM并发并防采集

这一步防止爬虫和突发流量打满CPU。宝塔“软件商店 - PHP 7.4 - 设置 - 性能调整”,把 max_children 从默认50降到10-20。1核1G内存设10,2核4G设20。max_requests 设500。保存重启。

防采集:宝塔“网站 - 防火墙 - Nginx防火墙”,开启“CC防御”,频率设“60秒60次”,在“UA黑名单”加入 SemrushBot、AhrefsBot、MJ12bot。再在站点配置文件加:

limit_req_zone $binary_remote_addr zone=one:10m rate=5r/s;
location / {
    limit_req zone=one burst=10 nodelay;
}

保存后重载Nginx:

nginx -t && nginx -s reload

第六步:最后查木马和恶意PHP文件

如果以上都做完CPU还高,查后门。宝塔“网站 - 木马查杀”全盘扫描,或执行:

find /www/wwwroot/zhanpian -name "*.php" -mtime -7 -print

看有没有 eval、base64_decode、assert 开头的文件,删掉后改后台密码、数据库密码和SSH端口。

小结

  • 先用 top -c 定位是PHP、MySQL还是Redis吃CPU。
  • 关赞片CMS自动采集、蜘蛛统计和访问日志,清 runtime/cache。
  • 接Redis缓存,并确保Redis只监听127.0.0.1。
  • 给 vod、play 等表加索引,开慢查询。
  • PHP-FPM并发按内存调小,Nginx防火墙挡采集。
  • 最后查木马,改所有密码。
版权声明:本文来自 GJ站长论坛《赞片CMSCPU高》
原文链接:https://www.gj0.com/thread-270.html
转载请注明出处并保留本声明;内容仅代表作者观点,与本站立场无关。若本文涉嫌侵权,请联系本站处理。

全部回复 0

还没有回复,来抢沙发~