[玩坏 Linux 的 N 种方式] 垃圾代码中有死循环

本系列是查阅无数资料,又不想从头开始读厚厚的计算机操作系统教材,痛定思痛之后脑洞大开的结果。鉴于我有一些基础概念,那就从破坏性实验开逆向思考:用垃圾代码搞坏 Linux,顺便了解各种情况下系统诊断命令的输出。
我的智商下,第一个可能搞坏操作系统的代码就是死循环了。
先上代码。最简单的 Python。

def run(): i = 0 while(True): i += 1if __name__ == "__main__": run()

在 linux 上执行这个 Python 脚本。
使用 top 查看
[玩坏 Linux 的 N 种方式] 垃圾代码中有死循环
文章图片

关键信息:
  • load avarage 的三个值依次开始升高。因为分别代表 1 、 5、 15 分钟的系统负载
  • load avarage 第一位一分钟后达到 ~ 1。表示单核 cpu 被占满。
  • python 进程的 cpu 达到 100%,该进程所在的 cpu 占满。
  • cpu idle 达到 93.5 ,说明整体看 cpu 还是非常空的。 idle 近似理解成空跑。晶振在不停的发时钟信号,但是没有任务要做。
继续用 htop 看系统状态
[玩坏 Linux 的 N 种方式] 垃圾代码中有死循环
文章图片

可以看到编号是 10 的 CPU 占用率居高不下,其他 cpu 没动静。传说中的:一方有难、八方围观。
关键信息:
  • 死循环执行一段时间后 load avarage 现在都起来了,依次起立。起来吧,极寒交迫的 CPU
  • 系统硬件 CPU 是 8 core 16 thread。Htop 里面 cpu 显示了 16 个。
  • 一个进程会在一个固定逻辑 cpu 中执行,不会调度到其他 cpu 上。
破坏加码
死循环搞不坏系统,假如再起一个死循环呢?
打开两个命令行,执行两个 forever loop 代码
[玩坏 Linux 的 N 种方式] 垃圾代码中有死循环
文章图片

【[玩坏 Linux 的 N 种方式] 垃圾代码中有死循环】HTOP 里面成功点亮第二个 cpu 。
关键信息:
  • 第二个进程占用另外一个逻辑 CPU 核,占用率 100%
  • load 逼近 2 。看来 load 的值跟 cpu 逻辑核对应。load 到 16 说明所有 cpu 满载
TOP 中观察 cpu 相关数据
[玩坏 Linux 的 N 种方式] 垃圾代码中有死循环
文章图片

关键信息:
  • 12.5% 的 us 。forever loop 占用的是用户态的 cpu. 2/16 = 12.5%
  • 86.9% 的 id 表示还有很多核在空载。14/16 = 87.5%

    推荐阅读