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

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

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

    一个 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   ·   实用小工具   ·   2338 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 24ms · UTC 16:00 · PVG 00:00 · LAX 08:00 · JFK 11:00
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.