- 论坛徽章:
- 0
|
回复 7# Shell_HAT
遇到的这个问题, 做了下验证,不是MaxDirectMemorySize问题。
(多线程申请直接内存,默认是cpu数目*8个最多的64M,但是实际上环境是双核,事实证明不可能出现49个)
请教了一些java专家。
做了一些demo验证:
发现:是JNI本地内存申请就会导致类似的内存泄露。
应当属于 “JVM调用的OS的libc库中的泄露函数”导致。
---------------------------------------- 当前措施 ----------------------------------------
1. 找一与问题环境对齐的环境:
部署内存申请函数的跟踪工具,予以跟踪问题进程。取用定时生成的内存-函数关系文件,综合分析哪些函数申请内存不释放,从而达到寻找到泄露源头的目的。
2. 参考开源Nagios监控处理,其对自身插件出现内存泄露进行重启处理予以故障恢复(防止堆外内存泄露情况导致OS内存持续消耗,导致其他进程异常甚至OS内存消耗殆尽等连带情况)。更新进程监控脚本,在status检查项中增加内存量检查,超过堆内存*2;予以记录并重启自愈。
|
|