java

java jvm 모니터링

초이짬 2017. 3. 28. 17:49
728x90

****최근에 kafka 를 설치 후 모니터링을 위해 jmx를 운영할려고 하였는데...kafka 설정에 export JMX_PORT=[사용할포트] 만 하면 된다고 설명이 나와있다...jmx는 이렇게 설정을 하면 localhost 에서만 되서 jmxremote 설정을 해당에 맞게 꼭 해줘야 한다.

해당 자세한 부분은 kafka 섹션에 다루겟다.


운영서버의 모니터링을 위해 jdk에 포함된 jstat 와 jmx 를 이용하여
모니터링 하는 방법이다.
모니터링 툴은 jdk에 포함된 jvisualvm 이고 원격지 포트를 이용해 원격으로 해당
jvm 의 상태를 편하게 모니터링 할 수 있다.

jdk 1.7의 경우는 기본으로 포함되 있다.

우선 원격지 서버에서의 설정이 필요하다

jstat 정책 파일을 생성해야 되는데
에디터 도구를 이용하여 아래와 같이 만든다
grant codebase "file:${java.home}/../lib/tools.jar" {
permission java.security.AllPermission;
};

파일명은 편하게 정하고 [파일명].policy
라고 원격지 서버의 jdk bin 디렉토리에 생성해 둔다

그리고 jstatd 를 실행해서 해당 파일을 읽어 주면 되며 명령어는 아래와 같다.

*윈도우의 경우는 관리자모드로 cmd 를 띄우고 해야 된다.(안그럼 원격으로 jmx를 못가져옴)
jstatd -p 1099(오픈할 포트) -J-Djava.security.policy=tools.policy

그리고 netstat -ano 를 이용해서 해당 포트가 올라왓는지 확인한다.

그리고 실제로 띄울 was(톰캣) catalina.bat(리눅스는 catailna.sh) 파일에 옵션값을 지정한다

set CATALINA_OPTS=-Xms512m -Xmx1024m -XX:PermSize=128m -XX:MaxPermSize=256m -XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=E:\dump\kfribase.prof -Dcom.sun.management.jmxremote -Dcom.sun.management.jmxremote.port=8999 -Dcom.sun.management.jmxremote.ssl=false -Dcom.sun.management.jmxremote.authenticate=false -Djava.rmi.server.hostname=[서버ip]

jmx 포트도 지정해 주고 서버를 기동하면 원격지 설정은 마무리 된다.

마무리 하고 해당 포트들이 정상적으로 올라왓는지 그리고 방화벽이랑은 문제가 없는지도 확인 해야 된다.

이제 로컬에서 visualvm을 띄우고(jdk bin디렉토리에 있다. 실행 파일이고 바로 실행하면 된다)

remote 부분에서 add remote 호스트를 추가해서 jstatd 와 jmx를 같이 실행하면 모니터링되는 모습이 나올것이다.





728x90