JAR 包上线内存消耗很大如何精准定位到问题处? - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
Sign Up Now
For Existing Member  Sign In
godleon
V2EX    Java

JAR 包上线内存消耗很大如何精准定位到问题处?

  •  
  •   godleon May 16, 2022 3193 views
    This topic created in 1441 days ago, the information mentioned may be changed or developed.

    新的 aliyun-centos7, jar 内几乎都是 crud ,没有访问请求,jar 包 80M 左右,启动之后内存占用了 1 个 G ;

    这个是 java 的基操还是说是我包的问题,还是我服务器的问题,如果该如何定位 怎么解决?

    首先排除启动时给 jar 设置限制大小的操作!

    Supplement 1    May 16, 2022
    1.线上 dump 拉下来了,转成 jps 文件,在 JProfiler 打开分析,内存占用在 30M
    2.使用 java visualVM 远程链接线上实时监控 内存占用在 90M
    3.jmap -heap pid 显示占用 300M
    4.top -p XX 显示占用 990M

    这是算正常还是异常~
    18 replies    2022-05-16 17:50:57 +08:00
    RedBeanIce
        1
    RedBeanIce  
       May 16, 2022
    拉下来看看内存里面都是什么
    RedBeanIce
        2
    RedBeanIce  
       May 16, 2022
    dump
    BBCCBB
        3
    BBCCBB  
       May 16, 2022
    jdk 设置的最大内存多大? 他会一直到最大内存才开始回收..

    如果不是这个问题. jmap dump 几次内存下来分析?
    godleon
        4
    godleon  
    OP
       May 16, 2022
    @RedBeanIce 本地开发环境启动后内存开销正常,但是放到线上 我用 nohup 后台运行以后,占用内存很大了,也没有任何日志输出
    chendy
        5
    chendy  
       May 16, 2022
    java 命令不加参数默认最大堆是物理内存 1/4 ,加上 meta space 之类的实际使用可能会更多,不加参数限制慢慢就会吃到那么多
    觉得占用太大就加参数做限制,但是内存太小会影响性能
    觉得内存占用不正常就 dump 内存用 mat 之类的工具做分析定位问题
    godleon
        6
    godleon  
    OP
       May 16, 2022
    @BBCCBB 没有设置内存大小,应该是服务器内存的 1/4 吧
    sorakylin
        7
    sorakylin  
       May 16, 2022
    dump + MAT 分析, 解君愁
    seaswalker
        8
    seaswalker  
       May 16, 2022 via iPhone
    1g 这不是 java 常规操作
    fuis
        9
    fuis  
       May 16, 2022
    jconsole 连进去看
    godleon
        10
    godleon  
    OP
       May 16, 2022
    @fuis
    @sorakylin
    @chendy

    我试试吧,我也不知道我这水平能不能分析出来个 123
    someonedeng
        11
    someonedeng  
       May 16, 2022
    dump 看看什么情况先
    zifangsky
        12
    zifangsky  
       May 16, 2022
    # 查看进程 pid ,假如查出来是 12767
    $ ps -ef | grep java

    # 查看当前堆栈情况
    $ sudo jmap -heap 12767

    先看看堆栈情况,是不是默认设置得比较大
    zmal
        13
    zmal  
       May 16, 2022
    运行内存和你的 jar 包大小又没啥关系和启动参数有关。
    dqzcwxb
        14
    dqzcwxb  
       May 16, 2022
    jvm 占用内存和实际需要内存是两码事而且跟你包大小没有比例关系,你这就是正常的没设置-Xmx 导致使用了默认的 1/4 物理内存
    godleon
        15
    godleon  
    OP
       May 16, 2022
    @dqzcwxb
    @zmal
    @zifangsky
    那我是不是可以这样理解,假设我现在有 4 个 JAR 都是空包,我现在不加-Xmx 启动放到 8G 服务器上,是不是我放完 4 个包,啥也不用干就吃满了。
    zmal
        16
    zmal  
       May 16, 2022
    jvm 没这么傻,linux 也没这么傻。
    jorneyr
        17
    jorneyr  
       May 16, 2022
    jmap 查看哪些对象占用内存大,生成火焰图看看内存情况。
    常见的是不是使用 Map 存储了大量缓存对象。
    线上环境的 -Xms 和 -Xmx 是不是都设置为同一个值了。
    lmshl
        18
    lmshl  
       May 16, 2022
    https://github.com/zio/zio/pull/6807
    https://github.com/zio/zio-zmx/pull/370

    最近给某个并发纤程库修了几个 OOM 的 bug ,也来分享下工具。

    https://docs.oracle.com/javase/7/docs/technotes/guides/management/agent.html
    应用启动时开启 jmx 选项,用 jvisualvm 远程连上去可以看实时内存和线程状态,也可以 dump 堆进行一些简单的分析。

    https://wiki.eclipse.org/MemoryAnalyzer
    应用运行时可以 jmap 生成堆文件,拉下来扔进 mat 分析,无脑选内存泄漏面板就够了。
    About     Help     Advertise     Blog     API     FAQ     Solana     6082 Online   Highest 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 78ms UTC 02:32 PVG 10:32 LAX 19:32 JFK 22:32
    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