
新的 aliyun-centos7, jar 内几乎都是 crud ,没有访问请求,jar 包 80M 左右,启动之后内存占用了 1 个 G ;
这个是 java 的基操还是说是我包的问题,还是我服务器的问题,如果该如何定位 怎么解决?
首先排除启动时给 jar 设置限制大小的操作!
1 RedBeanIce May 16, 2022 拉下来看看内存里面都是什么 |
2 RedBeanIce May 16, 2022 dump |
3 BBCCBB May 16, 2022 jdk 设置的最大内存多大? 他会一直到最大内存才开始回收.. 如果不是这个问题. jmap dump 几次内存下来分析? |
4 godleon OP @RedBeanIce 本地开发环境启动后内存开销正常,但是放到线上 我用 nohup 后台运行以后,占用内存很大了,也没有任何日志输出 |
5 chendy May 16, 2022 java 命令不加参数默认最大堆是物理内存 1/4 ,加上 meta space 之类的实际使用可能会更多,不加参数限制慢慢就会吃到那么多 觉得占用太大就加参数做限制,但是内存太小会影响性能 觉得内存占用不正常就 dump 内存用 mat 之类的工具做分析定位问题 |
7 sorakylin May 16, 2022 dump + MAT 分析, 解君愁 |
8 seaswalker May 16, 2022 via iPhone 1g 这不是 java 常规操作 |
9 fuis May 16, 2022 jconsole 连进去看 |
11 someonedeng May 16, 2022 dump 看看什么情况先 |
12 zifangsky May 16, 2022 # 查看进程 pid ,假如查出来是 12767 $ ps -ef | grep java # 查看当前堆栈情况 $ sudo jmap -heap 12767 先看看堆栈情况,是不是默认设置得比较大 |
13 zmal May 16, 2022 运行内存和你的 jar 包大小又没啥关系和启动参数有关。 |
14 dqzcwxb May 16, 2022 jvm 占用内存和实际需要内存是两码事而且跟你包大小没有比例关系,你这就是正常的没设置-Xmx 导致使用了默认的 1/4 物理内存 |
15 godleon OP |
16 zmal May 16, 2022 jvm 没这么傻,linux 也没这么傻。 |
17 jorneyr May 16, 2022 jmap 查看哪些对象占用内存大,生成火焰图看看内存情况。 常见的是不是使用 Map 存储了大量缓存对象。 线上环境的 -Xms 和 -Xmx 是不是都设置为同一个值了。 |
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 分析,无脑选内存泄漏面板就够了。 |