원격으로 접속이 가능하다는 가장큰 장점이 있다. 

 

Rmi서버를 이용한다. 

 

해당 java프로그램이나 tomcat 구동시킬때 

Jvm 아규먼트를  다음과 같이 입력한다. 

 

 

-Dcom.sun.management.jmxremote -Dcom.sun.management.jmxremote.port=9999 -Dcom.sun.management.jmxremote.authenticate=false -Dcom.sun.management.jmxremote.ssl=false -Djava.rmi.server.hostname=localhost   <-Dsun.io.serialization.extendedDebugInfo=true><--이건 안해도댐 

 

Jmxrremote라는 것을 활성화 시키고 포트는 9999 host localhost 한다는것이다 

Auth ssl 활성화시키면 키나 user정보가 들어잇는 파일이 필요하다 나중에 해보겠다. 

 

 

Java에서  

 

JMXServiceURL url = new JMXServiceURL("service:jmx:rmi:///jndi/rmi://localhost:9999/jmxrmi"); 

 url 등록한다. 

도메인을 보면 rmi서버를 구동시키는것이다. 

 

JMXConnector jmxc = JMXConnectorFactory.connect(url); 

커넥터를 만들고 

MBeanServerConnection mbs = jmxc.getMBeanServerConnection(); 

 연결시켜준다. 

 

기본적인 이름은 

 

해당 클래스에 정의되어있따. 

 

내용은 

 

A Java virtual machine has zero or a single instance of the following management interfaces. 

 

Management Interface 

ObjectName 

A Java virtual machine may have one or more instances of the following management interfaces. 

 

Management Interface 

ObjectName 

java.lang:type=GarbageCollector,name=collector's name 

java.lang:type=MemoryManager,name=manager's name 

java.lang:type=MemoryPool,name=pool's name 

java.nio:type=BufferPool,name=pool name 

 

 

으로 확인  수도있으며 

 

찾을수도있다. 

 

Set<ObjectName> names = mbs.queryNames(new ObjectName("java.lang:type=*"), null); 

Iterator<ObjectName> iter = names.iterator(); 

while(iter.hasNext()) { 

ObjectName name = iter.next(); 

typeList.add(name.toString()); 

} 

System.out.println(typeList.toString()); 

 

와일드 카드가 통한다저렇게 하면 java.lang 모든 type 찾는다  다만 name이나 worker 등록되어있는건 찾지 못한다참고하자. 

Ex(("java.lang:type=GarbageCollector,name=MarkSweepCompact"); 이건 못찾는다. 

 

모든정보는 상위 클래스에 거의 모든 정보를 담고있으니 그것을 이용하는것이 좋다. 

 

 

 

stdMBeanName =new ObjectName("java.lang:type=Memory"); 

mInfo = mbs.getMBeanInfo(stdMBeanName); 

mAttributeInfos = mInfo.getAttributes(); 

long data =0L; 

for(MBeanAttributeInfo m : mAttributeInfos) { 

 

if("MaxHeapSize".equals(m.getName()) || "MinHeapSize".equals(m.getName())) { 

data = (long) mbs.getAttribute(stdMBeanName, m.getName()); 

this.outMap.put(m.getName(), data); 

} 

 

if("HeapMemoryUsage".equals(m.getName()) || "NonHeapMemoryUsage".equals(m.getName())) { 

    this.innerMap = new HashMap<>(); 

CompositeDataSupport  com = (CompositeDataSupport) mbs.getAttribute(stdMBeanName, m.getName()); 

CompositeType compositeType = com.getCompositeType(); 

Set<String> comNames =  compositeType.keySet(); 

Iterator<String> inneriter = comNames.iterator(); 

while(inneriter.hasNext()) { 

String key = inneriter.next(); 

data = (long) com.get(key); 

this.innerMap.put(key, data); 

this.outMap.put(m.getName(), innerMap); 

 

} 

} 

 

} 

 

Elasticserch 넣기위해 map 넣어서 말았다. 

 

이런식으로 해당 이름을 찾아서 하나하나 구성해보았다 

 

 {LastCollectionEndTime=Wed Jun 20 16:36:48 KST 2018, UnloadedClassCount=34, MaxHeapSize=536870912, CollectionTime=1858, LastCollectionProcessTime=-150, CollectionCount=20, PeakThreadCount=110, MinHeapSize=4194304, TotalLoadedClassCount=9351, NonHeapMemoryUsage={init=0, committed=80245260, max=-1, used=61832788}, LoadedClassCount=9317, ThreadCount=77, @timestamp=Wed Jun 20 17:18:48 KST 2018, HeapMemoryUsage={init=4194304, committed=218497024, max=536870912, used=90203240}, LastCollectionStartTime=Wed Jun 20 16:36:48 KST 2018, @version=1.0} 

 

 데이터를 1초에 한번씩 쌓아두며 

20개에 한번씩 전송하기로 했다. 

 

 

 

 

 

 

 

 

 

 

 

 

 

 


'오락기 > jmx' 카테고리의 다른 글

jmx-1  (0) 2018.06.21

Java management extention  

 

언제부터인지는 모르겠으나 java5정도에 기본 추가되었다고한다. 

Tomcat에도 기본추가가 된것은 7인가 8이다. 

 

MXBean이라고  

Java.lang.management 패키지에 jvm 상태를 매니지먼트  수있는 인터페이스들이 존재한다. 

 

내용을보게되면 

 

 

 

Java 8 내용이며 찾아보니  버전 달라지면 내용도 달라진다. 5 봐도 다르다. 

 

 

 

이건은 원격으로 확인할 수잇는 강점이 존재한다. 

이러한 기술들로 sun이나 oracle사에선 기본적으로  패키지에 프로그램을 넣어뒀다 

대표적으로 jconsole jvisualvm  이다. 

 

들어가면 cpu 사용량 메모리 사용량  클래스 로드 상태 기타등등 jvm 상태를 볼수있다. 

쓰래드 덤프도 뜰수있다. 

 

이것을  커스텀 하고싶어서 작업을 시작하였다. 

 

해당 데이터를 elasticsearch 넣고 kibana 보여주거나 웹페이즈를 하나 만들어서 보여줄 생각이다. 

 


'오락기 > jmx' 카테고리의 다른 글

jmx-2  (0) 2018.06.21

+ Recent posts