WAS(Tomcat 또는 기타등등~) 메모리 사용현황 모니터링 JSP
Java 2011. 10. 18. 02:59
java.lang.management.ManagementFactory 클래스를 이용하면 현재 실행중인 JVM 의 여러가지 정보를 가져올수 있다.
ManagementFactory 를 통해 가져올수 있는 정보들은 대충 메소드 이름을 보면 알수 있다.
뭐 이것저것 있는것 같은데 다른것들은 나중에 시간되면 한번 써묵어 보도록 해야겠다.
아무튼 쓸 수 있는 여러가지 메소드들중
ManagementFactory.getMemoryMXBean() 메소드와 ManagementFactory.getMemoryPoolMXBeans() 메소드를 이용하면 현재 JVM 의 메모리 사용현황을 조회하는 JSP 페이지를 작성할 수 있다.
맨들 페이지의 최종 모양은 대충 요렇다.
그리고 JSP 솟스~!
이 페이지를 실행하기 위해서는 jstl-1.2.jar 파일을 WEB-INF/lib 폴더에 추가시켜 주면되고,
maven 을 이용하는 경우는 dependencies 에
ManagementFactory 를 통해 가져올수 있는 정보들은 대충 메소드 이름을 보면 알수 있다.
뭐 이것저것 있는것 같은데 다른것들은 나중에 시간되면 한번 써묵어 보도록 해야겠다.
아무튼 쓸 수 있는 여러가지 메소드들중
ManagementFactory.getMemoryMXBean() 메소드와 ManagementFactory.getMemoryPoolMXBeans() 메소드를 이용하면 현재 JVM 의 메모리 사용현황을 조회하는 JSP 페이지를 작성할 수 있다.
맨들 페이지의 최종 모양은 대충 요렇다.
그리고 JSP 솟스~!
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> <%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%> <%@ taglib uri="http://java.sun.com/jsp/jstl/functions" prefix="fn"%> <%@ taglib uri="http://java.sun.com/jsp/jstl/fmt" prefix="fmt"%> <%@ page import="java.lang.management.ManagementFactory"%> <%@ page import="java.lang.management.MemoryMXBean"%> <% pageContext.setAttribute("memoryBean", ManagementFactory.getMemoryMXBean()); pageContext.setAttribute("poolBeans", ManagementFactory.getMemoryPoolMXBeans()); %> <html> <head> <title>JVM Memory Monitor</title> <style type="text/css"> body{ font-family:"Myriad Pro","Myriad Web","Tahoma","Helvetica","Arial",sans-serif; } table{ border-collapse: collapse; } td,th{ padding: 5px; } th { background-color: navy; color: #fff; font-weight: bold; } td { text-align: right; } </style> </head> <body> <h1>TOTAL</h1> <table border="1" width="100%"> <colgroup> <col width="20%"/> <col width="20%"/> <col width="20%"/> <col width="20%"/> <col width="20%"/> </colgroup> <tr> <th>Usage</th> <th>Max</th> <th>Init</th> <th>Used</th> <th>Committed</th> </tr> <tr> <td style="text-align: left">Heap Memory Usage</td> <td><fmt:formatNumber value="${memoryBean.heapMemoryUsage.max/(1024 * 1024)}" maxFractionDigits="1" />MB</td> <td><fmt:formatNumber value="${memoryBean.heapMemoryUsage.init/(1024 * 1024)}" maxFractionDigits="1" />MB</td> <td><fmt:formatNumber value="${memoryBean.heapMemoryUsage.used/(1024 * 1024)}" maxFractionDigits="1" />MB</td> <td><fmt:formatNumber value="${memoryBean.heapMemoryUsage.committed/(1024 * 1024)}" maxFractionDigits="1" />MB</td> </tr> <tr> <td style="text-align: left">Non-heap Memory Usage</td> <td><fmt:formatNumber value="${memoryBean.nonHeapMemoryUsage.max/(1024 * 1024)}" maxFractionDigits="1" />MB</td> <td><fmt:formatNumber value="${memoryBean.nonHeapMemoryUsage.init/(1024 * 1024)}" maxFractionDigits="1" />MB</td> <td><fmt:formatNumber value="${memoryBean.nonHeapMemoryUsage.used/(1024 * 1024)}" maxFractionDigits="1" />MB</td> <td><fmt:formatNumber value="${memoryBean.nonHeapMemoryUsage.committed/(1024 * 1024)}" maxFractionDigits="1" />MB</td> </tr> </table> <hr/> <h1>Memory Pools</h1> <c:forEach var="bean" items="${poolBeans}"> <h2>${bean.name}(${bean.type})</h2> <table border="1" width="100%"> <colgroup> <col width="20%"/> <col width="20%"/> <col width="20%"/> <col width="20%"/> <col width="20%"/> </colgroup> <tr> <th>Usage</th> <th>Max</th> <th>Init</th> <th>Used</th> <th>Committed</th> </tr> <tr> <td style="text-align: left">Memory Usage</td> <td><fmt:formatNumber value="${bean.usage.max/(1024 * 1024)}" maxFractionDigits="1" />MB</td> <td><fmt:formatNumber value="${bean.usage.init/(1024 * 1024)}" maxFractionDigits="1" />MB</td> <td><fmt:formatNumber value="${bean.usage.used/(1024 * 1024)}" maxFractionDigits="1" />MB</td> <td><fmt:formatNumber value="${bean.usage.committed/(1024 * 1024)}" maxFractionDigits="1" />MB</td> </tr> <tr> <td style="text-align: left">Peak Usage</td> <td><fmt:formatNumber value="${bean.peakUsage.max/(1024 * 1024)}" maxFractionDigits="1" />MB</td> <td><fmt:formatNumber value="${bean.peakUsage.init/(1024 * 1024)}" maxFractionDigits="1" />MB</td> <td><fmt:formatNumber value="${bean.peakUsage.used/(1024 * 1024)}" maxFractionDigits="1" />MB</td> <td><fmt:formatNumber value="${bean.peakUsage.committed/(1024 * 1024)}" maxFractionDigits="1" />MB</td> </tr> <tr> <td style="text-align: left">Collection Usage</td> <td><fmt:formatNumber value="${bean.collectionUsage.max/(1024 * 1024)}" maxFractionDigits="1" />MB</td> <td><fmt:formatNumber value="${bean.collectionUsage.init/(1024 * 1024)}" maxFractionDigits="1" />MB</td> <td><fmt:formatNumber value="${bean.collectionUsage.used/(1024 * 1024)}" maxFractionDigits="1" />MB</td> <td><fmt:formatNumber value="${bean.collectionUsage.committed/(1024 * 1024)}" maxFractionDigits="1" />MB</td> </tr> </table> </c:forEach> </body> </html>
이 페이지를 실행하기 위해서는 jstl-1.2.jar 파일을 WEB-INF/lib 폴더에 추가시켜 주면되고,
maven 을 이용하는 경우는 dependencies 에
<dependency> <groupId>jstl</groupId> <artifactId>jstl</artifactId> <version>1.2</version> </dependency>을 추가하면 된다.
'Java' 카테고리의 다른 글
Java Map 반복(Iteration)시키는 3가지 방법 (5) | 2011.11.13 |
---|---|
디폴트 패키지에 있는 자바 class 실행하기 ( Could not find the main class 에러날때 ) (1) | 2011.11.09 |
Runtime 에 jar 파일 클래스패스에 추가 시키기 : RuntimeJarLoader (1) | 2011.10.10 |
Jetty Scanner 를 이용한 특정 디렉토리 및 파일 변경사항(delete, change, add) 모니터링하기 (0) | 2011.10.05 |
java.sql.SQLException: Column count doesn't match value count at XXX 가 발생하는 경우 (0) | 2011.09.28 |