Better JVM in linux : Swapiness
Recently I found interesting issue regarding JVM and Linux Swapiness. I was getting java out of memory while compiling my Java application.
I have 8GB/Linux, and I was getting Java out of memory while compiling it alone (Without any other memory intensive job), also the overall build time was rediculously high.
I googled and tried some tricks on the machine, after that my build time was significantly better and most importantly, I did not get any out of memory from JVM.
What I did is that I set the swapiness of the system to 10 from 60.
Swapiness is a value between 0 to 100 and it's a parameter to the linux kerner to take decision on how aggressively to take processes out of the RAM to Swap Space in the Hard disk.
Swapiness with 0 tells the kernel to avoid using Swap as far as possible, but it does not mean Swap wont be used at all.
Swapiness with value 100 tells the kernel to use Swap space aggressively.
You can check swapiness of your linux system using the following command,
cat /proc/sys/vm/swappiness
The default value of swapiness in most linux distribution is 60.
To set the swapiness value temporarily in the system use the following command,
sudo sysctl vm.swappiness=10
To make a change permanent, edit the configuration file with your favorite editor:
gksudo gedit /etc/sysctl.conf
Search for vm.swappiness and change its value as desired.
vm.swappiness=10
You need root privilege to update the swapiness value.
Also you can use /proc/sys/vm/drop_caches to claim/free memory not required, but drop_cashes is only supported by linux kernel >2.4.
To know the Kernel Version execute the following command,
cat /proc/version
for my machine it says,
[root@localhost bin]# cat /proc/version
Linux version 2.6.34.7-61.fc13.x86_64 (mockbuild@x86-02.phx2.fedoraproject.org) (gcc version 4.4.4 20100630 (Red Hat 4.4.4-10) (GCC) ) #1 SMP Tue Oct 19 04:06:30 UTC 2010
We can free memory useing the following commands,
sync; echo 1 > /proc/sys/vm/drop_caches
sync; echo 2 > /proc/sys/vm/drop_caches
sync; echo 3 > /proc/sys/vm/drop_caches
Effect of the above 3 commands can be seen from the following data,
I was running a machine with 8GB RAM,and swapiness value = 10, i checked the status of the system with TOP Command.
Initially when I was running a lot of appications along with a VMWare with 1GB memory, then I stopped the VMWare and at last I fired the drop caches commands to see the difference in memory and swap status.
Initial
Mem: 8192252k total, 4167144k used, 4025108k free, 6840k buffers
Swap: 6143996k total, 1815928k used, 4328068k free, 265880k cached
Closing VM
Mem: 8192252k total, 4260904k used, 3931348k free, 14208k buffers
Swap: 6143996k total, 1397360k used, 4746636k free, 1375056k cached
Closing VM and Executing drop_caches
Mem: 8192252k total, 3057004k used, 5135248k free, 1180k buffers
Swap: 6143996k total, 1397144k used, 4746852k free, 214112k cached
So using this two tricks I am able to compile/build my Java Application well.
I have 8GB/Linux, and I was getting Java out of memory while compiling it alone (Without any other memory intensive job), also the overall build time was rediculously high.
I googled and tried some tricks on the machine, after that my build time was significantly better and most importantly, I did not get any out of memory from JVM.
What I did is that I set the swapiness of the system to 10 from 60.
Swapiness is a value between 0 to 100 and it's a parameter to the linux kerner to take decision on how aggressively to take processes out of the RAM to Swap Space in the Hard disk.
Swapiness with 0 tells the kernel to avoid using Swap as far as possible, but it does not mean Swap wont be used at all.
Swapiness with value 100 tells the kernel to use Swap space aggressively.
You can check swapiness of your linux system using the following command,
cat /proc/sys/vm/swappiness
The default value of swapiness in most linux distribution is 60.
To set the swapiness value temporarily in the system use the following command,
sudo sysctl vm.swappiness=10
To make a change permanent, edit the configuration file with your favorite editor:
gksudo gedit /etc/sysctl.conf
Search for vm.swappiness and change its value as desired.
vm.swappiness=10
You need root privilege to update the swapiness value.
Also you can use /proc/sys/vm/drop_caches to claim/free memory not required, but drop_cashes is only supported by linux kernel >2.4.
To know the Kernel Version execute the following command,
cat /proc/version
for my machine it says,
[root@localhost bin]# cat /proc/version
Linux version 2.6.34.7-61.fc13.x86_64 (mockbuild@x86-02.phx2.fedoraproject.org) (gcc version 4.4.4 20100630 (Red Hat 4.4.4-10) (GCC) ) #1 SMP Tue Oct 19 04:06:30 UTC 2010
We can free memory useing the following commands,
sync; echo 1 > /proc/sys/vm/drop_caches
sync; echo 2 > /proc/sys/vm/drop_caches
sync; echo 3 > /proc/sys/vm/drop_caches
Effect of the above 3 commands can be seen from the following data,
I was running a machine with 8GB RAM,and swapiness value = 10, i checked the status of the system with TOP Command.
Initially when I was running a lot of appications along with a VMWare with 1GB memory, then I stopped the VMWare and at last I fired the drop caches commands to see the difference in memory and swap status.
Initial
Mem: 8192252k total, 4167144k used, 4025108k free, 6840k buffers
Swap: 6143996k total, 1815928k used, 4328068k free, 265880k cached
Closing VM
Mem: 8192252k total, 4260904k used, 3931348k free, 14208k buffers
Swap: 6143996k total, 1397360k used, 4746636k free, 1375056k cached
Closing VM and Executing drop_caches
Mem: 8192252k total, 3057004k used, 5135248k free, 1180k buffers
Swap: 6143996k total, 1397144k used, 4746852k free, 214112k cached
So using this two tricks I am able to compile/build my Java Application well.
Comments
Post a Comment