不知道各位有没有那种需要起一个程序占用特定 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 地址各位有兴趣可以试一下~
1
adrianzhang 140 天前
压力测试嘛,属于大类应用,不愚蠢。
|
2
luzemin 140 天前
"If it's stupid but it works, it's not stupid"
|
3
privil 140 天前
有个 lookbusy 的程序和你这个差不多。不过造轮子也不嫌弃多。哈哈
|
5
kk2syc 140 天前 36
这就把你的代码合并到甲方的项目里,md
|
6
zhwguest 140 天前
大名鼎鼎的 pi....
|
8
hhacker 140 天前
我觉得这个很好啊, 哪里愚蠢了, 就是标题有点愚蠢
|
10
shawnbluce OP 不是说真的愚蠢啦,就是开个小玩笑~
|
11
Mithril 140 天前 1
你这内存占用功能可以搞个线程随机读写,保证它不被交换出去。
|
12
shawnbluce OP @kk2syc #5 然后每次优化就少用 0.5 CPU 和 500M 内存对吧,每年做两次性能优化,每次都有新感觉~
|
13
shawnbluce OP @Mithril 有道理,后面我试着改一下
|
14
kk2syc 140 天前
|
15
Foralrec 140 天前 1
可以看下 stress-ng
|
16
Mithril 140 天前
@shawnbluce 改完以后你再把进程优先级改为实时,然后一条 eat -c 100% -m 100%直接把系统搞死:)
|
17
sayitagain 140 天前
|
18
cominghome 140 天前 2
笑死,回想刚工作的时候公司做资源盘点,要回收使用率低的物理服务器,领导安排写了个随机读写程序开多线程,成功把 10%不到的平均使用率跑到了 70%+
|
19
choury 140 天前
为啥不用各发型版都自带的 stress-ng 呢,功能还更多
|
20
hercat 140 天前
前段时间也有类似的需求,不过我用的是 polinux/stress ,已点 star 。
|
21
shawnbluce OP |
22
MirageTurtle 140 天前 1
@shawnbluce
真的很喜欢 op 这种针对于自己需求搞的小工具,感觉我也很想这样干,但大多数时候都会因为所谓的没有时间(也不知道是真没时间还是给自己找的借口)不去搞,偶尔搞的小工具也不会去认真维护(可能不是刚需,随着时间就不在用了)。 不管怎么样,希望 op 能坚持下去,也能维护下去,也希望自己执行力能变得更强。 |
23
vczyh 140 天前
用不用再说,先 star 再学习。
|
24
renmu 140 天前 via Android
虽然我的服务器在吃灰,但我也要跑满🐶
|
25
Foralrec 140 天前 1
以前做过不少施压 payload ,OP 的这类工具 最后会发展几个方向
- 绑核,一对超线程内分离,numa 亲和 - 施压策略,脉冲 正弦等 - pagecache mmap 清理与透明度 |
26
Garphy 140 天前
不错
|
27
NakeSnail 140 天前 1
别的不说,楼主这个命令的名字取得不错
|
28
lancelock 140 天前
eat -c 100% 如果我输入的不是 100%会咋样 比如 87.3% 不如设计成-a 代表 all
|
29
derdct 140 天前
甲骨文保活倒是有用这些玩意的
|
30
isnullstring 140 天前
@kk2syc #5 看来没少受 甲方折腾,哈哈哈
|
31
isnullstring 140 天前
我也写过类似,有个奇葩 BUG 只有在低端 CPU (双核) 且使用率接近 90%时候才特别容易触发
|
32
surrenal 140 天前
刚好有需要,等遇到下个需求场景的时候用用
|
33
passive 140 天前 via Android 1
可以在任务管理器里画画(上个世纪就有这样的画画 app )
|
34
mark2025 140 天前
记得有个网友写了个回滚程序的程序,一测试,程序不见了~
|
35
NoDataNoBB 140 天前
好像有个命令可以实现类似的,cpulimit 。顺便问问有没有可以指定网卡的,interface -d wlan0 xxxx ,这样 xxx 命令就可以使用 wlan0 来联网。
|
36
shawnbluce OP @MirageTurtle 谢谢~
|
37
shawnbluce OP @lancelock -a 这种实现我觉得不太好,倒是可以加上对 87.3% 这种的支持
|
38
shawnbluce OP @Foralrec #25 我回头参考一下,可以做的稍微完善一点,谢谢~
|
39
Ackvincent 140 天前
好评
|
40
xycost233 140 天前
hhhh 我之前也用 go 写过一个类似的小程序,通过计算圆周率和反复内存赋值来消耗 cpu 和内存
|
41
lipd 140 天前
@cominghome 我怀疑咱俩是同事
|
42
bzw875 140 天前
加需求
吃掉磁盘空间 吃掉 GPU 吃掉带宽 |
43
WeweHave 140 天前
同意,加一个百分比控制最好了
|
44
shiyuu 140 天前 1
|
45
lucasj 140 天前
请问这行代码是什么意思
_ = 1 + 1 |
46
IMengXin 140 天前
政府申请服务器,因为高峰期配置不够申请的高配置,然后他们要求全天占用都需要在 50%以上,包括晚上....
|
47
rick13 140 天前
之前做性能测试,但测试实在太离谱,顶多占用不到 10%的 cpu ,但测试要求需要占用到 50%以上,当时就写了个 while 。。。
|
48
aeof 140 天前 1
这是正经的需求,叫做混沌测试,阿里有开源一个 https://github.com/chaosblade-io/chaosblade 。类似的需求还有弱网、丢包等,感兴趣可以试试
|
49
ktyang 140 天前
啊 为啥我第一反应是画正弦曲线
|
50
jqtmviyu 140 天前
arm64 好像用不了(骁龙 625)
./eat_linux_arm64 -c 2 -m 200m zsh: segmentation fault ./eat_linux_arm64 -c 2 -m 200m 搜了下发现已经有轮子了 stress stress --cpu 4 --vm 1 --vm-bytes 1G --timeout 60 |
51
zzh0410 140 天前 via Android
貌似有个 lookbusy
|
52
shawnbluce OP @jqtmviyu get 回头找一台 arm 的机器来试试
|
53
gerorim 139 天前 1
@shawnbluce
-c 指定 CPU 百分比时,radio 从 float 直接转 int 会损失精度,导致 idle / busy 时段计算错误,进而影响 CPU 占用量。 另外,比较常见的需求时,比如我要压测 30 分钟,有个时限参数就能派上用场。 综上,提需求不如上手改,给楼主提了个改进 PR https://github.com/shawn-bluce/eat/pull/2 。 |