最近在使用spring cloud做微服务架构,然后spring boot打成jar包运行,发现占用的内存过大,基本上都在1.2G~1.5G之间。
然后很多服务都部署在一台服务器上,导致各种服务占用的内存太大,而相互挤占,经常有服务掉线。
为此,我想给虚拟机加参数设置堆内存大小,然后随手一百度,就写出了下面的命令:
错误的写法:
java -jar xxx.jar -Xms256m -Xmx512m -Xmn128m &
程序算是跑起来了,top一下,发现占的内存还是那么大。
思忖一下,什么垃圾虚拟机,老子设个参数都没用,害人精。
后来google了一下,其实这个问题不怎么好google,你的注意提问内容。
然后在StackOverflow找到了如下回答,醍醐灌顶啊。
虽然这个回答和设置对内存大小没什么相关,但是很有用,大体翻译一下就是:
运行的-jar xxx.jar后面的参数,都是属于jar所代表的应用,而不是属于虚拟机。
像-Xms,-Xmx这种参数都是属于虚拟机的,而不是属于jar所代表的应用,被我自己蠢哭了。
正确的写法:
java -Xms256m -Xmx512m -Xmn128m -jar xxx.jar &
-jar之前的参数都属于虚拟机,而jar包后面的参数都属于java应用。
也只有虚拟机这种,进程内运行运用才会有这种奇葩情况了。
枉称java开发。。。。。。