什么情况,占用内存 2 个 G! springboot 这么耗资源嘛 - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
selfcreditgiving
V2EX    问与答

什么情况,占用内存 2 个 G! springboot 这么耗资源嘛

  •  1
     
  •   selfcreditgiving 2020-09-24 02:52:37 +08:00 4809 次点击
    这是一个创建于 1851 天前的主题,其中的信息可能已经有所发展或是发生改变。

    写了一个 springboot 的小采集程序,使用了 netty (采集 tcp 协议数据)、jpa (保存数据库)。
    占用内存为什么这么高呢,是不是需要优化,删除没用的包什么的。

    我其他用 纯 java 实现的 同样功能的采集程序,只占 200M 左右(下图 colloect 开头的,和 route 开头的)。

    其他的用 node 实现的就更小了,第二张图,同样的功能 java 和 node 程序内存占用对比。node 只有 30 几 M 。

    springboot 和其他 java 程序:

    pm2springboot

    java 程序和 node 程序:
    java_vs_node

    18 条回复    2020-09-24 16:44:59 +08:00
    Cooky
        1
    Cooky  
       2020-09-24 07:44:16 +08:00 via Android
    spring 就是这么大!
    zachlhb
        2
    zachlhb  
       2020-09-24 07:58:07 +08:00 via Android
    没错,就是这么骚气
    SoulSleep
        3
    SoulSleep  
       2020-09-24 08:02:30 +08:00
    2 个 G 有点多了吧,如果只是爬虫,100-200M 应该是够了的,加了 jpa 和 netty 的包大概也就多几十 M
    所以 300M-500M 足够....

    一个是看你是否给 jvm 分的多了...

    另外 netty 是不是没释放资源,这个涉及到堆外内存的使用

    我理解的是这样,如有不对楼下补充
    des
        4
    des  
       2020-09-24 08:13:17 +08:00
    据说是默认会吃掉四分之一的内存,另外 springboot 确实是很吃资源
    supermoonie
        5
    supermoonie  
       2020-09-24 08:17:09 +08:00 via iPhone
    我用 netty 写了一个抓包工具,用 springboot 保存 req res 数据并负责展示,运行下来也就 700 多 M,你这个怕是内存没管理好吧,内存分析工具分析下,看看占用内存的是哪些对象
    des
        6
    des  
       2020-09-24 08:17:50 +08:00
    找到四分之一的说法的来源了
    https://stackoverflow.com/questions/38564648
    Finest
        7
    Finest  
       2020-09-24 08:33:06 +08:00
    带上 JVM 参数才好分析
    wangyanrui
        8
    wangyanrui  
       2020-09-24 08:36:04 +08:00 via Android
    不限内存大小,默认最大为机器内存的四分之一
    手动 gc 一下估计能少不少
    cheng6563
        9
    cheng6563  
       2020-09-24 08:44:17 +08:00 via Android
    用-Xmx 限制内存使用
    用 g1gc
    passerbytiny
        10
    passerbytiny  
       2020-09-24 08:46:09 +08:00 via Android
    JVM 默认占用物理内存的 4/1 至 1/2,可手动调控这是 Java 人员的基本功。
    free9fw
        11
    free9fw  
       2020-09-24 08:57:42 +08:00
    java 本来就是上个世纪的,又老又笨重,打印个值都要写一大串。。。什么时候淘汰它
    selfcreditgiving
        12
    selfcreditgiving  
    OP
       2020-09-24 09:29:08 +08:00 via Android
    @des 默认分配那么多内存啊。服务器是 32g 内存的,已经跑了很多 docker 容器了,这个程序是直接跑在宿主机上的。
    如果按比例分配是不是要放在容器里就会占用少一点。
    selfcreditgiving
        13
    selfcreditgiving  
    OP
       2020-09-24 09:38:36 +08:00
    @wangyanrui #8
    @cheng6563 #9
    @passerbytiny #10
    可以设置的啊,多谢。现学的 java,不太熟悉
    SingeeKing
        14
    SingeeKing  
    PRO
       2020-09-24 10:55:15 +08:00 via iPhone   1
    @selfcreditgiving 没必要专门为了这个放容器,可以直接调 JVM 参数的
    blackboom
        15
    blackboom  
       2020-09-24 10:58:36 +08:00   1
    springboot 吃内存,可以选择 OpenJ9 表现明显。
    594duck
        16
    594duck  
       2020-09-24 11:21:36 +08:00   1
    @free9fw 奋斗的青年啊,你在搞笑么。号称要淘汰 JAVA 的十几种语言今天能顶的上来的有哪个,别一天天天的瞎想


    @selfcreditgiving 什么都用容器解决最后会什么都解决不了。
    mazyi
        17
    mazyi  
    PRO
       2020-09-24 12:39:24 +08:00 via iPhone
    水平差别怪框架
    azygote
        18
    azygote  
       2020-09-24 16:44:59 +08:00 via iPhone
    估计是内存泄露了
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     2813 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 24ms UTC 13:26 PVG 21:26 LAX 06:26 JFK 09:26
    Do have faith in what you're doing.
    ubao msn 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