Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Setting -XX:MaxRam

According to this link, there is an option to set MaxRamSize manually to restrict the JVM to not use memory beyond this. But I have not seen any documentation of the same. I've never known this. Is there anything like this or anything similar? PS. I know and I'm not looking to set heap/stack/metaspace/native memory sizes. I just would like to know if there is an overall memory limiting option.

Trying it did not help as It errored out:

Improperly specified VM option 'MaxRAM=1073741824B'
Could not create the Java Virtual Machine.
A fatal exception has occurred. Program will exit.

Infact according to this link open-jdk seems to have these options. Another link that I found I believe points to set the heap size. Which again is not looking for. But this is for Oracle I guess.

Why I'm looking for this kind of an option to run the application inside a container (Like Docker) and prevent the application from being killed by the OOM Killer. What I believe is if there is a setting of such the java application would error or crash with a java.lang.OutOfMemoryError rather, than the container being terminated.

My assumptions and understandings may be totally wrong. This question may also be totally wrong and irrelevant. But of course, asking is the way forward :).

like image 913
Vipin Menon Avatar asked Sep 25 '18 09:09

Vipin Menon


People also ask

What is a meaning of a setting?

Definition of setting 1 : the manner, position, or direction in which something is set. 2 : the frame or bed in which a gem is set also : style of mounting. 3a : the time, place, and circumstances in which something occurs or develops. b : the time and place of the action of a literary, dramatic, or cinematic work.

What is the meaning of home setting?

The physical structure within which one lives, such as a house or apartment.

Were setting up meaning?

1. the establishment or creation of something.


1 Answers

Why I'm looking for this kind of an option to run the application inside a container (Like Docker) and prevent the application from being killed by the OOM Killer.

This is exactly the option you are looking for. Moreover, it was properly integrated with cgroups (~docker) as part of JDK-8170888. Note that this flag does not prevent JVM from allocating more memory than its value, but rather gives a hint "I know my physical RAM limit is X, please allocate within X", so JVM will share this value between Java heap and native memory. But if e.g. your application has native memory leak or classloader leak, then this limit will be reached anyway.

JVM is complaining on MaxRAM=1073741824B because it doesn't expect B in the end, it should be declared as -XX:MaxRAM=1073741824. See the description of the flag: Real memory size (in bytes) used to set maximum heap size.

like image 125
qwwdfsad Avatar answered Sep 22 '22 08:09

qwwdfsad