宝塔面板的0点CPU高占用bug解疑

83次阅读

共计 2357 个字符,预计需要花费 6 分钟才能阅读完成。

bug 找到了,点击这里https://hostloc.com/thread-1030797-1-1.html

宝塔面板在最近两年,有个很奇怪的 bug,具体表现为一旦过了 0 点,CPU 使用率就会突然上去,并且一直下不来。可以考证的最早记录是 2021 年 1 月份 pc6a(https://pc6a.com/3144.html)写下的。
具体情况如下图,在初始安装完成后,CPU 的负载很低,表现一切正常。一旦过了 0 点,CPU 使用率瞬间上去了。

通过 htop 查看,占用 CPU 最高的是 site_task.py,这个程序本身是系统的日志上报功能模块。但是每 10 秒钟就会出现一次,每次出现就极大的提高了 CPU 使用率,显得极其诡异。要不是因为能看到源码,一定会判定它是木马,实际上这个程序并不复杂,因此大概率是个逻辑错误或者程序员水平低下导致的 bug。我使用的是 Debian 11 系统进行测试的,在腾讯云上有一篇记录(https://cloud.tencent.com/developer/article/1958272),是在 CentOS 7 上测试出相同现象的。这说明了和系统本身相关性不大。

宝塔面板的源码是开放的,于是在 GitHub(https://github.com/aaPanel/BaoTa)上下载了下来,搜索和 site_task 相关的内容。最终发现了 site_task.py 是通过 bt-task.c 这个文件调用 /www/server/panel/pyenv/bin/python3 /www/server/panel/script/site_task.py 而运行起来的。注释里面写的是“网站到期时间处理”,有一个 while true 的死循环,每个小时执行一次。

仔细查看代码内容,发现这个 循环中涉及到了日期更改 。程序首先读取文件中的日期,判断和目前日期是否相同,如果相同就会睡眠一个小时。此外还有个将文件日期更改的功能, 由于宝塔的代码稀烂,很难捋顺它的程序,我就不去细查了。此外,“重新标记执行日期并执行到期网站脚本”这里好像是缺了一个判断,它这种写法导致频繁读写硬盘,降低运行效率。

言归正传, 0 点 CPU 高占用 bug 大概率就是这个模块导致的了,涉及到日期更改和 site_task.py 程序。出于某种原因(比如程序员水平稀烂)导致了逻辑错误,最终造成一旦日期更改了,面板就不知道要做什么,然后疯狂进行 10 秒一次循环。这种好几年的 bug 居然都没有发现,只能说宝塔的水平是极其差的。

临时的解决方法是设置定时任务,每天 0 点重启一次面板。终端输入 crontab -e,然后写入 2 0 * * * /etc/init.d/bt restart,即每天 0 点 2 分的时候重启一次面板,让日期归零,从而避开这个 bug。我有点怀疑这个 bug 可能和 Let’s Encrypt 的 SSL 证书申请有关,好像是在我全部使用第三方 SSL 证书之后才发现这个 bug 的。具体的表现可能是如果面板没有 Let’s Encrypt 的 SSL 证书申请任务,那么就会出现这个 bug,具体是不是我还在尝试中。

网友回复:

注册 之前论坛发过,一堆人还说是我机器配置低哈哈哈哈。

imes 有理有据  支持

MMMM 你之前是不是也没有用 Let’s Encrypt 的 SSL 证书?

燕十三丶 刚才看了下, 疑似找到问题所在了(基于宝塔面板 7.7.0). 能否请楼主告知以下信息方便验证? 1. 宝塔版本 2. 文件 /www/server/panel/BT-Task 的有无以及文件内容? 3. 文件 /www/server/panel/task.py 的有无?

imes 免费帮找 bug,宝塔感激涕零

flyqie 临时的解决方法是设置定时任务,每天 0 点重启一次面板。终端输入 crontab -e,然后写入 2 0 * * * /etc/init.d/bt restart,即每天 0 点 2 分的时候重启一次面板,让日期归零,从而避开这个 bug。我有点怀疑这个 bug 可能和 Let’s Encrypt 的 SSL 证书申请有关,好像是在我全部使用第三方 SSL 证书之后才发现这个 bug 的。具体的表现可能是如果面板没有 Let’s Encrypt 的 SSL 证书申请任务,那么就会出现这个 bug,具体是不是我还在尝试中。

adminii 代码有点烂 还天天更新地起劲

浪听涛 1. 版本 aapanel  6.8.25 2. BT-Task 存在,内容如下 3. task-py 存在 ls -lh /www/server/panel/BT-Task -rwx—— 1 root root 548 Jun  8 11:00 /www/server/panel/BT-Task ls -lh /www/server/panel/task.py -rw——- 1 root root 23K Apr 28 16:02 /www/server/panel/task.py #!/www/server/panel/pyenv/bin/python #coding: utf-8 # +——————————————————————- # | 宝塔 Linux 面板 # +——————————————————————- # | Copyright (c) 2015-2099 宝塔软件(http://bt.cn) All rights reserved. # +——————————————————————- # | Author: hwliang <[email protected]> # +——————————————————————- import os,sys os.chdir(‘/www/server/panel’) import task task.main()

boq 宝塔我也感觉技术不是那么强,但是这货的赛道确实选的好,这点不得不服

注册 今天刚自建第三方,刚测试了下还可以

注册 居然不是上传数据,太尴尬了

乌拉擦 我超 c 语言写的

正文完
 0