V2EX = way to explore
V2EX 是一个关于分享和探索的地方
Sign Up Now
For Existing Member  Sign In
• 请不要在回答技术问题时复制粘贴 AI 生成的内容
shawnbluce
V2EX  ›  程序员

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

  •  2
     
  •   shawnbluce ·
    shawn-bluce · Jul 4, 2024 · 10382 views
    This topic created in 662 days ago, the information mentioned may be changed or developed.

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

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

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

    毕竟我这个就是专门针对我自己需求搞的,跟这种专业的工具肯定是没法比的~
    MirageTurtle
        22
    MirageTurtle  
       Jul 4, 2024   ❤️ 1
    @shawnbluce

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

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

    https://github.com/baidu/dperf/blob/main/README-CN.md
    lucasj
        45
    lucasj  
       Jul 4, 2024
    请问这行代码是什么意思

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

    综上,提需求不如上手改,给楼主提了个改进 PR https://github.com/shawn-bluce/eat/pull/2
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Solana   ·   1448 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 148ms · UTC 17:08 · PVG 01:08 · LAX 10:08 · JFK 13:08
    ♥ Do have faith in what you're doing.