全球主机交流论坛备用站

 找回密码
 立即注册

QQ登录

只需一步,快速开始

全球云38元起免备案V2EX搬瓦工VPS
SEO查询超级PING网站测速
Virmach特价鸡乌云漏洞吾爱破解
查看: 210|回复: 8

个人关于 宝塔面板的0点CPU高占用bug 的排查分析

[复制链接]

5

主题

1349

帖子

3393

积分

论坛元老

Rank: 8Rank: 8

积分
3393
发表于 2022-6-10 15:20:11 | 显示全部楼层 |阅读模式
20230417
本帖最后由 flyqie 于 2022-6-10 15:43 编辑

原帖: https://hostloc.com/thread-1030708-1-1.html

本人测试环境: Bt-Panel 7.7.0, Debian10 amd64

经查看本地/www/server/panel目录下的面板代码以及与老哥交流(原帖子回复), 确认原帖老哥拿到的代码并非宝塔目前主版本代码(可能是开发版).

分析

宝塔目前主版本代码会执行 /www/server/panel/BT-Task 作为BT-Task service.

/www/server/panel/BT-Task 引入了 /www/server/panel/task.py 并执行其中的main函数.

在 task.py 中, main函数中会开启多个线程去调用其他任务, 最后主进程交由startTask函数进行处理.

startTask是个死循环函数, 它会先执行从面板数据库中拿取的任务, 之后调用siteEdate函数进行网站到期处理.

siteEdate 函数正常来说应该在一天内只执行一次 /www/server/panel/script/site_task.py , 但是很不幸宝塔程序员逻辑写错了:


  1. 文本被拦截, 请移步 https://pastebin.com/cQfHLFBP
复制代码


这将会导致在第一次执行后, 每次调用siteEdate函数时都会继续执行 /www/server/panel/script/site_task.py .

更糟糕的是, /www/server/panel/script/site_task.py 中似乎也没有对此做处理(判断时间), 也就是说site_task.py会不断执行一系列没有必要的检测.

修复

建议官方尽快解决, 目前可用临时修复补丁进行修复, 但不保证完全可靠(补丁基于7.7.0并且未经过长期及生产环境测试), 建议谨慎使用.


  1. 文本被拦截, 请移步 https://pastebin.com/e7TFQte0
复制代码


---

更新链接后帖子重开
MJJ,你的签名掉了~~~
回复

使用道具 举报

68

主题

850

帖子

2304

积分

金牌会员

Rank: 6Rank: 6

积分
2304
发表于 2022-6-10 15:22:45 | 显示全部楼层
这是专业人士,
MJJ,你的签名掉了~~~
回复 支持 反对

使用道具 举报

21

主题

1828

帖子

4633

积分

论坛元老

Rank: 8Rank: 8

积分
4633
发表于 2022-6-10 15:24:02 | 显示全部楼层
2年前就有人反应了 现在估计人家也懒得修复
MJJ,你的签名掉了~~~
回复 支持 反对

使用道具 举报

24

主题

307

帖子

980

积分

高级会员

Rank: 4

积分
980
发表于 2022-6-10 15:24:13 | 显示全部楼层
支持企鹅大佬
MJJ,你的签名掉了~~~
回复 支持 反对

使用道具 举报

5

主题

1349

帖子

3393

积分

论坛元老

Rank: 8Rank: 8

积分
3393
 楼主| 发表于 2022-6-10 15:43:34 | 显示全部楼层
链接已更新~
MJJ,你的签名掉了~~~
回复 支持 反对

使用道具 举报

276

主题

1034

帖子

2820

积分

金牌会员

Rank: 6Rank: 6

积分
2820
发表于 2022-6-10 16:18:49 | 显示全部楼层
我来试试,看能不能解决问题
MJJ,你的签名掉了~~~
回复 支持 反对

使用道具 举报

5

主题

1349

帖子

3393

积分

论坛元老

Rank: 8Rank: 8

积分
3393
 楼主| 发表于 2022-6-10 17:32:06 | 显示全部楼层
imes 发表于 2022-6-10 16:18
我来试试,看能不能解决问题

另外其实还可以通过给oldEdate赋值为mEdate实现,宝塔github上代码就是这么做的。

这样可以避免每几秒就读取一次文件,但是因为考虑到site_task.py不可控,所以就没用这个方法。
MJJ,你的签名掉了~~~
回复 支持 反对

使用道具 举报

32

主题

428

帖子

1100

积分

金牌会员

Rank: 6Rank: 6

积分
1100
发表于 2022-6-10 16:18:00 | 显示全部楼层
为啥非要用BT?
MJJ,你的签名掉了~~~
回复 支持 反对

使用道具 举报

0

主题

1

帖子

4

积分

新手上路

Rank: 1

积分
4
发表于 2022-6-10 17:44:21 | 显示全部楼层
真男人收撸,要什么bt
我自己平常很少用宝塔,生产环境更不会去用。

今天正好看到有这个帖子,抱着好奇的心理排查了一下。

记得之前还发现过宝塔有个强关联系统语言的硬盘大小显示bug。

也是论坛看到的帖子,不知道现在解没解决。
MJJ,你的签名掉了~~~
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

展开

QQ|Archiver|手机版|小黑屋|全球主机交流论坛备用站

GMT+8, 2024-5-19 22:52 , Processed in 0.045643 second(s), 26 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表