580 |
580 |
581 public void testMemoryUsage() throws Exception { |
581 public void testMemoryUsage() throws Exception { |
582 Metrics metrics = Metrics.systemMetrics(); |
582 Metrics metrics = Metrics.systemMetrics(); |
583 long memoryMaxUsage = metrics.getMemoryMaxUsage(); |
583 long memoryMaxUsage = metrics.getMemoryMaxUsage(); |
584 long memoryUsage = metrics.getMemoryUsage(); |
584 long memoryUsage = metrics.getMemoryUsage(); |
585 |
585 long newMemoryMaxUsage = 0, newMemoryUsage = 0; |
586 byte[] bb = new byte[64*1024*1024]; // 64M |
586 |
587 |
587 // allocate memory in a loop and check more than once for new values |
588 long newMemoryMaxUsage = metrics.getMemoryMaxUsage(); |
588 // otherwise we might see seldom the effect of decreasing new memory values |
589 long newMemoryUsage = metrics.getMemoryUsage(); |
589 // e.g. because the system could free up memory |
590 |
590 byte[][] bytes = new byte[32][]; |
591 if(newMemoryMaxUsage < memoryMaxUsage) { |
591 for (int i = 0; i < 32; i++) { |
592 fail(SubSystem.MEMORY, "getMemoryMaxUsage", newMemoryMaxUsage, |
592 bytes[i] = new byte[8*1024*1024]; |
593 memoryMaxUsage); |
593 newMemoryUsage = metrics.getMemoryUsage(); |
594 } |
594 if (newMemoryUsage > memoryUsage) { |
595 |
595 break; |
596 if(newMemoryUsage < memoryUsage) { |
596 } |
597 fail(SubSystem.MEMORY, "getMemoryUsage", newMemoryUsage, memoryUsage); |
597 } |
|
598 newMemoryMaxUsage = metrics.getMemoryMaxUsage(); |
|
599 |
|
600 if (newMemoryMaxUsage < memoryMaxUsage) { |
|
601 fail(SubSystem.MEMORY, "getMemoryMaxUsage", memoryMaxUsage, |
|
602 newMemoryMaxUsage); |
|
603 } |
|
604 |
|
605 if (newMemoryUsage < memoryUsage) { |
|
606 fail(SubSystem.MEMORY, "getMemoryUsage", memoryUsage, newMemoryUsage); |
598 } |
607 } |
599 } |
608 } |
600 |
609 |
601 public static void main(String[] args) throws Exception { |
610 public static void main(String[] args) throws Exception { |
602 // If cgroups is not configured, report success |
611 // If cgroups is not configured, report success |