java native内存_为什么java Native Memory Tracking中的内存增加

我的应用程序在docker容器中运行,它使用

scala并使用“OpenJDK 64位服务器VM(内置25.102-b14,混合模式)”,其Xmx设置为16GB,容器内存限制为24Gb,运行后为某些容器被杀的时间:

Last State: Terminated

Reason: OOMKilled

Exit Code: 137

但是我在日志中找不到任何“java.lang.OutOfMemoryError:Java堆空间”错误,在所有48个节点中都没有找到过去2周内的错误.所以它不太可能是正常的堆OOM.

dmesg输出:

$dmesg -l err,crit,alert,emerg

STDIN is not a terminal

[1647254.978515] Memory cgroup out of memory: Kill process 10924 (java) score 1652 or sacrifice child

[1647254.989138] Killed process 10924 (java) total-vm:34187148kB, anon-rss:24853120kB, file-rss:23904kB

[1655749.664871] Memory cgroup out of memory: Kill process 1969 (java) score 1652 or sacrifice child

[1655749.675513] Killed process 1969 (java) total-vm:35201940kB, anon-rss:24856624kB, file-rss:24120kB

[1655749.987605] Memory cgroup out of memory: Kill process 2799 (java) score 1656 or sacrifice child

然后我再次运行JCMD,然后再次被杀死,数据如下所示:

本机内存跟踪:

总计:保留= 25505339KB,已提交= 25140947KB

– Java堆(保留= 16777216KB,已提交= 16777216KB)

(mmap:保留= 16777216KB,已提交= 16777216KB)

>类(保留= 247996KB,承诺= 93500KB)

(课程#14539)

(malloc = 2236KB#29794)

(mmap:保留= 245760KB,已提交= 91264KB)

>线程(保留= 1013160KB,已提交= 1013160KB)

(第1902号线)

(堆栈:保留= 1003956KB,已提交= 1003956KB)

(malloc = 6240KB#9523)

(竞技场= 2964KB#3803)

>代码(保留= 263255KB,承诺= 86131KB)

(malloc = 13655KB#20964)

(mmap:保留= 249600KB,已提交= 72476KB)

> GC(保留= 776174KB,承诺= 776174KB)

(malloc = 120814KB#164310)

(mmap:保留= 655360KB,已提交= 655360KB)

>编译器(保留= 812KB,已提交= 812KB)

(malloc = 681KB#1823)

(竞技场= 131KB#3)

>内部(保留= 6366260KB,承诺= 6366256KB)

(malloc = 6366256KB#178778)

(mmap:保留= 4KB,已提交= 0KB)

>符号(保留= 18391KB,已提交= 18391KB)

(malloc = 16242KB#153138)

(竞技场= 2150KB#1)

>本机内存跟踪(保留= 9002KB,已提交= 9002KB)

(malloc = 186KB#2000)

(跟踪开销= 8816KB)

> Arena Chunk(保留= 273KB,承诺= 273KB)

(malloc的= 273KB)

>未知(保留= 32800KB,已提交= 32KB)

(mmap:保留= 32800KB,已提交= 32KB)

我注意到的一件事是这一节:

内部(保留= 6366260KB,承诺= 6366256KB)

它不断增长并导致总内存使用量超过24GB.

以前有人见过类似的问题吗?任何人都知道这里的内存是什么,以及它在不释放内存的情况下不断增长的原因是什么?

最佳答案 这不是你的问题的答案,它只是一个解决方法.

我在java版“1.8.0_45”上运行JRuby的docker容器中发现了同样的问题.解决方案是显式调用垃圾收集.我完全不知道,为什么这样可行,但GC内部Java内存恢复到8MB后.

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值