我写了一个堪称愚蠢的小工具

78 天前
 shawnbluce

不知道各位有没有那种需要起一个程序占用特定 CPU 和内存的需求,我最近是有。在公司的一个需求自测的时候,需要设置「 CPU 告警阈值」和「内存告警阈值」,然后通过占用 CPU 和内存的方式触发告警。

之前占用 CPU 我都是开一个 Python Console 然后计算 999999999999999 ** 99999999999999999,虽然能用但非常不优雅:每个 Python 进程只能占用 1 个核心且不能占用 0.5 个核心。内存则是 dd if=/dev/zero of=output_file bs=4k count=xxx 来生成一个固定大小的文件,然后用 Python open('output_file').read(),同样是又麻烦又不优雅。

所以开发了这个叫 eat 的小工具,可以通过下面的命令占用指定的 CPU 和内存数量

eat -c 4            # 占用 4 个 CPU 核
eat -c 100%         # 占用所有 CPU 核
eat -m 4g           # 占用 4GB 内存
eat -m 20m          # 占用 20MB 内存
eat -m 100%         # 占用所有内存
eat -c 2.5 -m 1.5g  # 占用 2.5 个 CPU 核和 1.5GB 内存
eat -c 3 -m 200m    # 占用 3 个 CPU 核和 200MB 内存
eat -c 100% -m 100% # 占用所有 CPU 核和内存

贴上 GitHub 地址各位有兴趣可以试一下~

8844 次点击
所在节点    程序员
53 条回复
shawnbluce
78 天前
@Foralrec
@choury
之前确实不了解 stress-ng 这个工具,我刚刚看了一下,还是有一点区别。

- 我这个工具用起来更简单 `eat -c 2.5` 就可以直接吃掉 2.5 核,但是 stress-ng 还需要自己算一下
- 我这个工具更轻,单个二进制程序随丢随用,随用随删

毕竟我这个就是专门针对我自己需求搞的,跟这种专业的工具肯定是没法比的~
MirageTurtle
78 天前
@shawnbluce

真的很喜欢 op 这种针对于自己需求搞的小工具,感觉我也很想这样干,但大多数时候都会因为所谓的没有时间(也不知道是真没时间还是给自己找的借口)不去搞,偶尔搞的小工具也不会去认真维护(可能不是刚需,随着时间就不在用了)。

不管怎么样,希望 op 能坚持下去,也能维护下去,也希望自己执行力能变得更强。
vczyh
77 天前
用不用再说,先 star 再学习。
renmu
77 天前
虽然我的服务器在吃灰,但我也要跑满🐶
Foralrec
77 天前
以前做过不少施压 payload ,OP 的这类工具 最后会发展几个方向
- 绑核,一对超线程内分离,numa 亲和
- 施压策略,脉冲 正弦等
- pagecache mmap 清理与透明度
Garphy
77 天前
不错
NakeSnail
77 天前
别的不说,楼主这个命令的名字取得不错
lancelock
77 天前
eat -c 100% 如果我输入的不是 100%会咋样 比如 87.3% 不如设计成-a 代表 all
derdct
77 天前
甲骨文保活倒是有用这些玩意的
isnullstring
77 天前
@kk2syc #5 看来没少受 甲方折腾,哈哈哈
isnullstring
77 天前
我也写过类似,有个奇葩 BUG 只有在低端 CPU (双核) 且使用率接近 90%时候才特别容易触发
surrenal
77 天前
刚好有需要,等遇到下个需求场景的时候用用
passive
77 天前
可以在任务管理器里画画(上个世纪就有这样的画画 app )
mark2025
77 天前
记得有个网友写了个回滚程序的程序,一测试,程序不见了~
NoDataNoBB
77 天前
好像有个命令可以实现类似的,cpulimit 。顺便问问有没有可以指定网卡的,interface -d wlan0 xxxx ,这样 xxx 命令就可以使用 wlan0 来联网。
shawnbluce
77 天前
@MirageTurtle 谢谢~
shawnbluce
77 天前
@lancelock -a 这种实现我觉得不太好,倒是可以加上对 87.3% 这种的支持
shawnbluce
77 天前
@Foralrec #25 我回头参考一下,可以做的稍微完善一点,谢谢~
Ackvincent
77 天前
好评
xycost233
77 天前
hhhh 我之前也用 go 写过一个类似的小程序,通过计算圆周率和反复内存赋值来消耗 cpu 和内存

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/1054706

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX