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

Java 太胖?

  •  1
     
  •   Trumeet ·
    Trumeet · 2019-01-04 13:34:54 +08:00 · 7737 次点击
    这是一个创建于 2143 天前的主题,其中的信息可能已经有所发展或是发生改变。

    楼主小土豆上跑两个 Java Netty 服务 + 邮件服务,RAM 快受不了了...... 有什么方式降低 Netty 内存占用吗?

    如上图,一大串全是一个程式。求教一下 V2er,因为都知道 V2er 是万能的( xd

    第 1 条附言  ·  2019-01-05 12:44:23 +08:00

    多谢各位 V2er,目前做法是 -Xms64m 压缩一下内存使用。外加了一块 2G 的 Swap 以便备用。

    61 条回复    2019-01-06 02:34:44 +08:00
    orangeade
        1
    orangeade  
       2019-01-04 13:45:13 +08:00 via Android
    dir + mipush ?
    Java 就是以吃内存出名吧,要不换其他编程语言重写,对比看看?
    Mohanson
        2
    Mohanson  
       2019-01-04 13:47:27 +08:00 via Android   ❤️ 8
    别问,问就 go
    chendy
        3
    chendy  
       2019-01-04 13:52:38 +08:00
    加参数限制内存使用
    lihongjie0209
        4
    lihongjie0209  
       2019-01-04 13:53:47 +08:00
    jvm 调优了解一下
    jason19659
        5
    jason19659  
       2019-01-04 13:55:38 +08:00
    增加虚拟内存
    Trumeet
        6
    Trumeet  
    OP
       2019-01-04 14:00:00 +08:00   ❤️ 1
    @Mohanson 就知道有吹 Go 的((
    Trumeet
        7
    Trumeet  
    OP
       2019-01-04 14:00:29 +08:00
    @orangeade 诶诶诶... Dir + MiPush 还行吧((
    换语言成本太大了,刚开始转 Kotlin
    Trumeet
        8
    Trumeet  
    OP
       2019-01-04 14:01:06 +08:00
    @chendy 这个什么操作?限制了不会影响正常功能?
    Trumeet
        9
    Trumeet  
    OP
       2019-01-04 14:01:17 +08:00
    @lihongjie0209 吼高深哇...
    dk7952638
        10
    dk7952638  
       2019-01-04 14:05:13 +08:00
    十倍的性能换十倍的开发效率,java 从一开始就是在性能和开发效率之间寻找一个平衡点
    lihongjie0209
        11
    lihongjie0209  
       2019-01-04 14:08:21 +08:00
    @Trumeet 就是前面说的调整 jvm 参数, 复制粘贴就好了
    Tengdw
        12
    Tengdw  
       2019-01-04 14:28:46 +08:00
    根据 gc 曲线调整下堆内存大小看行不
    victorywangzhcn
        13
    victorywangzhcn  
       2019-01-04 14:43:13 +08:00
    看看 GraalVM ,现在能直接 native 化,非常小。传送门 https://github.com/cstancu/netty-native-demo
    sagaxu
        14
    sagaxu  
       2019-01-04 14:47:14 +08:00 via Android   ❤️ 1
    Netty 会用堆外内存,所以实际占用比 Xmx 设置的高。建议开 gclog,然后尝试不同的 Xmx,观察 gc 时间间隔,选择能接受的最低间隔。
    chanin
        15
    chanin  
       2019-01-04 14:54:23 +08:00
    又想简单方便,又想快速高效是不可能的,身为编程语言鄙视链条最低端的 java,需要接 RAM 受审判之眼
    Greendays
        16
    Greendays  
       2019-01-04 15:14:24 +08:00
    别问,问就加 RAM😂
    hand515
        17
    hand515  
       2019-01-04 15:24:21 +08:00
    Java 内存这块再省也省不了多少
    luosuosile
        18
    luosuosile  
       2019-01-04 15:41:20 +08:00
    java 是编程语言 鄙视链最低端吗??我以为 java 至少在鄙视链中游呢
    XIVN1987
        19
    XIVN1987  
       2019-01-04 15:46:13 +08:00
    是不是 JIT 的编程语言都比较费内存啊??
    sagaxu
        20
    sagaxu  
       2019-01-04 15:51:20 +08:00 via Android
    @XIVN1987 JIT 会额外吃掉一些,gc 也会吃掉一些,spring 那套东西再吃个几十 MB。JAVA 程序,最低 100M 起步。
    auxox
        21
    auxox  
       2019-01-04 15:59:38 +08:00
    没有设置 jvm 参数,那还不是有多少内存用多少内存
    passerbytiny
        22
    passerbytiny  
       2019-01-04 16:04:13 +08:00
    请设置 JVM 参数(-Xmx),JVM 申请的是进程独占内存,如果不设置,默认情况下,按照最小 25%物理内存,最大 50%物理内存去申请,4 个 java 进程就 GG,不管你加多少内存条。
    loveCoding
        23
    loveCoding  
       2019-01-04 16:20:19 +08:00
    -Xmx 加上堆内存限制,实际使用内存会比这个大一些,不复杂的话换 go 重写下也是可以的
    pursuer
        24
    pursuer  
       2019-01-04 16:24:25 +08:00
    不知道跑的什么服务,好多进程,可以整合到一个 JVM 进程里运行吗?
    murmur
        25
    murmur  
       2019-01-04 16:25:35 +08:00
    @luosuosile java 就是当年的美帝国主义,人人都在喊打倒美帝但是别人还是帝国啊
    misaka19000
        26
    misaka19000  
       2019-01-04 16:27:27 +08:00 via Android
    用 go 重写就好了
    lrh3321
        27
    lrh3321  
       2019-01-04 16:36:23 +08:00 via Android
    别问,问我就回用 c++重构一下。
    luozic
        28
    luozic  
       2019-01-04 16:53:18 +08:00 via iPhone
    go 快速重构一个,除非业务复杂,甚至可以上 nginx +lua 搞定。
    hackerwin7
        29
    hackerwin7  
       2019-01-04 17:01:31 +08:00 via iPhone
    JVM CDS
    huobazi
        30
    huobazi  
       2019-01-04 17:09:52 +08:00 via iPhone   ❤️ 1
    换 dotnet core
    fuchaofather
        31
    fuchaofather  
       2019-01-04 17:11:56 +08:00
    可以试下用 jvm 调优, 其实我个人觉得语言差别不是很大, 差的是写代码的
    byfar
        32
    byfar  
       2019-01-04 18:29:13 +08:00
    今年都没什么人推 Rust 了呢
    lancelock
        33
    lancelock  
       2019-01-04 19:32:21 +08:00
    你这什么字体啊?
    chenqh
        34
    chenqh  
       2019-01-04 19:36:19 +08:00
    731/1.65,有没有用满,怕什么?空那么多内存做什么?
    sticnarf
        35
    sticnarf  
       2019-01-04 19:43:21 +08:00
    LZ,你这些全是同一个进程的不同线程吧……总共占了 1.65G 的 8.9%也就是 150M 左右,这已经不能接受了吗?
    Trumeet
        36
    Trumeet  
    OP
       2019-01-05 00:58:05 +08:00
    @lihongjie0209 好的,多谢
    Trumeet
        37
    Trumeet  
    OP
       2019-01-05 00:58:25 +08:00
    @victorywangzhcn 这个我试过,Netty 跑不起来的(
    Trumeet
        38
    Trumeet  
    OP
       2019-01-05 00:58:59 +08:00
    @sagaxu 好的,多谢(
    Trumeet
        39
    Trumeet  
    OP
       2019-01-05 00:59:43 +08:00
    @luosuosile 是啊。。最低好歹得是拍黄片啊( xd
    Trumeet
        40
    Trumeet  
    OP
       2019-01-05 01:00:28 +08:00
    @passerbytiny @loveCoding 多谢,我去看看
    Trumeet
        41
    Trumeet  
    OP
       2019-01-05 01:02:05 +08:00
    @sticnarf 这只是一部分,往下滚(我一般这么叫,滚动的意思,不要误解 2333 )还有一堆((
    liangdu
        42
    liangdu  
       2019-01-05 01:38:54 +08:00 via Android
    直接内存的默认大小为 xmx 减去一个 service,兄弟看着点调
    liangdu
        43
    liangdu  
       2019-01-05 01:41:18 +08:00 via Android
    减去一个 servivor 空间的大小(上面拼写错了,不好意思)
    feiyuanqiu
        44
    feiyuanqiu  
       2019-01-05 01:43:53 +08:00
    @lancelock #33 Operator Mono,这个字体最大的特色是它的斜体
    yanaraika
        45
    yanaraika  
       2019-01-05 05:01:42 +08:00 via Android
    算一下内存条和你花时间重构哪个贵
    Trumeet
        46
    Trumeet  
    OP
       2019-01-05 05:09:01 +08:00
    @yanaraika 服务器啊... 个人开发者花不起那个钱(
    yanaraika
        47
    yanaraika  
       2019-01-05 05:12:30 +08:00
    @Trumeet 那就调-Xmx 吧,你这个估计对 GC stop 也不敏感
    Trumeet
        48
    Trumeet  
    OP
       2019-01-05 05:13:24 +08:00
    @yanaraika 多谢,我看看
    realkenshinji
        49
    realkenshinji  
       2019-01-05 07:56:57 +08:00 via iPhone
    @dk7952638 然而开发效率现在来看也不高了
    KgM4gLtF0shViDH3
        50
    KgM4gLtF0shViDH3  
       2019-01-05 08:37:25 +08:00 via iPhone
    go 的开发效率真的不高……插入数组的方法都没有
    firebroo
        51
    firebroo  
       2019-01-05 10:32:50 +08:00 via Android
    不要说语言差别不大,c 艹重构一下就知道语言差别尽然这么大
    dk7952638
        52
    dk7952638  
       2019-01-05 10:37:25 +08:00
    @realkenshinji 这不你也知道是现在看来并不高,在当时那可是高的很。
    Camile
        53
    Camile  
       2019-01-05 12:02:49 +08:00
    别问,问就 Rust
    nekoyaki
        54
    nekoyaki  
       2019-01-05 12:09:44 +08:00
    htop 默认是把统一进程的不同线程全都显示出来的,你可以在 F2 ——》 Options 里把 Hide userland process threads 钩上,看到的结果就是单纯的“进程”了。不然就容易产生理解误区。
    Trumeet
        55
    Trumeet  
    OP
       2019-01-05 12:10:55 +08:00
    @nekoyaki 这样啊.. 多谢(
    nekoyaki
        56
    nekoyaki  
       2019-01-05 12:13:17 +08:00
    我比较奇怪的是为什么楼上只有一个人意识到这个问题是理解误区……
    zts1993
        57
    zts1993  
       2019-01-05 12:18:00 +08:00
    yuuta 最胖!
    别问,问就换狗浪
    janxin
        58
    janxin  
       2019-01-05 12:22:14 +08:00
    @byfar 好的,Rust 大法好,用 Rust 重写了解一下
    sjj050121014
        59
    sjj050121014  
       2019-01-05 13:28:51 +08:00
    线程开那么多干嘛,浪费内存和 cpu 时间,减一半线程好过加内存
    applehater
        60
    applehater  
       2019-01-06 01:13:46 +08:00
    @yanaraika 公司最近节流还真是从服务器减配开始了,真要去重构省资源来省钱。。。
    yanaraika
        61
    yanaraika  
       2019-01-06 02:34:44 +08:00 via Android
    @applehater 工资太低 or 服务实在写的太烂
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   2849 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 26ms · UTC 07:51 · PVG 15:51 · LAX 23:51 · JFK 02:51
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.