大佬们,想让项目充分的利用服务器资源,如何实现? - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
请不要在回答技术问题时复制粘贴 AI 生成的内容
Aliberter
V2EX    程序员

大佬们,想让项目充分的利用服务器资源,如何实现?

  •  
  •   Aliberter 2019-12-25 20:45:14 +08:00 3712 次点击
    这是一个创建于 2117 天前的主题,其中的信息可能已经有所发展或是发生改变。

    一个 Java 项目,用来处理大批量的任务数据,并且希望其部署到服务器上后,能充分利用服务器资源,即能够动态的根据 Linux 的剩余资源状态调控自己的任务数量,如何实现?跑的任务越多消耗的资源越多对吧,那怎么去调控呢?不控制的话会崩吧?或者大家说说平时是如何让项目充分的利用服务器资源的?

    11 条回复    2019-12-26 21:07:15 +08:00
    malusama
        1
    malusama  
       2019-12-25 21:28:01 +08:00
    都跑满不行么。。
    ClericPy
        2
    ClericPy  
       2019-12-25 21:33:09 +08:00
    好眼熟... 以前公司里 scala 就是先把内存全占上(64GB 占了 62...) 一大堆 Actor 动态调整的...

    不过不会 scala 和 java, 溜走...
    crclz
        3
    crclz  
       2019-12-25 23:35:23 +08:00
    CPU 密集型的任务不知道,估计开 1 个 2 个 3 个一直到 CPU 跑满就能确定开多少个数量。
    如果是 IO 密集型的,如果瓶颈在数据量,那就`并发任务数 = CPU 核心数(不算超线程) * 2 + 硬盘主轴数量`。注意一次性处理的任务数量( batch size )别太大。
    crclz
        4
    crclz  
       2019-12-25 23:35:57 +08:00
    更正:瓶颈在数据量 -> 库
    haishiwuyuehao
        5
    haishiwuyuehao  
       2019-12-26 01:17:27 +08:00
    大批量任务数据。这里的“任务”具体指什么?
    跑的任务越多资源的消耗越多。希望通过“消耗更多的资源” 换取更多的“任务”处理速度?
    服务器资源。具体有什么?几核?可用内存是多少?支持其它程序吗,还是只支持 java ?

    楼主的意思大概是这样(假设是 java 爬虫项目)?有个 Java 爬虫项目。用多线程爬取网页读取数据,写入到数据库,希望部署到线上能够充分利用线上资源( 8 核 16G,阿里云 ESC 实例 100%),请问怎么根据 linux CPU,内存,进行最大化利用来爬取。有 1TB 数据需要入库,需要在 10 天内完成,这个任务需要怎么配置更合理


    楼主说的不够清晰,如果可以用上面的话语描述一下,如果是上面的场景我能提供一些些经验。
    Aliberter
        6
    Aliberter  
    OP
       2019-12-26 09:26:32 +08:00
    @haishiwuyuehao 好的,谢谢大佬提醒,我说清楚一点。就是这是一个中间业务的系统,每天要从 A 项目获取大批量的文件,批量解析到数据库,然后做数据的验证过滤补录等一系列操作,然后拿着操作完的数据去发给 B 项目,获取 B 项目结果以后再将结果返回给 A 项目。我们将一个批次的处理过程称为一个“任务”。现在的问题是我们如何考虑控制任务的数量,在线上系统中,应该不能无限制的给它增加任务吧。从如何充分利分服务器资源可以引申为如何让这个系统变得高效,稳定,尽可能多的处理任务,项目设计层面有什么好的思路。
    Aliberter
        7
    Aliberter  
    OP
       2019-12-26 09:27:27 +08:00
    @crclz 大佬你这个有点深奥啊,看不太懂_(:з」∠)_
    Itoktsnhc
        8
    Itoktsnhc  
       2019-12-26 10:22:42 +08:00
    先要能够监控机器的指标。手动调整就是人看一眼各个指标,调一下并发任务数,再看一眼这种。自动反馈的话,就是用程序来做这个事情,首先需要执行任务的程序能够定期(例如 5min )读取远端配置,并按照配置调整数量,另外的控制端读取机器指标,观察是否在设置的指标上限之下(比如 CPU < 80%,MEM<90%这种),在指标下,则增加任务数量;超过了,就减少。这样大体上能维持各个指标在你设置的限制上下波动。
    haishiwuyuehao
        9
    haishiwuyuehao  
       2019-12-26 14:09:15 +08:00 via iPhone
    @Aliberter 你说的还是有点....
    我给个思路试试。开启 N 个线程,每个线程分一批文件读取,写入到数据库。结果也写入到数据库。所有文件处理完成再从数据库读取结果返回给系统 a。
    luvroot
        10
    luvroot  
       2019-12-26 16:02:25 +08:00
    大佬们,想让项目充分的利用服务器资源,如何实现?

    很简单,卖 docker 实例。或则做成 serverless。前提是长期 90%cpu 使用率,看看会不会被封。
    hzgit
        11
    hzgit  
       2019-12-26 21:07:15 +08:00
    任务队列,削峰填谷
    推拉结合,量入为出
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     2718 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 24ms UTC 08:53 PVG 16:53 LAX 01:53 JFK 04:53
    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