V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
panlista
V2EX  ›  程序员

甲方要求提高服务器资源利用率,目前 cpu 和内存利用率都不达标

  •  2
     
  •   panlista · 2022-11-29 16:19:25 +08:00 · 15460 次点击
    这是一个创建于 729 天前的主题,其中的信息可能已经有所发展或是发生改变。

    目前的方案是,单独写一个服务做一些无用功去消耗一部分系统资源,有什么好的方法吗。 基于 springboot

    服务器配置已经是最低了不能再降了

    149 条回复    2022-12-01 20:37:11 +08:00
    1  2  
    panlista
        1
    panlista  
    OP
       2022-11-29 16:21:21 +08:00
    用 java 怎么去持续的消耗一部分 cpu 和内存呢,可以提供一下思路吗
    rimutuyuan
        2
    rimutuyuan  
       2022-11-29 16:22:02 +08:00
    目前的方案很好,甲方让你怎么做,做好拿到钱就行了
    dolphintwo
        3
    dolphintwo  
       2022-11-29 16:22:11 +08:00   ❤️ 2
    搭 k8s ,再上 grafana ,elk ,加收服务费
    zepto
        4
    zepto  
       2022-11-29 16:22:26 +08:00   ❤️ 6
    计算 pai
    wu67
        5
    wu67  
       2022-11-29 16:22:49 +08:00
    把代码写好很难, 但是把代码写烂还不简单吗? 循环、递归给他满上, 要不就不用 jdk 的排序, 自己手写排序.
    rimutuyuan
        6
    rimutuyuan  
       2022-11-29 16:22:59 +08:00   ❤️ 6
    cpu:模拟挖矿,循环进行 sha256 操作
    内存:创建并维护一个 1000W 长度的数组
    cnrting
        7
    cnrting  
       2022-11-29 16:23:45 +08:00
    while 1
    hay313955795
        8
    hay313955795  
       2022-11-29 16:24:21 +08:00   ❤️ 1
    甲方是觉得服务器资源占用太少,性价比太低吗?
    bthulu
        9
    bthulu  
       2022-11-29 16:24:31 +08:00
    简单, 下面这个代码就能跑满一个 cpu. 想跑满几个 CPU, 就开几个线程跑这个方法就行了.
    ```
    int i = 0;
    while(true) {
    if (i == Integer.Max) {
    i = 0;
    }
    i++;
    }
    ```
    xuelu520
        10
    xuelu520  
       2022-11-29 16:25:51 +08:00
    给一个大数组排序,排序 N 次
    Leviathann
        11
    Leviathann  
       2022-11-29 16:27:48 +08:00   ❤️ 47
    看笑了
    dcsuibian
        12
    dcsuibian  
       2022-11-29 16:28:49 +08:00
    这种甲方真是呵呵了
    janus77
        13
    janus77  
       2022-11-29 16:28:54 +08:00   ❤️ 4
    挖矿吧,还能赚钱
    Twan
        14
    Twan  
       2022-11-29 16:29:41 +08:00
    void fun_c()
    {
    for(;;){ ++i; float = 10000 % 1000; } //CPU

    char * ptr = new char[ 10 * 1024 * 1024];
    delete ptr;
    }

    create_thread(_thread_id, fun_c, ....);

    客户: 真棒
    一个月后客户: 我们需要加钱优化:
    你: 没问题,打钱
    dreasky
        15
    dreasky  
       2022-11-29 16:30:58 +08:00
    哪来这么好的甲方
    shazi199
        16
    shazi199  
       2022-11-29 16:38:23 +08:00
    估计是军政机关或者学校项目
    winglight2016
        17
    winglight2016  
       2022-11-29 16:39:56 +08:00
    最简单的不就是在服务器上跑个压测吗?控制好并发数量,用户看着 DAU 蹭蹭往上涨还不开心死了?
    nomagick
        18
    nomagick  
       2022-11-29 16:45:08 +08:00
    服务器啥配置我听听
    dddd1919
        19
    dddd1919  
       2022-11-29 16:49:01 +08:00   ❤️ 1
    应该跟甲方解释一下,不是什么数都是越大越好😂
    panlista
        20
    panlista  
    OP
       2022-11-29 16:50:49 +08:00
    @rimutuyuan 感觉不好控制啊,比如目前 cpu 利用率才 0.51%,达标需要 15%,怎么能保证系统稳定的情况下再多占用 15%左右的 cpu 呢
    panlista
        21
    panlista  
    OP
       2022-11-29 16:51:36 +08:00
    @wu67 要可持续的占用,系统用户少就算再烂的代码也有服务闲置的时候,所以准备弄个定时任务
    676529483
        22
    676529483  
       2022-11-29 16:52:52 +08:00
    内存简单,jvm 参数里面把最小堆内存提高就行
    cpu 要不压测?
    phantomzz
        23
    phantomzz  
       2022-11-29 16:54:07 +08:00
    @panlista 服务器几个核心?按比例起线程 while true 就可以了
    panlista
        24
    panlista  
    OP
       2022-11-29 16:55:35 +08:00
    @phantomzz 4 核的
    blackeeper
        25
    blackeeper  
       2022-11-29 16:56:20 +08:00   ❤️ 2
    shell 脚本就可以搞定了,参考如下:
    1 ,CPU 消耗总 CPU 核数的一半,也可以自己指定
    ```
    #! /bin/sh
    #消耗总 CPU 核数的一半,也可以自己指定
    #启动:cpu.sh >kill_cpu.sh
    #停止:bash kill_cpu.sh
    for i in $(seq $(expr $(cat /proc/cpuinfo |grep process |wc -l) / 2) )
    do
    echo -ne "
    i=0;
    while true
    do
    i=i+1;
    done" | /bin/sh &
    pid_array[$i]=$! ;
    done

    for i in "${pid_array[@]}"; do
    echo 'kill ' $i ';';
    done
    ```
    2 ,内存消耗,消耗服务器剩余可用内存的一半,删除 /tmp/memory/block 文件,即可释放内存
    ```
    #/bin/sh
    mkdir /tmp/memory
    memory_size=$(expr $(free -g| awk '{print $NF}' | head -n 2 |tail -n 1) / 2)
    if [ $memory_size -gt 2 ];then
    mount -t tmpfs -o size=${memory_size}g tmpfs /tmp/memory
    dd if=/dev/zero of=/tmp/memory/block
    fi
    ```
    eason1874
        26
    eason1874  
       2022-11-29 16:56:45 +08:00
    占用内存直接把程序的预占内存调高就行了

    占用 CPU ,写死循环就完事,怕影响程序本身,就再另外写一个定时任务判断,低于多少时才执行,高于多少时就杀掉
    dorothyREN
        27
    dorothyREN  
       2022-11-29 16:57:02 +08:00
    @rimutuyuan #6 内存还不简单 /dev/shm 下面创建文件就行了 想用多少用多少
    Pantheoon
        28
    Pantheoon  
       2022-11-29 16:57:15 +08:00
    服务器上起一个循环程序,改下调度参数,按照 1:6 的比例分配,差不多就 15%了
    phantomzz
        29
    phantomzz  
       2022-11-29 16:57:21 +08:00
    @panlista 你起一个线程 while true 空跑,里面不要 sleep ,这样会一直占用一个核心,使用率会达到 25%
    rimutuyuan
        30
    rimutuyuan  
       2022-11-29 16:57:49 +08:00
    @panlista 好控制啊,通过 sleep 时间,不加时间的话应该是 100%占用
    haha512
        31
    haha512  
       2022-11-29 16:57:57 +08:00   ❤️ 1
    单起一个线程,每分钟检测 cpu 利用率,发现低于 15% 就运行楼上提供的 while 循环,
    高于 30% 就停止执行
    rimutuyuan
        32
    rimutuyuan  
       2022-11-29 16:58:30 +08:00
    @dorothyREN 学到了
    fisherwei
        33
    fisherwei  
       2022-11-29 17:00:00 +08:00   ❤️ 65
    lookbusy 解君愁
    http://www.devin.com/lookbusy/


    lookbusy -c 50 # 占用所有 CPU 核心各 50%
    lookbusy -c 50 -n 2 # 占用两个 CPU 核心各 50%
    lookbusy -c 50-80 -r curve # 占用所有 CPU 核心在 50%-80% 左右浮动
    lookbusy -c 0 -m 128MB -M 1000 # 每 1000 毫秒,循环释放并分配 128MB 内存
    lookbusy -c 0 -d 1GB -b 1MB -D 10 # 每 10 毫秒,循环进行 1MB 磁盘写入,临时文件不超过 1GB
    https://learnku.com/articles/22744
    sobev
        34
    sobev  
       2022-11-29 17:01:21 +08:00
    数据全部缓存😏
    koloonps
        35
    koloonps  
       2022-11-29 17:05:18 +08:00
    运行一个 elasticsearch 内存设置成 1g,每一季度一个索引.分分钟触发 GC
    ljh0585
        36
    ljh0585  
       2022-11-29 17:05:22 +08:00
    给用户推销新业务啊,利用下空闲的服务器资源
    raysonlu
        37
    raysonlu  
       2022-11-29 17:05:40 +08:00
    很简单,让甲方提高自己的业务量吧
    Dkngit
        38
    Dkngit  
       2022-11-29 17:07:40 +08:00
    算 hash
    sodayo
        39
    sodayo  
       2022-11-29 17:07:57 +08:00 via Android   ❤️ 1
    nohup stress --cpu 1 --vm 1 --vm-bytes 1G --vm-keep -q >/dev/null 2>&1 &
    mmm159357456
        40
    mmm159357456  
       2022-11-29 17:10:06 +08:00
    这可真是一个奇怪的需求
    CSGO
        41
    CSGO  
       2022-11-29 17:13:09 +08:00
    挖矿
    cstj0505
        42
    cstj0505  
       2022-11-29 17:13:56 +08:00
    我从来没有见过这种要求
    andyskaura
        43
    andyskaura  
       2022-11-29 17:15:50 +08:00
    帮我挂一个 sq 服务数据库
    LZSZ
        44
    LZSZ  
       2022-11-29 17:20:17 +08:00
    还有这种要求 太坏了😂
    hanguokai
        45
    hanguokai  
       2022-11-29 17:20:44 +08:00   ❤️ 6
    我猜甲方是想降低云服务的成本,减少开支,但没有表述清楚。比如当前服务器的配置是 4 核 4G 内存,降到 2 核 2G 内存后,CPU 和内存使用率就都上去了。
    hanai
        46
    hanai  
       2022-11-29 17:25:30 +08:00 via iPhone   ❤️ 1
    @hanguokai 合理
    goodryb
        47
    goodryb  
       2022-11-29 17:26:01 +08:00
    @sodayo #39 怎么会有这种奇奇怪怪的命令,完美符合 op 的需求
    palxie
        48
    palxie  
       2022-11-29 17:28:27 +08:00
    这种甲方. 不知道是蠢还是坏.
    cmdOptionKana
        49
    cmdOptionKana  
       2022-11-29 17:31:11 +08:00
    @hanguokai 对呀,甲方的要求貌似就是云服务最大的优势“弹性资源”
    eason1874
        50
    eason1874  
       2022-11-29 17:31:33 +08:00
    @hanguokai #45 不一定是误会,真有这种要求。我有遇到过,机器买好了,但是甲方那边内部报销对资源利用率有硬性规定,不达标不给报销,然后为了报销就作假
    fengjianxinghun
        51
    fengjianxinghun  
       2022-11-29 17:32:24 +08:00   ❤️ 3
    这不是常规操作么? v2 没做过 toB 业务?如果你的 cpu 内存占用这么低,第二年的硬件预算怎么做?
    zpf124
        52
    zpf124  
       2022-11-29 17:41:13 +08:00
    如果人家申请拨款的那些地方,人机一买机器起步就够小企业流口水的了,而且一般产品实际使用人数大多数时候还没三流地方资讯网站多。

    你和人家提议控制成本? 人家笑你不懂采购。
    stoneabc
        53
    stoneabc  
       2022-11-29 17:41:28 +08:00   ❤️ 1
    提升资源利用率不是个很普遍很正常的需求么……上面这些都是只写代码,从不接触资源的吗?
    zpf124
        54
    zpf124  
       2022-11-29 17:42:48 +08:00
    改错字===>>

    如果人家(是)申请拨款的那些地方,人(家)一买机器的起步(规格)就够小
    KNaiFen
        55
    KNaiFen  
       2022-11-29 17:46:51 +08:00   ❤️ 2
    多余的资源拿来开 VPS 造福兄弟们
    jiom
        56
    jiom  
       2022-11-29 17:49:16 +08:00
    我之前为运营商工作也是这样~闲置机器就要回收~之前我基本上都是用程序跑满 cpu 和内存
    zpf124
        57
    zpf124  
       2022-11-29 17:50:56 +08:00   ❤️ 5
    @stoneabc 因为大家没多少是吃公家饭的,不明白什么叫富裕。

    家里电饭锅煮两人份的饭才用了 1/5 的空间,如何提升锅的利用率?
    买个小锅 ×
    俩人每天努力吃 10 份的饭 ×
    多做 n 份,然后扔了,第二天接着重新做 √

    反正锅和饭都不用我掏钱,买小锅省下的钱也不给我,反倒是买大锅商家还得送我购物卡。
    monkeyzsf
        58
    monkeyzsf  
       2022-11-29 17:51:55 +08:00
    多余的资源整个 CS1.6 的服务器给兄弟们打游戏
    liyanggyang
        59
    liyanggyang  
       2022-11-29 17:53:29 +08:00
    手动弄一个文件 加载到内存里面不就好了
    aosan926
        60
    aosan926  
       2022-11-29 17:54:35 +08:00   ❤️ 1
    突然想到编程之美里面第一个题就是拿 CPU 使用率在任务管理里画正弦函数😂
    https://tianshu.xyz/blog/108/
    psirnull
        61
    psirnull  
       2022-11-29 17:54:56 +08:00
    xmrig
    hhhhhh123
        62
    hhhhhh123  
       2022-11-29 18:00:52 +08:00
    把个人博客啥的 搭在这个服务器 免费用。。
    hefish
        63
    hefish  
       2022-11-29 18:12:08 +08:00
    给这种甲方点赞。
    billzhuang
        64
    billzhuang  
       2022-11-29 18:38:28 +08:00 via iPhone
    转个 minecraft server 吧。
    nvksie
        65
    nvksie  
       2022-11-29 19:07:05 +08:00 via Android
    甲方是百毒吧,百毒同事说过这奇葩要求
    ajaxgoldfish
        66
    ajaxgoldfish  
       2022-11-29 19:22:27 +08:00
    歪日,反其道而行
    romisanic
        67
    romisanic  
       2022-11-29 19:32:44 +08:00
    提高利用率,有两种方式,一个是增加使用的资源,一个是减少服务器提供的资源。
    现在看起来已经降无可降了。写个应用耗费资源也太不靠谱了。
    做个报表啥的,定时统计,也算是个有用的。
    其次,还可以把服务多部署几个,每个服务器上都多放几个服务,就用已经部署过的,再部署几个🐶
    la2la
        68
    la2la  
       2022-11-29 20:13:41 +08:00
    挖 。。 挖。。挖矿?

    ps:还能给甲方创收,他以后只会感觉配置不够用,为啥不上天河二号
    ytmsdy
        69
    ytmsdy  
       2022-11-29 20:15:48 +08:00
    现在 zf 单位都有服务器资源利用率的要求,如果资源利用率太低,应用会被下架的。
    potatowish
        70
    potatowish  
       2022-11-29 20:48:05 +08:00 via iPhone
    在一台上部署 N 个节点,做负债均衡
    inframe
        71
    inframe  
       2022-11-29 20:58:58 +08:00
    看起来是 toG 的业务
    jorneyr
        72
    jorneyr  
       2022-11-29 21:20:23 +08:00
    读文件,计算 MD5
    读文件,计算 MD5
    读文件,计算 MD5
    读文件,计算 MD5
    daiv
        73
    daiv  
       2022-11-29 21:58:04 +08:00
    @cmdOptionKana #49 应该是, 要是阿里云支持 自动弹性, 那就太好了
    yankebupt
        74
    yankebupt  
       2022-11-29 21:58:43 +08:00
    @panlista 有个(可能)不做无用功的方法. 当然根据你的需求也可能完全不适用,先说着
    把常用查询用闲时 cpu 提前查询,缓存到内存表。
    如果数据量大(比如大于 10000 行),进一步缓存到各种 cache ,因为即使从内存表现查出来也可能要 10ms+
    这样可以把查询时间从 20ms+降到几个 ms ,你还可以说没有做无用功
    如果未来会 scale ,把这个功能撤掉

    最好是讲讲你的需求类型
    yufeng0681
        75
    yufeng0681  
       2022-11-29 22:01:45 +08:00
    本质还是开发出来的服务使用的人少,频率低,没有一定的并发量,

    1 、为了防止甲方技术人员就懂 linux 进程,也懂具体业务服务,最好还是模拟用户访问,把流程跑起来,比如模拟出 10 个在线用户的访问,如果 CPU 内存还不达标,那就 50 个 100 个在线用户;
    2 、刚好也是性能测试的一部分,相当于一直在生产系统上做性能测试;
    这样,看上去就是合理的进程在运算,
    Ackvincent
        76
    Ackvincent  
       2022-11-29 22:15:24 +08:00   ❤️ 1
    我也遇到了同样的问题,项目对硬件需求并不大,并且甲方啥也不懂还喜欢瞎 BB 。
    我是这样说服他的。
    1.低使用率可以让硬件设备工作在一个比较低的温度,更节能静音(让他真实体验一下高负载和低负载的噪音水平),也有利于延长使用寿命。
    2.硬件选择都是有一些余量的,方便后期扩充功能,节约项目开支。
    3.服务器价格我们已经给的非常优惠了,再低只能使用杂牌硬件来组装,不利于项目的稳定运行。

    甲方提出的需求并不一定是真实的需求,无论你做的多好,对方总是要褒贬一下的,他来找存在感就给他存在感,大家都是演戏,互相配合一下好了。
    WuSiYu
        77
    WuSiYu  
       2022-11-29 22:41:50 +08:00
    挖矿,设个 cpulimit ,指定使用率多少都行( doge
    SIGEV13
        78
    SIGEV13  
       2022-11-29 22:54:02 +08:00   ❤️ 2
    装上 K8S, 加上监控套件,Prometheus, AlertManager, Thanos, Grafana 都上。 把其他能搬家的服务都搬过来。 很快就消耗没了。 尤其 Prometheus 加上一堆 Rule 以后,很费资源,还能显示好看的图标,让客人觉得钱没白花。
    xuzhzzz
        79
    xuzhzzz  
       2022-11-29 23:01:04 +08:00
    降低服务器配置不就行了?
    Dlin
        80
    Dlin  
       2022-11-29 23:06:14 +08:00
    这是什么秀逗甲方
    ichubei
        81
    ichubei  
       2022-11-29 23:30:59 +08:00
    中国特色
    Yuhyeong
        82
    Yuhyeong  
       2022-11-29 23:48:29 +08:00
    多线程长期开着检查 log😂
    Cheons
        83
    Cheons  
       2022-11-29 23:57:40 +08:00 via Android
    那就占用资源提升响应速度
    tuutoo
        84
    tuutoo  
       2022-11-30 00:04:31 +08:00
    安个 Docker 部他一堆服务, 不够就多拉几个 docker 镜像
    sprite82
        85
    sprite82  
       2022-11-30 00:05:50 +08:00
    内存好说,直接设置 Jvm 参数就行
    cpu 就装个 benchmark ,shell 脚本定时执行下就好了
    ashong
        86
    ashong  
       2022-11-30 00:10:00 +08:00 via iPhone
    还有这种要求?🤫
    Features
        87
    Features  
       2022-11-30 00:16:08 +08:00
    开放一个用户,我帮你解决,保证全天 24 小时 90%以上占用
    letmedie
        88
    letmedie  
       2022-11-30 00:19:49 +08:00   ❤️ 1
    看来是 toG 的业务,申请的云资源各种资源使用率不达标是要被通报的,超过一定时限不整改明年直接会把你预算砍了的。而且你重新申请都会被打回。
    lingex
        89
    lingex  
       2022-11-30 00:20:10 +08:00
    看到这个,以后再不考虑怎么优化代码了。。。
    cndns
        90
    cndns  
       2022-11-30 00:24:55 +08:00 via Android
    笑死 资源利用低整合下架服务器不就可以 省电碳排放估计是体制单位
    akira
        91
    akira  
       2022-11-30 01:35:28 +08:00
    随便上个 监控 分析的东西,直接跑满,你还不能说他没用
    pengtdyd
        92
    pengtdyd  
       2022-11-30 06:14:44 +08:00
    换个小点的机器不就行了吗,为啥非要从软件上下功夫
    tramm
        93
    tramm  
       2022-11-30 08:10:45 +08:00
    @hay313955795 我觉得应该是资源占用太少, 不好申请明年的资金 :P
    raptor
        94
    raptor  
       2022-11-30 09:22:05 +08:00
    4 核的话,长期占满一个核就 25%达标了。

    要不浪费的话,建议跑个虚拟机,里面随便干点啥就让它达标
    lower
        95
    lower  
       2022-11-30 09:29:10 +08:00
    安装几套安全防护软件、防火墙、杀毒软件。时刻扫描监控着……
    benzalus
        96
    benzalus  
       2022-11-30 09:31:44 +08:00
    甲方爸爸:机器低载率算 kpi ,机器一直很闲说明机型不对,服务迁移好麻烦,搞点小手段增加占用算了
    jfj8848
        97
    jfj8848  
       2022-11-30 09:38:25 +08:00
    @dddd1919 也有可能甲方也知道,但他们 IT 有奇葩的考核
    newmlp
        98
    newmlp  
       2022-11-30 09:38:30 +08:00
    while 1
    8355
        99
    8355  
       2022-11-30 09:47:04 +08:00
    @fisherwei 专业
    rocksolid
        100
    rocksolid  
       2022-11-30 09:51:54 +08:00
    写个脚本 不停压缩 解压
    1  2  
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   4896 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 32ms · UTC 04:00 · PVG 12:00 · LAX 20:00 · JFK 23:00
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.