• 请不要在回答技术问题时复制粘贴 AI 生成的内容
shawnbluce
V2EX  ›  程序员

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

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

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

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

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

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

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

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

    _ = 1 + 1
    IMengXin
    IMengXin
    Jul 4, 2024
    46
    政府申请服务器,因为高峰期配置不够申请的高配置,然后他们要求全天占用都需要在 50%以上,包括晚上....
    rick13
    rick13
    Jul 4, 2024
    47
    之前做性能测试,但测试实在太离谱,顶多占用不到 10%的 cpu ,但测试要求需要占用到 50%以上,当时就写了个 while 。。。
    aeof
    aeof
    Jul 4, 2024❤️1
    48
    这是正经的需求,叫做混沌测试,阿里有开源一个 https://github.com/chaosblade-io/chaosblade 。类似的需求还有弱网、丢包等,感兴趣可以试试
    ktyang
    ktyang
    Jul 4, 2024
    49
    啊 为啥我第一反应是画正弦曲线
    jqtmviyu
    jqtmviyu
    Jul 5, 2024
    50
    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
    lolo1
    Jul 5, 2024 via Android
    51
    貌似有个 lookbusy
    shawnbluce
    shawnbluce
    OP
    Jul 5, 2024
    52
    @jqtmviyu get 回头找一台 arm 的机器来试试
    gerorim
    gerorim
    Jul 5, 2024❤️1
    53
    @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   ·   Privacy   ·   Solana   ·   1526 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 92ms · UTC 06:48 · PVG 14:48 · LAX 22:48 · JFK 01:48
    ♥ Do have faith in what you're doing.