赞片CMSCPU高
学完这篇你能拿到一套可照做的排查顺序:从定位高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防火墙挡采集。
- 最后查木马,改所有密码。
原文链接:https://www.gj0.com/thread-270.html
转载请注明出处并保留本声明;内容仅代表作者观点,与本站立场无关。若本文涉嫌侵权,请联系本站处理。