通常对于很多java应用来说,当打成jar包后会下意识的使用java -jar xxx.jar
来运行应用,而不是根据自己业务或实际debug的一些需求来增加一些JVM的辅助参数,这样导致的问题就是,后续出了问题之后不容易进行管理以及相关故障追踪和排查。
那么问题来了,当你在jar -jar
的时候,默认的JVM堆内存是多少呢?
其实,JVM在不同架构(配置)的OS下回体现出不同的JVM配置,比如在一个8c16g
的ECS上,默认的Heap值如下:
|
|
由上述的输出可知,初始的堆内存为264241152/1024/1024=252M
,而堆内存最大为4206886912/1024/1024/1024=3G
这个时候可能就会有一个问题就是,该ECS上跑多少个java -jar xxx.jar
这类的服务会比较好呢?如果按照每个服务都能使用3G的堆内存来算,该机器上做多跑4个这类的服务是一个比较合理的规划,但是考虑实际的业务使用需求,单纯这样考虑可能会有点唐突了,因此还是建议每个应用在部署时指定一些基础的参数,比如初始堆和最大堆,并且这两个参数一般建议设置成一致,以免在运行过程中堆的扩容造成的损耗。