V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
• 请不要在回答技术问题时复制粘贴 AI 生成的内容
shawnbluce
V2EX  ›  程序员

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

  •  2
     
  •   shawnbluce ·
    shawn-bluce · 167 天前 · 9003 次点击
    这是一个创建于 167 天前的主题,其中的信息可能已经有所发展或是发生改变。

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

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

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

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

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

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

    https://github.com/baidu/dperf/blob/main/README-CN.md
    lucasj
        45
    lucasj  
       166 天前
    请问这行代码是什么意思

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

    综上,提需求不如上手改,给楼主提了个改进 PR https://github.com/shawn-bluce/eat/pull/2
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   5382 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 26ms · UTC 08:19 · PVG 16:19 · LAX 00:19 · JFK 03:19
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.