1. 程式人生 > >linux下更改tomcat啟動記憶體大小

linux下更改tomcat啟動記憶體大小

近期要把測試的4個服務遷移到某臺測試機器上,可是這臺機器的記憶體空間只剩下4g了, 每個服務要是分配1g的記憶體,這個機器在流程高峰,記憶體不夠用,可能就會kill掉某個服務了,這樣會影響服務的穩定性,如果把對應服務的記憶體分配減少到512那麼就應該很足夠了。 ps:測試的服務分配的記憶體小一些,對服務的穩定基本無影響,線上的根據需求合理分配

  1. 檢視一下目前我們的服務佔用多少記憶體 ps -ef |grep pid
-Xms1g -Xmx1g -Xmn512m -Xss1024K -XX:PermSize=256m -XX:MaxPermSize=512m -XX:ParallelGCThreads=8 -XX:+UseConcMarkSweepGC -XX:+UseParNewGC -XX:+UseConcMarkSweepGC -XX:+UseCMSCompactAtFullCollection -XX:SurvivorRatio=4 -XX:MaxTenuringThreshold=10 -XX:CMSInitiatingOccupancyFraction=80

你會看到服務一些重要的配置項,說幾個對我們更改記憶體重要的幾個配置 堆疊區: xms jvm初始分配的堆記憶體大小 助記:memory startup xmx jvm最大允許分配的堆記憶體 助記:memory max xmn 年輕代大小 助記:memory new xss 每個執行緒的堆疊大小 助記:memory stack size

非堆疊區: -XX:permSize 持久帶,非堆疊區初始分配記憶體大小,permanent size -XXL:MaxPermSize 非堆疊區最大記憶體

基本規則: 整個實體記憶體= xmx=xmn+老年代

那麼我們如果要設定512的記憶體的話,xmx和xms初始堆記憶體和最大堆記憶體都設定為512m,這兩個值設定為相同的,主要是為了避免每次垃圾回收完成後,jvm重新分配記憶體; xmn一般為整個堆疊大小的3/8,這裡可以設定為256(1/2接近3/8) xss jdk5.0之後的每個執行緒堆疊大小為1M,在相同的實體記憶體下,適當的減小這個值,可以生成更多的執行緒,上限一般在3000-5000個左右。 -XX:permSize 一般為實體記憶體的1/64,這裡可以設定為64M。 -XXL:MaxPermSize 持久帶最大實體記憶體一般為實體記憶體的1/4,基本跟xmx一致,這裡可以設定為512M。 這隻的這些都是預設值,其實並沒有涉及jvm調優的知識,僅限於知道了什麼意思,一些基本的預設配置。 那麼我們設定512記憶體的基本配置就是:

-Xms512m -Xmx512m -Xmn256m -Xss1024K -XX:PermSize=64m -XX:MaxPermSize=512m -XX:ParallelGCThreads=8 -XX:+UseConcMarkSweepGC -XX:+UseParNewGC -XX:+UseConcMarkSweepGC -XX:+UseCMSCompactAtFullCollection -XX:SurvivorRatio=4 -XX:MaxTenuringThreshold=10 -XX:CMSInitiatingOccupancyFraction=80