Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

不知有没有可以主动触发把Java Heap内存释放归还给系统内存的功能 #2

Closed
jiangguilong2000 opened this issue Mar 17, 2021 · 7 comments

Comments

@jiangguilong2000
Copy link

最近项目打算用kona,由于我们的产品是游戏产品,有个特性就是在导量的第一两天游戏服会导入很多玩家,PCU很高导致临时撑大堆内存,但2天后,80%+的玩家可能会流失,这样,每个游戏进程就冗余了很多堆内存没法释放,而服务器起码要1周+ 以上才停机维护。同时由于内存被占用,不能在虚拟机上另开新区,而且因为被内存占用被撑大,经常会被系统告警,系统内存不足。

以前用过AliJDK,他们提供了一个功能:将闲置的Java Heap归还物理内存,提高内存的使用效率,提高应用部署密度
就是使用命令行选项-XX:+DeallocateHeapPages,可以把不使用的HEAP归还给物理内存。这样,我们在系统内存不足的时候,会被动触发FULLGC,让进程腾出闲置内存,或者每天凌晨主动释放进程的闲置内存给系统。大大节省了我们的服务器资源成本,也不会再忍受内存不足的告警起码一个星期。:)
不知kona有没有这个特性,没有的话,希望支持,谢谢!

@wattsun110

This comment has been minimized.

@jiangguilong2000
Copy link
Author

不错,支持做的更加彻底,自己FULLGC的定时脚本都免了

@tcmot
Copy link

tcmot commented Aug 31, 2021

其实不能理解为什么这样一个功能,openjdk却不考虑呢?
不知道是出于什么样的考虑,才会忽略这样一个功能.

既然能申请堆外内存,就不让释放.

是不是openjdk最开始没有想过开放堆外内存的功能呢?

毕竟这个功能使用很复杂.

unsafe.

1 similar comment
@tcmot
Copy link

tcmot commented Aug 31, 2021

其实不能理解为什么这样一个功能,openjdk却不考虑呢?
不知道是出于什么样的考虑,才会忽略这样一个功能.

既然能申请堆外内存,就不让释放.

是不是openjdk最开始没有想过开放堆外内存的功能呢?

毕竟这个功能使用很复杂.

unsafe.

@shiyuexw
Copy link
Collaborator

shiyuexw commented Mar 4, 2022

Tencent Kona JDK 11.0.14已支持该特性,通过-XX:+FreeHeapPhysicalMemory 打开这个特性

@shiyuexw
Copy link
Collaborator

无进一步需求,关闭该issue

@jiangguilong2000
Copy link
Author

jiangguilong2000 commented Dec 22, 2022

ForcePeriodicGCInterval

试了下ForcePeriodicGCInterval无效,-XX:+FreeHeapPhysicalMemory -XX:ForcePeriodicGCInterval=60000,预期是一分钟一次FULLGC 但发现没有触发,从启动时的FGC @3次一直没有增加上去, @wattsun110
image

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

4 participants