谷姐:我们都是谷歌迷
We are all Google fans

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

Rate this post

原帖: 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 , 但是很不幸宝塔程序员逻辑写错了:

    文本被拦截, 请移步 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并且未经过长期及生产环境测试), 建议谨慎使用.

    文本被拦截, 请移步 https://pastebin.com/e7TFQte0

---

更新链接后帖子重开

热议
2楼 aes 2小时前

这是专业人士,

3楼 周润发 2小时前

2年前就有人反应了 现在估计人家也懒得修复

4楼 Backkom 2小时前

支持企鹅大佬

5楼 flyqie 2小时前

链接已更新~

6楼 小旭 2小时前

7楼 imes 1小时前

我来试试,看能不能解决问题

8楼 flyqie 半小时前

我来试试,看能不能解决问题

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

这样可以避免每几秒就读取一次文件,但是因为考虑到site_task.py不可控,所以就没用这个方法。

9楼 唐王李世民 20分钟前

为啥非要用BT?

10楼 heihai 10分钟前

真男人收撸,要什么bt

申明:本文内容由网友收集分享,仅供学习参考使用。如文中内容侵犯到您的利益,请在文章下方留言,本站会第一时间进行处理。

未经谷姐允许不得转载:谷姐靓号网 » 个人关于 宝塔面板的0点CPU高占用bug 的排查分析-flyqie
分享到: 生成海报

热门文章

评论 抢沙发

评论前必须登录!

立即登录   注册

买Google Voice认准【谷姐靓号网】

Google Voice靓号列表Google Voice自助购买
切换注册

登录

忘记密码 ?

切换登录

注册

我们将发送一封验证邮件至你的邮箱, 请正确填写以完成账号注册和激活