我写了一个堪称愚蠢的小工具 - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
请不要在回答技术问题时复制粘贴 AI 生成的内容
shawnbluce
V2EX    程序员

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

  •  2
     
  •   shawnbluce
    shawn-bluce 2024-07-04 09:44:29 +08:00 9732 次点击
    这是一个创建于 465 天前的主题,其中的信息可能已经有所发展或是发生改变。

    不知道各位有没有那种需要起一个程序占用特定 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 地址各位有兴趣可以试一下~

    53 条回复    2024-07-05 15:41:49 +08:00
    adrianzhang
        1
    adrianzhang  
       2024-07-04 09:46:36 +08:00
    压力测试嘛,属于大类应用,不愚蠢。
    luzemin
        2
    luzemin  
       2024-07-04 09:47:27 +08:00
    "If it's stupid but it works, it's not stupid"
    privil
        3
    privil  
       2024-07-04 09:50:13 +08:00
    有个 lookbusy 的程序和你这个差不多。不过造轮子也不嫌弃多。哈哈
    dumbass
        4
    dumbass  
       2024-07-04 09:50:47 +08:00
    v1
        5
    v1  
       2024-07-04 09:51:30 +08:00   36
    这就把你的代码合并到甲方的项目里,md
    zhwguest
        6
    zhwguest  
       2024-07-04 09:52:15 +08:00
    大名鼎鼎的 pi....
    hlhshsh
        7
    hlhshsh  
       2024-07-04 09:52:30 +08:00
    @kk2syc 这是高手
    hhacker
        8
    hhacker  
       2024-07-04 09:52:50 +08:00
    我觉得这个很好啊, 哪里愚蠢了, 就是标题有点愚蠢
    v1
        9
    v1  
       2024-07-04 09:53:54 +08:00
    @hlhshsh 糊口饭吃 /抱拳
    shawnbluce
        10
    shawnbluce  
    OP
       2024-07-04 09:54:48 +08:00
    不是说真的愚蠢啦,就是开个小玩笑~
    Mithril
        11
    Mithril  
       2024-07-04 09:55:45 +08:00   1
    你这内存占用功能可以搞个线程随机读写,保证它不被交换出去。
    shawnbluce
        12
    shawnbluce  
    OP
       2024-07-04 09:56:27 +08:00   1
    @kk2syc #5 然后每次优化就少用 0.5 CPU 和 500M 内存对吧,每年做两次性能优化,每次都有新感觉~
    shawnbluce
        13
    shawnbluce  
    OP
       2024-07-04 09:57:13 +08:00
    @Mithril 有道理,后面我试着改一下
    v1
        14
    v1  
       2024-07-04 09:59:04 +08:00
    @shawnbluce 没办法,甲方开始拖欠尾款了,需求还一直增加。

    老板:我想让马儿跑又不想喂草怎么办呢?
    Foralrec
        15
    Foralrec  
       2024-07-04 10:01:04 +08:00   1
    可以看下 stress-ng
    Mithril
        16
    Mithril  
       2024-07-04 10:04:07 +08:00
    @shawnbluce 改完以后你再把进程优先级改为实时,然后一条 eat -c 100% -m 100%直接把系统搞死:)
    sayitagain
        17
    sayitagain  
       2024-07-04 10:06:40 +08:00
    能解决实际应用问题的,管你怎么实现,都不愚蠢。
    cominghome
        18
    cominghome  
       2024-07-04 10:09:29 +08:00   2
    笑死,回想刚工作的时候公司做资源盘点,要回收使用率低的物理服务器,领导安排写了个随机读写程序开多线程,成功把 10%不到的平均使用率跑到了 70%+
    choury
        19
    choury  
       2024-07-04 10:14:50 +08:00
    为啥不用各发型版都自带的 stress-ng 呢,功能还更多
    hercat
        20
    hercat  
       2024-07-04 10:24:02 +08:00
    前段时间也有类似的需求,不过我用的是 polinux/stress ,已点 star 。
    shawnbluce
        21
    shawnbluce  
    OP
       2024-07-04 10:24:08 +08:00   1
    @Foralrec
    @choury
    之前确实不了解 stress-ng 这个工具,我刚刚看了一下,还是有一点区别。

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

    毕竟我这个就是专门针对我自己需求搞的,跟这种专业的工具肯定是没法比的~
    MirageTurtle
        22
    MirageTurtle  
       2024-07-04 10:32:56 +08:00   1
    @shawnbluce

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

    不管怎么样,希望 op 能坚持下去,也能维护下去,也希望自己执行力能变得更强。
    vczyh
        23
    vczyh  
       2024-07-04 10:48:59 +08:00
    用不用再说,先 star 再学习。
    renmu
        24
    renmu  
       2024-07-04 10:54:29 +08:00 via Android
    虽然我的服务器在吃灰,但我也要跑满
    Foralrec
        25
    Foralrec  
       2024-07-04 11:15:19 +08:00   1
    以前做过不少施压 payload ,OP 的这类工具 最后会发展几个方向
    - 绑核,一对超线程内分离,numa 亲和
    - 施压策略,脉冲 正弦等
    - pagecache mmap 清理与透明度
    Garphy
        26
    Garphy  
       2024-07-04 11:20:39 +08:00
    不错
    NakeSnail
        27
    NakeSnail  
       2024-07-04 11:21:54 +08:00   1
    别的不说,楼主这个命令的名字取得不错
    lancelock
        28
    lancelock  
       2024-07-04 11:35:44 +08:00
    eat -c 100% 如果我输入的不是 100%会咋样 比如 87.3% 不如设计成-a 代表 all
    derdct
        29
    derdct  
       2024-07-04 11:38:03 +08:00
    甲骨文保活倒是有用这些玩意的
    isnullstring
        30
    isnullstring  
       2024-07-04 11:49:44 +08:00
    @kk2syc #5 看来没少受 甲方折腾,哈哈哈
    isnullstring
        31
    isnullstring  
       2024-07-04 11:52:01 +08:00
    我也写过类似,有个奇葩 BUG 只有在低端 CPU (双核) 且使用率接近 90%时候才特别容易触发
    surrenal
        32
    surrenal  
       2024-07-04 12:20:37 +08:00
    刚好有需要,等遇到下个需求场景的时候用用
    passive
        33
    passive  
       2024-07-04 12:31:07 +08:00 via Android   1
    可以在任务管理器里画画(上个世纪就有这样的画画 app )
    mark2025
        34
    mark2025  
       2024-07-04 13:33:07 +08:00
    记得有个网友写了个回滚程序的程序,一测试,程序不见了~
    NoDataNoBB
        35
    NoDataNoBB  
       2024-07-04 13:36:16 +08:00
    好像有个命令可以实现类似的,cpulimit 。顺便问问有没有可以指定网卡的,interface -d wlan0 xxxx ,这样 xxx 命令就可以使用 wlan0 来联网。
    shawnbluce
        36
    shawnbluce  
    OP
       2024-07-04 13:41:38 +08:00
    @MirageTurtle 谢谢~
    shawnbluce
        37
    shawnbluce  
    OP
       2024-07-04 13:42:19 +08:00
    @lancelock -a 这种实现我觉得不太好,倒是可以加上对 87.3% 这种的支持
    shawnbluce
        38
    shawnbluce  
    OP
       2024-07-04 13:43:36 +08:00
    @Foralrec #25 我回头参考一下,可以做的稍微完善一点,谢谢~
    Ackvincent
        39
    Ackvincent  
       2024-07-04 14:26:38 +08:00
    好评
    xycost233
        40
    xycost233  
       2024-07-04 14:44:58 +08:00
    hhhh 我之前也用 go 写过一个类似的小程序,通过计算圆周率和反复内存赋值来消耗 cpu 和内存
    lipd
        41
    lipd  
       2024-07-04 15:09:31 +08:00
    @cominghome 我怀疑咱俩是同事
    bzw875
        42
    bzw875  
       2024-07-04 15:20:34 +08:00
    加需求
    吃掉磁盘空间
    吃掉 GPU
    吃掉带宽
    WeweHave
        43
    WeweHave  
       2024-07-04 15:24:39 +08:00
    同意,加一个百分比控制最好了
    shiyuu
        44
    shiyuu  
       2024-07-04 17:04:23 +08:00   1
    百度有一个 100Gbps 的网络性能与压力测试软件

    https://github.com/baidu/dperf/blob/main/README-CN.md
    lucasj
        45
    lucasj  
       2024-07-04 17:19:46 +08:00
    请问这行代码是什么意思

    _ = 1 + 1
    IMengXin
        46
    IMengXin  
       2024-07-04 17:22:30 +08:00
    政府申请服务器,因为高峰期配置不够申请的高配置,然后他们要求全天占用都需要在 50%以上,包括晚上....
    rick13
        47
    rick13  
       2024-07-04 18:21:08 +08:00
    之前做性能测试,但测试实在太离谱,顶多占用不到 10%的 cpu ,但测试要求需要占用到 50%以上,当时就写了个 while 。。。
    aeof
        48
    aeof  
       2024-07-04 19:34:09 +08:00   1
    这是正经的需求,叫做混沌测试,阿里有开源一个 https://github.com/chaosblade-io/chaosblade 。类似的需求还有弱网、丢包等,感兴趣可以试试
    ktyang
        49
    ktyang  
       2024-07-04 23:30:48 +08:00
    啊 为啥我第一反应是画正弦曲线
    jqtmviyu
        50
    jqtmviyu  
       2024-07-05 00:19:17 +08:00
    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
    lolo1
        51
    lolo1  
       2024-07-05 00:19:55 +08:00 via Android
    貌似有个 lookbusy
    shawnbluce
        52
    shawnbluce  
    OP
       2024-07-05 09:33:08 +08:00
    @jqtmviyu get 回头找一台 arm 的机器来试试
    gerorim
        53
    gerorim  
       2024-07-05 15:41:49 +08:00   1
    @shawnbluce
    -c 指定 CPU 百分比时,radio 从 float 直接转 int 会损失精度,导致 idle / busy 时段计算错误,进而影响 CPU 占用量。
    另外,比较常见的需求时,比如我要压测 30 分钟,有个时限参数就能派上用场。

    综上,提需求不如上手改,给楼主提了个改进 PR https://github.com/shawn-bluce/eat/pull/2
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     2608 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 28ms UTC 02:08 PVG 10:08 LAX 19:08 JFK 22:08
    Do have faith in what you're doing.
    ubao snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86