< prev index next >
src/share/vm/runtime/arguments.cpp
Print this page
*** 2033,2046 ****
// Use static initialization to get the default before parsing
static const size_t DefaultHeapBaseMinAddress = HeapBaseMinAddress;
void Arguments::set_heap_size() {
! const julong phys_mem =
FLAG_IS_DEFAULT(MaxRAM) ? MIN2(os::physical_memory(), (julong)MaxRAM)
: (julong)MaxRAM;
// If the maximum heap size has not been set with -Xmx,
// then set it as fraction of the size of physical memory,
// respecting the maximum and minimum sizes of the heap.
if (FLAG_IS_DEFAULT(MaxHeapSize)) {
julong reasonable_max = phys_mem / MaxRAMFraction;
--- 2033,2072 ----
// Use static initialization to get the default before parsing
static const size_t DefaultHeapBaseMinAddress = HeapBaseMinAddress;
void Arguments::set_heap_size() {
! julong phys_mem =
FLAG_IS_DEFAULT(MaxRAM) ? MIN2(os::physical_memory(), (julong)MaxRAM)
: (julong)MaxRAM;
+ // Experimental support for CGroup memory limits
+ if (UseCGroupMemoryLimitForHeap) {
+ // This is a rough indicator that a CGroup limit may be in force
+ // for this process
+ const char* lim_file = "/sys/fs/cgroup/memory/memory.limit_in_bytes";
+ FILE *fp = fopen(lim_file, "r");
+ if (fp != NULL) {
+ julong cgroup_max = 0;
+ int ret = fscanf(fp, JULONG_FORMAT, &cgroup_max);
+ if (ret == 1 && cgroup_max > 0) {
+ // If unlimited, cgroup_max will be a very large, but unspecified
+ // value, so use initial phys_mem as a limit
+ log_info(gc, heap)("Setting phys_mem to the min of cgroup limit ("
+ JULONG_FORMAT "MB) and initial phys_mem ("
+ JULONG_FORMAT "MB)", cgroup_max/M, phys_mem/M);
+ phys_mem = MIN2(cgroup_max, phys_mem);
+ } else {
+ warning("Unable to read/parse cgroup memory limit from %s: %s",
+ lim_file, errno != 0 ? strerror(errno) : "unknown error");
+ }
+ fclose(fp);
+ } else {
+ warning("Unable to open cgroup memory limit file %s (%s)", lim_file, strerror(errno));
+ }
+ }
+
// If the maximum heap size has not been set with -Xmx,
// then set it as fraction of the size of physical memory,
// respecting the maximum and minimum sizes of the heap.
if (FLAG_IS_DEFAULT(MaxHeapSize)) {
julong reasonable_max = phys_mem / MaxRAMFraction;
< prev index next >