springboot项目启动占用内存_docker部署的springboot项目,容器经常内存不足,差不多两天就要挂掉一个项目,怎么办?...

4g内存确实太寒碜了……尤其是你还要跑5、6个应用……

可以在docker脚本里指定一下启动的jvm参数

4g内存先要分给操作系统,还有docker本身,剩下的按照你的情况,一个应用能分到512m内存就谢天谢地了,所以可以在docker启动脚本里,给每个应用指定jvm参数:(java8环境)

jdk路径/bin/java -jar -Xmx384m -XX:MaxMetaspaceSize=128m -XX:CompressedClassSpaceSize=24m xxx.jar

这是我个人实践下来最合适的分配,每个人的项目不同,参数当然也不一样,仅供参考。

上面的是鱼,下面开始说渔

关键词:jvm参数调优,jvm内存模型,jstat

那些参数都是啥意思?

-Xmx指定堆内存最大值,这个是最常用的参数,实在懒得理解,光设置这个也凑合了。

-XX:MaxMetaspaceSize指定非堆内存的元空间最大值,这个参数是java8之后才有的,不过现在应该没几个人用更早的版本了吧……对于学习、测试用的小应用,非堆内存基本都占用很小,但是如果不指定,最大值默认1024m,就算Xmx限制了也还会吃很多内存……

-XX:CompressedClassSpaceSize这个是Metaspace的一部分,程序的代码被存储在这里,启动后几乎不会增长,可以根据自己的情况指定一个比较小的值,给Metaspace其他部分留够空间。

其实还有很多jvm参数,请根据需要自行搜索深入学习。

如何知道自己java应用的内存占用来决定最佳分配?

jdk路径/bin/jstat -gccapacity pid

根据pid查看某个应用的当前内存和最大内存。可以知道内存占用量的情况,也可以看出来前面的jvm参数配置有没有生效。

jstat还有很多参数,查出来的数值具体是什么意思也请自行搜索深入学习。

如果是在windows上运行,还可以用jdk路径/bin/jconsole.exe查看可视化的内存使用情况。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值