SlideShare a Scribd company logo
© 2018 NHN FORWARD. All rights reserved.
Java 를 위한,
Java 에 의한 도구들
이상민
모니터링플랫폼개발팀
CONTENTS
1. About
2. jvmtop
3. jvm-tools
4. jcmd
5. jhsdb
6. OpenJDK Tools
7. Conclusion
About
4 / 58
도구의 중요성
상황에 맞는 도구를 사용해야
도구의 구분
• JVM 진단 도구
• 성능 진단 도구
• 부하 도구
5 / 58
도구의 중요성
상황에 맞는 도구를 사용해야
도구의 구분
• JVM 진단 도구
• 실시간 진단 도구
• 사후 진단 도구
• 성능 진단 도구
• 운영도구
• 측정도구
• 부하 도구
• 벤치마크 도구
• 부하 테스트 도구
6 / 58
도구의 구분 – JVM 진단 도구
실시간 진단 도구
 JVM 에 붙어서 실시간으로 진단하는 도구
 실시간 진단 도구: , ,
사후 진단 도구
 JVM 문제 발생시 덤프등을 통하여 분석하는 도구
 쓰레드 덤프 : TDA, Thread Logic
 힙 덤프 : IBM Heap Analyzer, MAT
7 / 58
도구의 구분 – 성능 진단 도구
운영 도구
 서비스의 전반적인 상황을 모니터링 하기 위한 도구
 APM : scouter, pinpoint
측정 도구
 성능 및 기능을 측정하기 위한 도구
 CPU, Memory, Coverage 에 대한 측정
 Profiling : JProfiler, YourKit
 Object Layout :
 CPU 진단 :
8 / 58
도구의 구분 – 부하 도구
벤치마크 도구
 성능을 비교 하기 위한 도구
 method 성능 비교 :
부하 도구
 성능을 측정하기 위한 도구
 부하 테스트 도구 : gatling, jmeter
 concurrent 부하 점검 :
9 / 58
오늘 소개할 도구들
 jvmtop : CPU
 jvm-tools : Universal
 jcmd : Universal
 jhsdb : JVM analyze
 jmh : BMT
 jcstress : Concurrent
 jol : Java Object Layout
jvmtop
11 / 58
jvmtop이란
 https://github.com/patric-r/jvmtop
• 거의 죽은 프로젝트
12 / 58
jvmtop이란
특징
 JVM에서 사용하는 CPU 사용량을 모니터링하는 도구
 기능은 매우 훌륭함
사용 시기
 JVM의 CPU 사용량이 높은 원인을 찾고 싶을 때
• 새로 배포 후에 CPU 사용량이 갑자기 높아 졌을 때
• 순간적으로 CPU 사용량이 급상승 했을 때
단점
 Java 9 이상의 JDK 사용 불가
이 부분은 fork 하여 수정 완료 했으며,
별도의 git repository 에 오픈 예정
13 / 58
jvmtop 실행 예
옵션 없이 실행
• CPU 를 많이 사용하는 프로세스 별로 정렬
$ ./jvmtop.sh
JvmTop 0.8.0 alpha - 09:57:33, x86_64, 8 cpus, Mac OS X 10.12., load avg 9.57
http://code.google.com/p/jvmtop
PID MAIN-CLASS HPCUR HPMAX NHCUR NHMAX CPU GC VM USERNAME #T DL
49993 m.jvmtop.JvmTop 44m 3641m 16m n/a 1.47% 0.00% O8U15 smlee 20
13357 180611-1436.jar 214m 1024m 69m n/a 1.09% 0.00% O8U15 smlee 21
49826 CpuConsumerMain 83m 3641m 20m n/a 0.26% 0.00% O8U73 smlee 9
49827 mdline.Launcher 23m 622m 28m n/a 0.23% 0.00% O8U73 smlee 12
14 / 58
jvmtop 실행 예
<pid> 만 명시하여 실행
• CPU 를 많이 사용하는 쓰레드 별로 정렬
$ ./jvmtop.sh <pid>
JvmTop 0.8.0 alpha - 11:49:52, x86_64, 8 cpus, Mac OS X 10.12., load avg 3.64
http://code.google.com/p/jvmtop
PID 49826: com.nhnent.CpuConsumerMain
ARGS:
VMARGS: -XX:NativeMemoryTracking=detail -Dfile.encoding=UTF-8
VM: Oracle Corporation Java HotSpot(TM) 64-Bit Server VM 1.8.0_73
UP: 0:46m #THR: 11 #THRPEAK: 15 #THRCREATED: 3365 USER: smlee
GC-Time: 0: 0m #GC-Runs: 5888 #TotalLoadedClasses: 2113
CPU: 0.23% GC: 0.00% HEAP: 259m /3641m NONHEAP: 23m / n/a
TID NAME STATE CPU TOTALCPU BLOCKEDBY
3344 RMI TCP Connection(4)-127.0.0. RUNNABLE 1.30% 0.01%
3371 JMX server connection timeout TIMED_WAITING 0.08% 0.00%
3358 JMX server connection timeout TIMED_WAITING 0.00% 0.00%
3345 JMX server connection timeout TIMED_WAITING 0.00% 0.00%
Note: Only top 10 threads (according cpu load) are shown!
15 / 58
jvmtop 실행 예
--profile <pid> 옵션으로 실행
$ ./jvmtop.sh --profile <pid>
JvmTop 0.8.0 alpha - 11:54:18, x86_64, 8 cpus, Mac OS X 10.12., load avg 2.96
http://code.google.com/p/jvmtop
Profiling PID 49826: com.nhnent.CpuConsumerMain
54.58% ( 1.36s) com.nhnent.cpu.InfiniteLoop.busyMethod()
21.51% ( 0.54s) ....fasterxml.jackson.databind.util.ClassUtil.getEnclosi()
8.46% ( 0.21s) ....fasterxml.jackson.databind.util.ClassUtil.hasEnclosi()
5.92% ( 0.15s) ....fasterxml.jackson.databind.cfg.MapperConfig.collectF()
3.29% ( 0.08s) ....fasterxml.jackson.databind.deser.DeserializerCache._()
3.13% ( 0.08s) ....fasterxml.jackson.databind.introspect.AnnotatedField()
3.10% ( 0.08s) ....fasterxml.jackson.databind.util.BeanUtil.okNameForMu()
16 / 58
Java Attach API
 다른 process 에서 JVM 에 접속하여
 상태 정보를 읽거나
 명령을 수행하기 위한 API
관련 코드
 jdk/src/jdk.attach/linux/classes/sun/tools/attach/VirtualMachineImpl.java
 jdk/hotspot/src/share/vm/services/diagnosticCommand.cpp
jvmtop 원리
17 / 58
jvmtop 원리 (Attach API 의 원리)
jvmtop
JVM
1. SIGQUIT 요청
2. AttachListener 쓰레드 시작
3. 요청 전송
5. 응답 전송
4. 처리
jvmtop Demo
jvm-tools
20 / 58
jvm-tools란
 https://github.com/aragozin/jvm-tools
• 살아 있는 프로젝트
21 / 58
jvm-tools란
특징
 기능이 다양함
빌드 절차
 직접 빌드를 해야 사용할 수 있음
 git 에서 클론 후
을 실행하면 sjk/target 디렉터리에 jar 파일이 생성됨
주요 사용 시기
 CPU 사용량이 높은 쓰레드를 확인하고자 할 때
 flame 그래프로 성능을 확인하고자 할 때
$ mvn package -DskipTests
22 / 58
jvm-tools options
 ttop
 hh
 stcap, stcpy, ssa, frame
 mx
 jps
 gc
23 / 58
jvm-tools options
 ttop: thread top
 hh: heap histogram
 stcap, stcpy, ssa, frame: stack info
 mx: mbean
 jps: java processes
 gc: gc log
24 / 58
jvm-tools 실행 예
ttop(thread top) 명령 실행
$ java -jar sjk-0.10.1.jar ttop -p <pid>
20XXXX-XXT15:10:39.580+0900 Process summary
process cpu=70.43%
application cpu=66.58% (user=65.00% sys=1.58%)
other: cpu=3.85%
thread count: 14
GC time=0.23% (young=0.23%, old=0.00%)
heap allocation rate 306mb/s
safe point rate: 2.3 (events/s) avg. safe point pause: 1.16ms
safe point sync time: 0.01% processing time: 0.26% (wallclock time)
[017398] user= 9.95% sys= 0.04% alloc= 49mb/s - pool-4344-thread-3
[017396] user= 4.92% sys= 0.02% alloc= 10b/s - pool-4344-thread-1
[017338] user= 0.38% sys= 0.13% alloc= 281kb/s - RMI TCP Connection(7)-127.0.0.1
[017400] user= 0.02% sys= 0.01% alloc= 3410b/s - JMX server connection timeout 17400
[000001] user= 0.01% sys= 0.01% alloc= 994b/s – main
[017339] user= 0.00% sys= 0.00% alloc= 0b/s - JMX server connection timeout 17339
jvm-tools ttop Demo
26 / 58
$ java -jar sjk-0.10.1.jar stcap -p <pid> -o
dump.std -t 15s
Writing to /develop/javalib/jvmtool/dump.std
Collected 504
Collected 1000
Collected 1506
Collected 2001
…
$ java -jar sjk-0.10.1.jar flame -f dump.std -o
report.html
Input files
./dump.std
52050 samples processed
Generated /develop/javalib/jvmtool/report.html
(195423 bytes)
jvm-tools 실행 예
stcap 명령
• 이 명령을 이용하여 덤프를 생성하면, flame graph를 생성할 수 있음
$ java -jar sjk-0.10.1.jar stcap -p <pid> -o dump.std -t 15s
Writing to /develop/javalib/jvmtool/dump.std
Collected 504
Collected 1000
Collected 1506
Collected 2001
…
$ java -jar sjk-0.10.1.jar flame -f dump.std -o report.html
Input files
./dump.std
52050 samples processed
Generated /develop/javalib/jvmtool/report.html (19543 bytes)
jvm-tools stcap Demo
28 / 58
개요
• 왜 해당 서버 리소스의 상태가 바쁜지에 대한 성능 분석이 필요할 때 사용하는 도구
분석 방법
• X 축: 해당 메소드에서 얼마나 많은 시간을 소비했는지를 나타냄
• Y 축: 스택(stack)의 깊이를 나타냄
• 색상: 설정에 따라 다름
• 유의사항
• X축이 시간의 흐름을 나타내지 않기 때문에 가로 너비를 읽어야 함!
참고 링크
• https://blog.codecentric.de/en/2017/09/jvm-fire-using-flame-graphs-analyse-performance/
• http://www.brendangregg.com/FlameGraphs/cpuflamegraphs.html
참고 – flame 그래프란
jcmd
30 / 58
jcmd란
개요
 JDK에 포함
 Java 8 부터 제공되는 분석 도구
 Attach API 사용
 jvm-tools 와 비슷하지만 다른 도구
 기존 Java 기본 도구들을 통합한 형태
 jps, jmap, jstack, jinfo 등이 포함되어 있음
지금까지 불가능 했던 것들을 가능하도록 만들어 주는 도구!
31 / 58
기본 사용법
 jcmd
 jcmd <pid> help
 jcmd <pid> GC.class_stats
 jcmd <pid> help GC.class_stats
jcmd basic options
32 / 58
기본 사용법
 jcmd: Java 프로세스 목록
 jcmd <pid> help: 사용 가능한 명령어 목록
 jcmd <pid> GC.class_stats: GC.class_stats 실행
 jcmd <pid> help GC.class_stats: GC.class_stats의 도움말
jcmd basic options
jcmd popular commands
많이 사용하는 옵션들
 jcmd <pid> VM.version
 jcmd <pid> VM.system_properties
 jcmd <pid> VM.flags
 jcmd <pid> GC.class_histogram
 jcmd <pid> GC.heap_dump filename=dump.hprof
 jcmd <pid> GC.class_stats
 jcmd <pid> PerfCounter.print
 jcmd <pid> Thread.print
jcmd popular commands
많이 사용하는 옵션들
 jcmd <pid> VM.version : JVM 버전 출력
 jcmd <pid> VM.system_properties : 시스템 속성값 출력
 jcmd <pid> VM.flags : VM 에 수동/자동으로 설정된 옵션 목록 출력
 jcmd <pid> GC.class_histogram : 메모리 점유 히스토그램 표. (jmap –histo <pid>와 동일)
 jcmd <pid> GC.heap_dump filename=dump.hprof : 힙 덤프 생성 (jmap 의 힙덤프 생성과 동일)
 jcmd <pid> GC.class_stats : Java 클래스의 메타 데이터 통계
 jcmd <pid> PerfCounter.print : 성능 카운터 값 출력
 jcmd <pid> Thread.print : 쓰레드 덤프 출력
https://dzone.com/articles/how-to-read-a-thread-dump 참고
jcmd Demo
36 / 58
VM.log 개요
 지금까지는 gc log 를 추가하기 위해서는 JVM 을 재시작 해야만 했음
 jcmd 를 사용하면 실행중인 JVM 의 gc log 를 남기도록 할 수 있음
VM.log 를 이용하여 gc log 를 남기는 법
 jcmd <pid> VM.log output="file=gc.log" what="gc=debug" decorators="time,level”
 <pid> 프로세스에 대해서
 output=“file=gc.log”: gc.log라는 파일을 프로세스가 시작된 위치에 저장하고
 what="gc=debug”: gc의 디버그 레벨로 출력하며
 decorators="time,level”: 시간과 레벨 데코레이터를 사용한다.
jcmd hidden function – VM.log
37 / 58
VM.log options
 output
 output_options
 what
 decorators
 disable
 list
 rotate
jcmd hidden function – VM.log
38 / 58
VM.log options
 output: 파일 이름 등을 지정
 output_options: filecount (파일 개수), filesize (파일 크기)등 지정
 what: 로그 레벨 지정 (trace, debug, info, warning, error)
 decorators: 추가 항목들 지정
 disable: 로깅 끄기
 list: 로깅 목록들
 rotate: 파일 로테이트 방식
참고 사항
 로그 레벨, 로그 데코레이터의 종류, 로그 태그의 종류들은 list 옵션 실행 시 출력됨
jcmd hidden function – VM.log
39 / 58
VM.log 사용시 주의사항
 주의 사항
 output 파일의 이름을 지정하면, JVM 이 시작한 위치에 로그가 쌓이기 때문에 절대 경로로 지정하는 것을 권장
 시작 위치 확인 : pwdx <pid> (linux only)
 아무 생각없이 시작하는 명령만 실행하면 로깅하는 작업이 계속 추가될 수 있으므로,
명령으로 현재 로깅 중인 내역들을 확인해 봐야 함
관련 내용
 http://openjdk.java.net/jeps/158
jcmd hidden function – VM.log
$ jcmd <pid> VM.log list
40 / 58
jcmd hidden function – VM.log
VM.log 실행 스크립트 예
#!/bin/bash
pid=$1
echo "PID="$pid
jcmd $pid VM.log output="file=/develop/nhnforward/jcmd/gc.log" what="gc=debug" decorators="time,level"
sleep 3
cat gc.log
jcmd $pid VM.log list
jcmd $pid VM.log output="#2" what="all=off"
41 / 58
jcmd hidden function – VM.log
VM.log 실행 스크립트 예
#!/bin/bash
pid=$1
echo "PID="$pid
jcmd $pid VM.log output="file=/develop/nhnforward/jcmd/gc.log" what="gc=debug" decorators="time,level"
sleep 3
cat gc.log
jcmd $pid VM.log list
jcmd $pid VM.log output="#2" what="all=off"
logging 시작
VM 의 로깅 목록 출력
VM 의 두번째에 있는 GC 로깅 중지
jcmd VM.log Demo
43 / 58
NMT 개요
 NMT == Native Memory Tracking
 HotSpot JVM 의 내부 메모리 사용량을 추적하는 기능
NMT 사용법
1. JVM 시작시 다음의 옵션을 추가
 -XX:NativeMemoryTracking=summary 혹은 -XX:NativeMemoryTracking=detail
2. baseline 지정
 jcmd <pid> VM.native_memory baseline
3. diff 로 확인
 jcmd <pid> VM.native_memory detail.diff
jcmd hidden function – NMT
44 / 58
참고 링크
 https://docs.oracle.com/javase/8/docs/technotes/guides/vm/nmt-8.html
 https://docs.oracle.com/javase/8/docs/technotes/guides/troubleshoot/tooldescr007.html
jcmd hidden function – NMT
jhsdb
46 / 58
jhsdb 개요
 Java 9 부터 JDK에 포함되어 제공되는 분석 도구

 용도
 core 덤프 파일
 crash 된 JVM에 붙어서 분석할 때 사용
 주의 사항
 만약 실행 중인 애플리케이션에 이 도구로 붙을 경우 JVM은 정지됨
 core 덤프 파일은 gcore 명령어로 core 덤프를 생성할 수 있으나,
Heap 메모리 크기 대비 몇 십 배의 덤프 파일이 생성됨.
따라서 문제가 있을 때만 사용할 것
 https://docs.oracle.com/javase/9/tools/jhsdb.htm
jhsdb란
47 / 58
jhsdb 사용법
 sudo jhsdb [option] [--pid pid | --exe executable --core coredump]
 가능하다면 root 권한으로 실행하는 것을 권장함
 JVM 에 못 붙을 수도 있음
 보다 자세한 설명은 아래 링크 참고
http://marxsoftware.blogspot.com/2017/06/jhsdb-jdk9.html
jhsdb usage
48 / 58
jhsdb 옵션
 jhsdb clhsdb
 jhsdb debugd
 jhsdb hsdb
jhsdb options
49 / 58
jhsdb 옵션
 jhsdb clhsdb: 인터렉티브 디버거
 jhsdb debugd: 원격 디버그 서버 기동
 jhsdb hsdb: 인터렉티브 GUI 디버거
jhsdb options
50 / 58
jhsdb hsdb GUI 예
jhsdb Demo
52 / 58
jhsdb 추가 옵션들
 jhsdb jstack
 jhsdb jmap
 jhsdb jinfo
 jhsdb jsnap
jhsdb other options
OpenJDK Tools
54 / 58
http://openjdk.java.net/projects/code-tools/
OpenJDK tools
55 / 58
JMH 개요
 Java Microbenchmark Harness
 http://openjdk.java.net/projects/code-tools/jmh/
 마이크로 벤치마크를 수행하기 위한 도구
 두개 이상의 메소드 성능을 비교
JMH를 사용해야 하는 이유
 (초기 진입장벽이 조금 있긴 하지만 적응이 되면) 간단하게 벤치마크가 가능
 JVM 최적화를 감안하여 워밍업 기능 제공
JMH
56 / 58
JMH
JMH 주요 벤치마크 모드
 응답 시간 관련
• Mode.AverageTime
• Mode.SampleTime
• Mode.SingleShotTime
 처리량
• Mode.Throughput
 전체
• Mode.All
참고 링크
 샘플 코드
• http://hg.openjdk.java.net/code-tools/jmh/file/tip/jmh-samples/src/main/java/org/openjdk/jmh/samples/
57 / 58
jcstress
jcstress 개요
 Java Concurrency Stress tests
 https://wiki.openjdk.java.net/display/CodeTools/jcstress
참고 링크
 소개 자료
• https://shipilev.net/talks/jvmls-July2013-jcstress.pdf
 샘플 코드
• http://hg.openjdk.java.net/code-tools/jcstress/file/tip/jcstress-samples/src/main/java/org/openjdk/jcstress/samples
58 / 58
jol
jol 개요
 Java Object Layout
 http://openjdk.java.net/projects/code-tools/jol/
jol 주요 기능
 객체 내부 정보
• 필드 레이아웃, 헤더 정보, 필드 값, 공간 손실 크기 (data on alignment losses)
 객체 외부 정보
• 인스턴스에서 접근 가능한 객체들, 주소, 접근 가능성 그래프를 통한 경로 등
59 / 58
jol usage example
$ java -jar jol-cli/target/jol-cli.jar internals java.util.HashMap
Running 64-bit HotSpot VM.
Using compressed oop with 3-bit shift.
Using compressed klass with 3-bit shift.
Objects are 8 bytes aligned.
Field sizes by type: 4, 1, 1, 2, 2, 4, 4, 8, 8 [bytes]
Array element sizes: 4, 1, 1, 2, 2, 4, 4, 8, 8 [bytes]
java.util.HashMap object internals:
OFFSET SIZE TYPE DESCRIPTION VALUE
0 4 (object header) 05 00 00 00 (0000 0101 0000 0000 0000 0000 0000 0000)
4 4 (object header) 00 00 00 00 (0000 0000 0000 0000 0000 0000 0000 0000)
8 4 (object header) 8c 3b 00 f8 (1000 1100 0011 1011 0000 0000 1111 1000)
12 4 Set AbstractMap.keySet null
16 4 Collection AbstractMap.values null
20 4 int HashMap.size 0
24 4 int HashMap.modCount 0
28 4 int HashMap.threshold 0
32 4 float HashMap.loadFactor 0.75
36 4 Node[] HashMap.table null
40 4 Set HashMap.entrySet null
44 4 (loss due to the next object alignment)
Instance size: 48 bytes (reported by Instrumentation API)
Space losses: 0 bytes internal + 4 bytes external = 4 bytes total
CONCLUSION
61 / 58
상황에 맞는 적절한 도구를 선택하는 방법을 아는 것이 가장 중요
 모든 문제를 도구만으로 해결하려고 하거나
 도구 없이 로그(log)만으로 해결하려고 하면
안 됨
도구는 도구일 뿐
62 / 58
명령어와 도구는 눈으로 보는 것이 아니라,
 직접 실행해보고,
 결과를 확인하고,
 그 내용을 분석하는 연습을 통해서만,
 내 것으로 만들 수 있다.
그래야 장애 상황에서 침착하게 대응이 가능
한번씩은 실행해 볼 것을 권장
63 / 58
내일 출근해서 꼭 직접 확인해 봐야 하는 도구
• jvmtop
• jcmd
한번씩은 실행해 볼 것을 권장
© 2018 NHN FORWARD. All rights reserved.
Q&AQ&A
© 2018 NHN FORWARD. All rights reserved.
THANK YOUTHANK YOU

More Related Content

What's hot

양승명, 다음 세대 크로스플랫폼 MMORPG 아키텍처, NDC2012
양승명, 다음 세대 크로스플랫폼 MMORPG 아키텍처, NDC2012양승명, 다음 세대 크로스플랫폼 MMORPG 아키텍처, NDC2012
양승명, 다음 세대 크로스플랫폼 MMORPG 아키텍처, NDC2012devCAT Studio, NEXON
 
Micro Service Architecture의 이해
Micro Service Architecture의 이해Micro Service Architecture의 이해
Micro Service Architecture의 이해
Terry Cho
 
mongodb와 mysql의 CRUD 연산의 성능 비교
mongodb와 mysql의 CRUD 연산의 성능 비교mongodb와 mysql의 CRUD 연산의 성능 비교
mongodb와 mysql의 CRUD 연산의 성능 비교Woo Yeong Choi
 
안정적인 서비스 운영 2014.03
안정적인 서비스 운영   2014.03안정적인 서비스 운영   2014.03
안정적인 서비스 운영 2014.03
Changyol BAEK
 
Amazon Redshift로 데이터웨어하우스(DW) 구축하기
Amazon Redshift로 데이터웨어하우스(DW) 구축하기Amazon Redshift로 데이터웨어하우스(DW) 구축하기
Amazon Redshift로 데이터웨어하우스(DW) 구축하기
Amazon Web Services Korea
 
Configuring global infrastructure in terraform
Configuring global infrastructure in terraformConfiguring global infrastructure in terraform
Configuring global infrastructure in terraform
SANGGI CHOI
 
4. 대용량 아키텍쳐 설계 패턴
4. 대용량 아키텍쳐 설계 패턴4. 대용량 아키텍쳐 설계 패턴
4. 대용량 아키텍쳐 설계 패턴
Terry Cho
 
파이썬 생존 안내서 (자막)
파이썬 생존 안내서 (자막)파이썬 생존 안내서 (자막)
파이썬 생존 안내서 (자막)
Heungsub Lee
 
1. 아키텍쳐 설계 프로세스
1. 아키텍쳐 설계 프로세스1. 아키텍쳐 설계 프로세스
1. 아키텍쳐 설계 프로세스
Terry Cho
 
kubernetes를 부탁해~ Prometheus 기반 Monitoring 구축&활용기
kubernetes를 부탁해~ Prometheus 기반 Monitoring 구축&활용기kubernetes를 부탁해~ Prometheus 기반 Monitoring 구축&활용기
kubernetes를 부탁해~ Prometheus 기반 Monitoring 구축&활용기
Jinsu Moon
 
Sonatype nexus 로 docker registry 관리하기
Sonatype nexus 로 docker registry 관리하기Sonatype nexus 로 docker registry 관리하기
Sonatype nexus 로 docker registry 관리하기
KwangSeob Jeong
 
AWS 기반 대규모 트래픽 견디기 - 장준엽 (구로디지털 모임) :: AWS Community Day 2017
AWS 기반 대규모 트래픽 견디기 - 장준엽 (구로디지털 모임) :: AWS Community Day 2017AWS 기반 대규모 트래픽 견디기 - 장준엽 (구로디지털 모임) :: AWS Community Day 2017
AWS 기반 대규모 트래픽 견디기 - 장준엽 (구로디지털 모임) :: AWS Community Day 2017
AWSKRUG - AWS한국사용자모임
 
AWS Lambda 내부 동작 방식 및 활용 방법 자세히 살펴 보기 - 김일호 솔루션즈 아키텍트 매니저, AWS :: AWS Summit ...
AWS Lambda 내부 동작 방식 및 활용 방법 자세히 살펴 보기 - 김일호 솔루션즈 아키텍트 매니저, AWS :: AWS Summit ...AWS Lambda 내부 동작 방식 및 활용 방법 자세히 살펴 보기 - 김일호 솔루션즈 아키텍트 매니저, AWS :: AWS Summit ...
AWS Lambda 내부 동작 방식 및 활용 방법 자세히 살펴 보기 - 김일호 솔루션즈 아키텍트 매니저, AWS :: AWS Summit ...
Amazon Web Services Korea
 
Intro to Github Actions @likecoin
Intro to Github Actions @likecoinIntro to Github Actions @likecoin
Intro to Github Actions @likecoin
William Chong
 
Introduction to DevSecOps on AWS
Introduction to DevSecOps on AWSIntroduction to DevSecOps on AWS
Introduction to DevSecOps on AWS
Amazon Web Services
 
AWS로 사용자 천만 명 서비스 만들기 (윤석찬)- 클라우드 태권 2015
AWS로 사용자 천만 명 서비스 만들기 (윤석찬)- 클라우드 태권 2015 AWS로 사용자 천만 명 서비스 만들기 (윤석찬)- 클라우드 태권 2015
AWS로 사용자 천만 명 서비스 만들기 (윤석찬)- 클라우드 태권 2015
Amazon Web Services Korea
 
Angular 4 and TypeScript
Angular 4 and TypeScriptAngular 4 and TypeScript
Angular 4 and TypeScript
Ahmed El-Kady
 
Angular Best Practices - Perfomatix
Angular Best Practices - PerfomatixAngular Best Practices - Perfomatix
Angular Best Practices - Perfomatix
Perfomatix Solutions
 
대용량 분산 아키텍쳐 설계 #5. rest
대용량 분산 아키텍쳐 설계 #5. rest대용량 분산 아키텍쳐 설계 #5. rest
대용량 분산 아키텍쳐 설계 #5. rest
Terry Cho
 
[MLOps KR 행사] MLOps 춘추 전국 시대 정리(210605)
[MLOps KR 행사] MLOps 춘추 전국 시대 정리(210605)[MLOps KR 행사] MLOps 춘추 전국 시대 정리(210605)
[MLOps KR 행사] MLOps 춘추 전국 시대 정리(210605)
Seongyun Byeon
 

What's hot (20)

양승명, 다음 세대 크로스플랫폼 MMORPG 아키텍처, NDC2012
양승명, 다음 세대 크로스플랫폼 MMORPG 아키텍처, NDC2012양승명, 다음 세대 크로스플랫폼 MMORPG 아키텍처, NDC2012
양승명, 다음 세대 크로스플랫폼 MMORPG 아키텍처, NDC2012
 
Micro Service Architecture의 이해
Micro Service Architecture의 이해Micro Service Architecture의 이해
Micro Service Architecture의 이해
 
mongodb와 mysql의 CRUD 연산의 성능 비교
mongodb와 mysql의 CRUD 연산의 성능 비교mongodb와 mysql의 CRUD 연산의 성능 비교
mongodb와 mysql의 CRUD 연산의 성능 비교
 
안정적인 서비스 운영 2014.03
안정적인 서비스 운영   2014.03안정적인 서비스 운영   2014.03
안정적인 서비스 운영 2014.03
 
Amazon Redshift로 데이터웨어하우스(DW) 구축하기
Amazon Redshift로 데이터웨어하우스(DW) 구축하기Amazon Redshift로 데이터웨어하우스(DW) 구축하기
Amazon Redshift로 데이터웨어하우스(DW) 구축하기
 
Configuring global infrastructure in terraform
Configuring global infrastructure in terraformConfiguring global infrastructure in terraform
Configuring global infrastructure in terraform
 
4. 대용량 아키텍쳐 설계 패턴
4. 대용량 아키텍쳐 설계 패턴4. 대용량 아키텍쳐 설계 패턴
4. 대용량 아키텍쳐 설계 패턴
 
파이썬 생존 안내서 (자막)
파이썬 생존 안내서 (자막)파이썬 생존 안내서 (자막)
파이썬 생존 안내서 (자막)
 
1. 아키텍쳐 설계 프로세스
1. 아키텍쳐 설계 프로세스1. 아키텍쳐 설계 프로세스
1. 아키텍쳐 설계 프로세스
 
kubernetes를 부탁해~ Prometheus 기반 Monitoring 구축&활용기
kubernetes를 부탁해~ Prometheus 기반 Monitoring 구축&활용기kubernetes를 부탁해~ Prometheus 기반 Monitoring 구축&활용기
kubernetes를 부탁해~ Prometheus 기반 Monitoring 구축&활용기
 
Sonatype nexus 로 docker registry 관리하기
Sonatype nexus 로 docker registry 관리하기Sonatype nexus 로 docker registry 관리하기
Sonatype nexus 로 docker registry 관리하기
 
AWS 기반 대규모 트래픽 견디기 - 장준엽 (구로디지털 모임) :: AWS Community Day 2017
AWS 기반 대규모 트래픽 견디기 - 장준엽 (구로디지털 모임) :: AWS Community Day 2017AWS 기반 대규모 트래픽 견디기 - 장준엽 (구로디지털 모임) :: AWS Community Day 2017
AWS 기반 대규모 트래픽 견디기 - 장준엽 (구로디지털 모임) :: AWS Community Day 2017
 
AWS Lambda 내부 동작 방식 및 활용 방법 자세히 살펴 보기 - 김일호 솔루션즈 아키텍트 매니저, AWS :: AWS Summit ...
AWS Lambda 내부 동작 방식 및 활용 방법 자세히 살펴 보기 - 김일호 솔루션즈 아키텍트 매니저, AWS :: AWS Summit ...AWS Lambda 내부 동작 방식 및 활용 방법 자세히 살펴 보기 - 김일호 솔루션즈 아키텍트 매니저, AWS :: AWS Summit ...
AWS Lambda 내부 동작 방식 및 활용 방법 자세히 살펴 보기 - 김일호 솔루션즈 아키텍트 매니저, AWS :: AWS Summit ...
 
Intro to Github Actions @likecoin
Intro to Github Actions @likecoinIntro to Github Actions @likecoin
Intro to Github Actions @likecoin
 
Introduction to DevSecOps on AWS
Introduction to DevSecOps on AWSIntroduction to DevSecOps on AWS
Introduction to DevSecOps on AWS
 
AWS로 사용자 천만 명 서비스 만들기 (윤석찬)- 클라우드 태권 2015
AWS로 사용자 천만 명 서비스 만들기 (윤석찬)- 클라우드 태권 2015 AWS로 사용자 천만 명 서비스 만들기 (윤석찬)- 클라우드 태권 2015
AWS로 사용자 천만 명 서비스 만들기 (윤석찬)- 클라우드 태권 2015
 
Angular 4 and TypeScript
Angular 4 and TypeScriptAngular 4 and TypeScript
Angular 4 and TypeScript
 
Angular Best Practices - Perfomatix
Angular Best Practices - PerfomatixAngular Best Practices - Perfomatix
Angular Best Practices - Perfomatix
 
대용량 분산 아키텍쳐 설계 #5. rest
대용량 분산 아키텍쳐 설계 #5. rest대용량 분산 아키텍쳐 설계 #5. rest
대용량 분산 아키텍쳐 설계 #5. rest
 
[MLOps KR 행사] MLOps 춘추 전국 시대 정리(210605)
[MLOps KR 행사] MLOps 춘추 전국 시대 정리(210605)[MLOps KR 행사] MLOps 춘추 전국 시대 정리(210605)
[MLOps KR 행사] MLOps 춘추 전국 시대 정리(210605)
 

Similar to [2018] Java를 위한, Java에 의한 도구들

[오픈소스컨설팅]Scouter 설치 및 사용가이드(JBoss)
[오픈소스컨설팅]Scouter 설치 및 사용가이드(JBoss)[오픈소스컨설팅]Scouter 설치 및 사용가이드(JBoss)
[오픈소스컨설팅]Scouter 설치 및 사용가이드(JBoss)
Ji-Woong Choi
 
도커(Docker) 메트릭스 & 로그 수집
도커(Docker) 메트릭스 & 로그 수집도커(Docker) 메트릭스 & 로그 수집
도커(Docker) 메트릭스 & 로그 수집
Daegwon Kim
 
Open source apm scouter를 통한 관제 관리 jadecross 정환열 수석
Open source apm scouter를 통한 관제  관리 jadecross 정환열 수석Open source apm scouter를 통한 관제  관리 jadecross 정환열 수석
Open source apm scouter를 통한 관제 관리 jadecross 정환열 수석
uEngine Solutions
 
[오픈소스컨설팅] 스카우터 사용자 가이드 2020
[오픈소스컨설팅] 스카우터 사용자 가이드 2020[오픈소스컨설팅] 스카우터 사용자 가이드 2020
[오픈소스컨설팅] 스카우터 사용자 가이드 2020
Ji-Woong Choi
 
Hyperledger fabric practice(pdf)
Hyperledger fabric practice(pdf)Hyperledger fabric practice(pdf)
Hyperledger fabric practice(pdf)
wonyong hwang
 
안드로이드 플랫폼 설명
안드로이드 플랫폼 설명안드로이드 플랫폼 설명
안드로이드 플랫폼 설명
Peter YoungSik Yun
 
[오픈소스컨설팅]Java Performance Tuning
[오픈소스컨설팅]Java Performance Tuning[오픈소스컨설팅]Java Performance Tuning
[오픈소스컨설팅]Java Performance Tuning
Ji-Woong Choi
 
톰캣 #10-모니터링
톰캣 #10-모니터링톰캣 #10-모니터링
톰캣 #10-모니터링
GyuSeok Lee
 
실무로 배우는 시스템 성능 최적화 8부 - 1,2,3장
실무로 배우는 시스템 성능 최적화 8부 - 1,2,3장실무로 배우는 시스템 성능 최적화 8부 - 1,2,3장
실무로 배우는 시스템 성능 최적화 8부 - 1,2,3장
Sunggon Song
 
Java Virtual Machine, Call stack, Java Byte Code
Java Virtual Machine, Call stack, Java Byte CodeJava Virtual Machine, Call stack, Java Byte Code
Java Virtual Machine, Call stack, Java Byte Code
Javajigi Jaesung
 
[232] 성능어디까지쥐어짜봤니 송태웅
[232] 성능어디까지쥐어짜봤니 송태웅[232] 성능어디까지쥐어짜봤니 송태웅
[232] 성능어디까지쥐어짜봤니 송태웅
NAVER D2
 
[NDC2015] 언제 어디서나 프로파일링 가능한 코드네임 JYP 작성기 - 라이브 게임 배포 후에도 프로파일링 하기
[NDC2015] 언제 어디서나 프로파일링 가능한 코드네임 JYP 작성기 - 라이브 게임 배포 후에도 프로파일링 하기[NDC2015] 언제 어디서나 프로파일링 가능한 코드네임 JYP 작성기 - 라이브 게임 배포 후에도 프로파일링 하기
[NDC2015] 언제 어디서나 프로파일링 가능한 코드네임 JYP 작성기 - 라이브 게임 배포 후에도 프로파일링 하기
Jaeseung Ha
 
[오픈소스컨설팅]Performance Tuning How To
[오픈소스컨설팅]Performance Tuning How To[오픈소스컨설팅]Performance Tuning How To
[오픈소스컨설팅]Performance Tuning How To
Ji-Woong Choi
 
20170908 tech day-9th-재미없는 java runtime process 디버그-김성중
20170908 tech day-9th-재미없는 java runtime process 디버그-김성중20170908 tech day-9th-재미없는 java runtime process 디버그-김성중
20170908 tech day-9th-재미없는 java runtime process 디버그-김성중
ymtech
 
JBoss RHQ와 Byteman을 이용한 오픈소스 자바 애플리케이션 모니터링
JBoss RHQ와 Byteman을 이용한 오픈소스 자바 애플리케이션 모니터링JBoss RHQ와 Byteman을 이용한 오픈소스 자바 애플리케이션 모니터링
JBoss RHQ와 Byteman을 이용한 오픈소스 자바 애플리케이션 모니터링
Ted Won
 
망고210 android fastboot nand write 방법
망고210 android fastboot nand write 방법망고210 android fastboot nand write 방법
망고210 android fastboot nand write 방법
종인 전
 
Relationship between firmware and module(drvier)
Relationship between firmware and module(drvier)Relationship between firmware and module(drvier)
Relationship between firmware and module(drvier)
Jaeock Shim
 
클라우드 환경에서 알아야할 성능 이야기
클라우드 환경에서 알아야할 성능 이야기클라우드 환경에서 알아야할 성능 이야기
클라우드 환경에서 알아야할 성능 이야기
YoungSu Son
 
KAFKA 3.1.0.pdf
KAFKA 3.1.0.pdfKAFKA 3.1.0.pdf
KAFKA 3.1.0.pdf
wonyong hwang
 
컵드론 멀티콥터 펌웨어 분석 2015. 3.28.
컵드론 멀티콥터 펌웨어 분석 2015. 3.28.컵드론 멀티콥터 펌웨어 분석 2015. 3.28.
컵드론 멀티콥터 펌웨어 분석 2015. 3.28.
chcbaram
 

Similar to [2018] Java를 위한, Java에 의한 도구들 (20)

[오픈소스컨설팅]Scouter 설치 및 사용가이드(JBoss)
[오픈소스컨설팅]Scouter 설치 및 사용가이드(JBoss)[오픈소스컨설팅]Scouter 설치 및 사용가이드(JBoss)
[오픈소스컨설팅]Scouter 설치 및 사용가이드(JBoss)
 
도커(Docker) 메트릭스 & 로그 수집
도커(Docker) 메트릭스 & 로그 수집도커(Docker) 메트릭스 & 로그 수집
도커(Docker) 메트릭스 & 로그 수집
 
Open source apm scouter를 통한 관제 관리 jadecross 정환열 수석
Open source apm scouter를 통한 관제  관리 jadecross 정환열 수석Open source apm scouter를 통한 관제  관리 jadecross 정환열 수석
Open source apm scouter를 통한 관제 관리 jadecross 정환열 수석
 
[오픈소스컨설팅] 스카우터 사용자 가이드 2020
[오픈소스컨설팅] 스카우터 사용자 가이드 2020[오픈소스컨설팅] 스카우터 사용자 가이드 2020
[오픈소스컨설팅] 스카우터 사용자 가이드 2020
 
Hyperledger fabric practice(pdf)
Hyperledger fabric practice(pdf)Hyperledger fabric practice(pdf)
Hyperledger fabric practice(pdf)
 
안드로이드 플랫폼 설명
안드로이드 플랫폼 설명안드로이드 플랫폼 설명
안드로이드 플랫폼 설명
 
[오픈소스컨설팅]Java Performance Tuning
[오픈소스컨설팅]Java Performance Tuning[오픈소스컨설팅]Java Performance Tuning
[오픈소스컨설팅]Java Performance Tuning
 
톰캣 #10-모니터링
톰캣 #10-모니터링톰캣 #10-모니터링
톰캣 #10-모니터링
 
실무로 배우는 시스템 성능 최적화 8부 - 1,2,3장
실무로 배우는 시스템 성능 최적화 8부 - 1,2,3장실무로 배우는 시스템 성능 최적화 8부 - 1,2,3장
실무로 배우는 시스템 성능 최적화 8부 - 1,2,3장
 
Java Virtual Machine, Call stack, Java Byte Code
Java Virtual Machine, Call stack, Java Byte CodeJava Virtual Machine, Call stack, Java Byte Code
Java Virtual Machine, Call stack, Java Byte Code
 
[232] 성능어디까지쥐어짜봤니 송태웅
[232] 성능어디까지쥐어짜봤니 송태웅[232] 성능어디까지쥐어짜봤니 송태웅
[232] 성능어디까지쥐어짜봤니 송태웅
 
[NDC2015] 언제 어디서나 프로파일링 가능한 코드네임 JYP 작성기 - 라이브 게임 배포 후에도 프로파일링 하기
[NDC2015] 언제 어디서나 프로파일링 가능한 코드네임 JYP 작성기 - 라이브 게임 배포 후에도 프로파일링 하기[NDC2015] 언제 어디서나 프로파일링 가능한 코드네임 JYP 작성기 - 라이브 게임 배포 후에도 프로파일링 하기
[NDC2015] 언제 어디서나 프로파일링 가능한 코드네임 JYP 작성기 - 라이브 게임 배포 후에도 프로파일링 하기
 
[오픈소스컨설팅]Performance Tuning How To
[오픈소스컨설팅]Performance Tuning How To[오픈소스컨설팅]Performance Tuning How To
[오픈소스컨설팅]Performance Tuning How To
 
20170908 tech day-9th-재미없는 java runtime process 디버그-김성중
20170908 tech day-9th-재미없는 java runtime process 디버그-김성중20170908 tech day-9th-재미없는 java runtime process 디버그-김성중
20170908 tech day-9th-재미없는 java runtime process 디버그-김성중
 
JBoss RHQ와 Byteman을 이용한 오픈소스 자바 애플리케이션 모니터링
JBoss RHQ와 Byteman을 이용한 오픈소스 자바 애플리케이션 모니터링JBoss RHQ와 Byteman을 이용한 오픈소스 자바 애플리케이션 모니터링
JBoss RHQ와 Byteman을 이용한 오픈소스 자바 애플리케이션 모니터링
 
망고210 android fastboot nand write 방법
망고210 android fastboot nand write 방법망고210 android fastboot nand write 방법
망고210 android fastboot nand write 방법
 
Relationship between firmware and module(drvier)
Relationship between firmware and module(drvier)Relationship between firmware and module(drvier)
Relationship between firmware and module(drvier)
 
클라우드 환경에서 알아야할 성능 이야기
클라우드 환경에서 알아야할 성능 이야기클라우드 환경에서 알아야할 성능 이야기
클라우드 환경에서 알아야할 성능 이야기
 
KAFKA 3.1.0.pdf
KAFKA 3.1.0.pdfKAFKA 3.1.0.pdf
KAFKA 3.1.0.pdf
 
컵드론 멀티콥터 펌웨어 분석 2015. 3.28.
컵드론 멀티콥터 펌웨어 분석 2015. 3.28.컵드론 멀티콥터 펌웨어 분석 2015. 3.28.
컵드론 멀티콥터 펌웨어 분석 2015. 3.28.
 

More from NHN FORWARD

[2019] 패션 시소러스 기반 상품 특징 분석 시스템
[2019] 패션 시소러스 기반 상품 특징 분석 시스템[2019] 패션 시소러스 기반 상품 특징 분석 시스템
[2019] 패션 시소러스 기반 상품 특징 분석 시스템
NHN FORWARD
 
[2019] 스몰 스텝: Android 렛츠기릿!
[2019] 스몰 스텝: Android 렛츠기릿![2019] 스몰 스텝: Android 렛츠기릿!
[2019] 스몰 스텝: Android 렛츠기릿!
NHN FORWARD
 
딥러닝, 야 너도 할 수 있어(feat. PyTorch)
딥러닝, 야 너도 할 수 있어(feat. PyTorch)딥러닝, 야 너도 할 수 있어(feat. PyTorch)
딥러닝, 야 너도 할 수 있어(feat. PyTorch)
NHN FORWARD
 
NHN 베이스캠프: 신입사원들은 무엇을 배우나요?
NHN 베이스캠프: 신입사원들은 무엇을 배우나요?NHN 베이스캠프: 신입사원들은 무엇을 배우나요?
NHN 베이스캠프: 신입사원들은 무엇을 배우나요?
NHN FORWARD
 
[2019] GIF 스티커 만들기: 스파인 2D를 이용한 움직이는 스티커 만들기
[2019] GIF 스티커 만들기: 스파인 2D를 이용한 움직이는 스티커 만들기[2019] GIF 스티커 만들기: 스파인 2D를 이용한 움직이는 스티커 만들기
[2019] GIF 스티커 만들기: 스파인 2D를 이용한 움직이는 스티커 만들기
NHN FORWARD
 
[2019] 전기 먹는 하마의 다이어트 성공기 클라우드 데이터 센터의 에너지 절감 노력과 사례
[2019] 전기 먹는 하마의 다이어트 성공기   클라우드 데이터 센터의 에너지 절감 노력과 사례[2019] 전기 먹는 하마의 다이어트 성공기   클라우드 데이터 센터의 에너지 절감 노력과 사례
[2019] 전기 먹는 하마의 다이어트 성공기 클라우드 데이터 센터의 에너지 절감 노력과 사례
NHN FORWARD
 
[2019] 스몰 스텝: Dooray!를 이용한 업무 효율화/자동화(고객문의 시스템 구축)
[2019] 스몰 스텝: Dooray!를 이용한 업무 효율화/자동화(고객문의 시스템 구축)[2019] 스몰 스텝: Dooray!를 이용한 업무 효율화/자동화(고객문의 시스템 구축)
[2019] 스몰 스텝: Dooray!를 이용한 업무 효율화/자동화(고객문의 시스템 구축)
NHN FORWARD
 
[2019] 아직도 돈 주고 DB 쓰나요? for Developer
[2019] 아직도 돈 주고 DB 쓰나요? for Developer[2019] 아직도 돈 주고 DB 쓰나요? for Developer
[2019] 아직도 돈 주고 DB 쓰나요? for Developer
NHN FORWARD
 
[2019] 아직도 돈 주고 DB 쓰나요 for DBA
[2019] 아직도 돈 주고 DB 쓰나요 for DBA[2019] 아직도 돈 주고 DB 쓰나요 for DBA
[2019] 아직도 돈 주고 DB 쓰나요 for DBA
NHN FORWARD
 
[2019] 비주얼 브랜딩: Basic system
[2019] 비주얼 브랜딩: Basic system[2019] 비주얼 브랜딩: Basic system
[2019] 비주얼 브랜딩: Basic system
NHN FORWARD
 
[2019] PAYCO 매거진 서버 Kotlin 적용기
[2019] PAYCO 매거진 서버 Kotlin 적용기[2019] PAYCO 매거진 서버 Kotlin 적용기
[2019] PAYCO 매거진 서버 Kotlin 적용기
NHN FORWARD
 
[2019] 벅스 5.0 (feat. Kotlin, Jetpack)
[2019] 벅스 5.0 (feat. Kotlin, Jetpack)[2019] 벅스 5.0 (feat. Kotlin, Jetpack)
[2019] 벅스 5.0 (feat. Kotlin, Jetpack)
NHN FORWARD
 
[2019] Java에서 Fiber를 이용하여 동시성concurrency 프로그래밍 쉽게 하기
[2019] Java에서 Fiber를 이용하여 동시성concurrency 프로그래밍 쉽게 하기[2019] Java에서 Fiber를 이용하여 동시성concurrency 프로그래밍 쉽게 하기
[2019] Java에서 Fiber를 이용하여 동시성concurrency 프로그래밍 쉽게 하기
NHN FORWARD
 
[2019] PAYCO 쇼핑 마이크로서비스 아키텍처(MSA) 전환기
[2019] PAYCO 쇼핑 마이크로서비스 아키텍처(MSA) 전환기[2019] PAYCO 쇼핑 마이크로서비스 아키텍처(MSA) 전환기
[2019] PAYCO 쇼핑 마이크로서비스 아키텍처(MSA) 전환기
NHN FORWARD
 
[2019] 비식별 데이터로부터의 가치 창출과 수익화 사례
[2019] 비식별 데이터로부터의 가치 창출과 수익화 사례[2019] 비식별 데이터로부터의 가치 창출과 수익화 사례
[2019] 비식별 데이터로부터의 가치 창출과 수익화 사례
NHN FORWARD
 
[2019] 게임 서버 대규모 부하 테스트와 모니터링 이렇게 해보자
[2019] 게임 서버 대규모 부하 테스트와 모니터링 이렇게 해보자[2019] 게임 서버 대규모 부하 테스트와 모니터링 이렇게 해보자
[2019] 게임 서버 대규모 부하 테스트와 모니터링 이렇게 해보자
NHN FORWARD
 
[2019] 200만 동접 게임을 위한 MySQL 샤딩
[2019] 200만 동접 게임을 위한 MySQL 샤딩[2019] 200만 동접 게임을 위한 MySQL 샤딩
[2019] 200만 동접 게임을 위한 MySQL 샤딩
NHN FORWARD
 
[2019] 언리얼 엔진을 통해 살펴보는 리플렉션과 가비지 컬렉션
[2019] 언리얼 엔진을 통해 살펴보는 리플렉션과 가비지 컬렉션[2019] 언리얼 엔진을 통해 살펴보는 리플렉션과 가비지 컬렉션
[2019] 언리얼 엔진을 통해 살펴보는 리플렉션과 가비지 컬렉션
NHN FORWARD
 
[2019] 글로벌 게임 서비스 노하우
[2019] 글로벌 게임 서비스 노하우[2019] 글로벌 게임 서비스 노하우
[2019] 글로벌 게임 서비스 노하우
NHN FORWARD
 
[2019] 배틀로얄 전장(map) 제작으로 알아보는 슈팅 게임 레벨 디자인
[2019] 배틀로얄 전장(map) 제작으로 알아보는 슈팅 게임 레벨 디자인[2019] 배틀로얄 전장(map) 제작으로 알아보는 슈팅 게임 레벨 디자인
[2019] 배틀로얄 전장(map) 제작으로 알아보는 슈팅 게임 레벨 디자인
NHN FORWARD
 

More from NHN FORWARD (20)

[2019] 패션 시소러스 기반 상품 특징 분석 시스템
[2019] 패션 시소러스 기반 상품 특징 분석 시스템[2019] 패션 시소러스 기반 상품 특징 분석 시스템
[2019] 패션 시소러스 기반 상품 특징 분석 시스템
 
[2019] 스몰 스텝: Android 렛츠기릿!
[2019] 스몰 스텝: Android 렛츠기릿![2019] 스몰 스텝: Android 렛츠기릿!
[2019] 스몰 스텝: Android 렛츠기릿!
 
딥러닝, 야 너도 할 수 있어(feat. PyTorch)
딥러닝, 야 너도 할 수 있어(feat. PyTorch)딥러닝, 야 너도 할 수 있어(feat. PyTorch)
딥러닝, 야 너도 할 수 있어(feat. PyTorch)
 
NHN 베이스캠프: 신입사원들은 무엇을 배우나요?
NHN 베이스캠프: 신입사원들은 무엇을 배우나요?NHN 베이스캠프: 신입사원들은 무엇을 배우나요?
NHN 베이스캠프: 신입사원들은 무엇을 배우나요?
 
[2019] GIF 스티커 만들기: 스파인 2D를 이용한 움직이는 스티커 만들기
[2019] GIF 스티커 만들기: 스파인 2D를 이용한 움직이는 스티커 만들기[2019] GIF 스티커 만들기: 스파인 2D를 이용한 움직이는 스티커 만들기
[2019] GIF 스티커 만들기: 스파인 2D를 이용한 움직이는 스티커 만들기
 
[2019] 전기 먹는 하마의 다이어트 성공기 클라우드 데이터 센터의 에너지 절감 노력과 사례
[2019] 전기 먹는 하마의 다이어트 성공기   클라우드 데이터 센터의 에너지 절감 노력과 사례[2019] 전기 먹는 하마의 다이어트 성공기   클라우드 데이터 센터의 에너지 절감 노력과 사례
[2019] 전기 먹는 하마의 다이어트 성공기 클라우드 데이터 센터의 에너지 절감 노력과 사례
 
[2019] 스몰 스텝: Dooray!를 이용한 업무 효율화/자동화(고객문의 시스템 구축)
[2019] 스몰 스텝: Dooray!를 이용한 업무 효율화/자동화(고객문의 시스템 구축)[2019] 스몰 스텝: Dooray!를 이용한 업무 효율화/자동화(고객문의 시스템 구축)
[2019] 스몰 스텝: Dooray!를 이용한 업무 효율화/자동화(고객문의 시스템 구축)
 
[2019] 아직도 돈 주고 DB 쓰나요? for Developer
[2019] 아직도 돈 주고 DB 쓰나요? for Developer[2019] 아직도 돈 주고 DB 쓰나요? for Developer
[2019] 아직도 돈 주고 DB 쓰나요? for Developer
 
[2019] 아직도 돈 주고 DB 쓰나요 for DBA
[2019] 아직도 돈 주고 DB 쓰나요 for DBA[2019] 아직도 돈 주고 DB 쓰나요 for DBA
[2019] 아직도 돈 주고 DB 쓰나요 for DBA
 
[2019] 비주얼 브랜딩: Basic system
[2019] 비주얼 브랜딩: Basic system[2019] 비주얼 브랜딩: Basic system
[2019] 비주얼 브랜딩: Basic system
 
[2019] PAYCO 매거진 서버 Kotlin 적용기
[2019] PAYCO 매거진 서버 Kotlin 적용기[2019] PAYCO 매거진 서버 Kotlin 적용기
[2019] PAYCO 매거진 서버 Kotlin 적용기
 
[2019] 벅스 5.0 (feat. Kotlin, Jetpack)
[2019] 벅스 5.0 (feat. Kotlin, Jetpack)[2019] 벅스 5.0 (feat. Kotlin, Jetpack)
[2019] 벅스 5.0 (feat. Kotlin, Jetpack)
 
[2019] Java에서 Fiber를 이용하여 동시성concurrency 프로그래밍 쉽게 하기
[2019] Java에서 Fiber를 이용하여 동시성concurrency 프로그래밍 쉽게 하기[2019] Java에서 Fiber를 이용하여 동시성concurrency 프로그래밍 쉽게 하기
[2019] Java에서 Fiber를 이용하여 동시성concurrency 프로그래밍 쉽게 하기
 
[2019] PAYCO 쇼핑 마이크로서비스 아키텍처(MSA) 전환기
[2019] PAYCO 쇼핑 마이크로서비스 아키텍처(MSA) 전환기[2019] PAYCO 쇼핑 마이크로서비스 아키텍처(MSA) 전환기
[2019] PAYCO 쇼핑 마이크로서비스 아키텍처(MSA) 전환기
 
[2019] 비식별 데이터로부터의 가치 창출과 수익화 사례
[2019] 비식별 데이터로부터의 가치 창출과 수익화 사례[2019] 비식별 데이터로부터의 가치 창출과 수익화 사례
[2019] 비식별 데이터로부터의 가치 창출과 수익화 사례
 
[2019] 게임 서버 대규모 부하 테스트와 모니터링 이렇게 해보자
[2019] 게임 서버 대규모 부하 테스트와 모니터링 이렇게 해보자[2019] 게임 서버 대규모 부하 테스트와 모니터링 이렇게 해보자
[2019] 게임 서버 대규모 부하 테스트와 모니터링 이렇게 해보자
 
[2019] 200만 동접 게임을 위한 MySQL 샤딩
[2019] 200만 동접 게임을 위한 MySQL 샤딩[2019] 200만 동접 게임을 위한 MySQL 샤딩
[2019] 200만 동접 게임을 위한 MySQL 샤딩
 
[2019] 언리얼 엔진을 통해 살펴보는 리플렉션과 가비지 컬렉션
[2019] 언리얼 엔진을 통해 살펴보는 리플렉션과 가비지 컬렉션[2019] 언리얼 엔진을 통해 살펴보는 리플렉션과 가비지 컬렉션
[2019] 언리얼 엔진을 통해 살펴보는 리플렉션과 가비지 컬렉션
 
[2019] 글로벌 게임 서비스 노하우
[2019] 글로벌 게임 서비스 노하우[2019] 글로벌 게임 서비스 노하우
[2019] 글로벌 게임 서비스 노하우
 
[2019] 배틀로얄 전장(map) 제작으로 알아보는 슈팅 게임 레벨 디자인
[2019] 배틀로얄 전장(map) 제작으로 알아보는 슈팅 게임 레벨 디자인[2019] 배틀로얄 전장(map) 제작으로 알아보는 슈팅 게임 레벨 디자인
[2019] 배틀로얄 전장(map) 제작으로 알아보는 슈팅 게임 레벨 디자인
 

[2018] Java를 위한, Java에 의한 도구들

  • 1. © 2018 NHN FORWARD. All rights reserved. Java 를 위한, Java 에 의한 도구들 이상민 모니터링플랫폼개발팀
  • 2. CONTENTS 1. About 2. jvmtop 3. jvm-tools 4. jcmd 5. jhsdb 6. OpenJDK Tools 7. Conclusion
  • 4. 4 / 58 도구의 중요성 상황에 맞는 도구를 사용해야 도구의 구분 • JVM 진단 도구 • 성능 진단 도구 • 부하 도구
  • 5. 5 / 58 도구의 중요성 상황에 맞는 도구를 사용해야 도구의 구분 • JVM 진단 도구 • 실시간 진단 도구 • 사후 진단 도구 • 성능 진단 도구 • 운영도구 • 측정도구 • 부하 도구 • 벤치마크 도구 • 부하 테스트 도구
  • 6. 6 / 58 도구의 구분 – JVM 진단 도구 실시간 진단 도구  JVM 에 붙어서 실시간으로 진단하는 도구  실시간 진단 도구: , , 사후 진단 도구  JVM 문제 발생시 덤프등을 통하여 분석하는 도구  쓰레드 덤프 : TDA, Thread Logic  힙 덤프 : IBM Heap Analyzer, MAT
  • 7. 7 / 58 도구의 구분 – 성능 진단 도구 운영 도구  서비스의 전반적인 상황을 모니터링 하기 위한 도구  APM : scouter, pinpoint 측정 도구  성능 및 기능을 측정하기 위한 도구  CPU, Memory, Coverage 에 대한 측정  Profiling : JProfiler, YourKit  Object Layout :  CPU 진단 :
  • 8. 8 / 58 도구의 구분 – 부하 도구 벤치마크 도구  성능을 비교 하기 위한 도구  method 성능 비교 : 부하 도구  성능을 측정하기 위한 도구  부하 테스트 도구 : gatling, jmeter  concurrent 부하 점검 :
  • 9. 9 / 58 오늘 소개할 도구들  jvmtop : CPU  jvm-tools : Universal  jcmd : Universal  jhsdb : JVM analyze  jmh : BMT  jcstress : Concurrent  jol : Java Object Layout
  • 11. 11 / 58 jvmtop이란  https://github.com/patric-r/jvmtop • 거의 죽은 프로젝트
  • 12. 12 / 58 jvmtop이란 특징  JVM에서 사용하는 CPU 사용량을 모니터링하는 도구  기능은 매우 훌륭함 사용 시기  JVM의 CPU 사용량이 높은 원인을 찾고 싶을 때 • 새로 배포 후에 CPU 사용량이 갑자기 높아 졌을 때 • 순간적으로 CPU 사용량이 급상승 했을 때 단점  Java 9 이상의 JDK 사용 불가 이 부분은 fork 하여 수정 완료 했으며, 별도의 git repository 에 오픈 예정
  • 13. 13 / 58 jvmtop 실행 예 옵션 없이 실행 • CPU 를 많이 사용하는 프로세스 별로 정렬 $ ./jvmtop.sh JvmTop 0.8.0 alpha - 09:57:33, x86_64, 8 cpus, Mac OS X 10.12., load avg 9.57 http://code.google.com/p/jvmtop PID MAIN-CLASS HPCUR HPMAX NHCUR NHMAX CPU GC VM USERNAME #T DL 49993 m.jvmtop.JvmTop 44m 3641m 16m n/a 1.47% 0.00% O8U15 smlee 20 13357 180611-1436.jar 214m 1024m 69m n/a 1.09% 0.00% O8U15 smlee 21 49826 CpuConsumerMain 83m 3641m 20m n/a 0.26% 0.00% O8U73 smlee 9 49827 mdline.Launcher 23m 622m 28m n/a 0.23% 0.00% O8U73 smlee 12
  • 14. 14 / 58 jvmtop 실행 예 <pid> 만 명시하여 실행 • CPU 를 많이 사용하는 쓰레드 별로 정렬 $ ./jvmtop.sh <pid> JvmTop 0.8.0 alpha - 11:49:52, x86_64, 8 cpus, Mac OS X 10.12., load avg 3.64 http://code.google.com/p/jvmtop PID 49826: com.nhnent.CpuConsumerMain ARGS: VMARGS: -XX:NativeMemoryTracking=detail -Dfile.encoding=UTF-8 VM: Oracle Corporation Java HotSpot(TM) 64-Bit Server VM 1.8.0_73 UP: 0:46m #THR: 11 #THRPEAK: 15 #THRCREATED: 3365 USER: smlee GC-Time: 0: 0m #GC-Runs: 5888 #TotalLoadedClasses: 2113 CPU: 0.23% GC: 0.00% HEAP: 259m /3641m NONHEAP: 23m / n/a TID NAME STATE CPU TOTALCPU BLOCKEDBY 3344 RMI TCP Connection(4)-127.0.0. RUNNABLE 1.30% 0.01% 3371 JMX server connection timeout TIMED_WAITING 0.08% 0.00% 3358 JMX server connection timeout TIMED_WAITING 0.00% 0.00% 3345 JMX server connection timeout TIMED_WAITING 0.00% 0.00% Note: Only top 10 threads (according cpu load) are shown!
  • 15. 15 / 58 jvmtop 실행 예 --profile <pid> 옵션으로 실행 $ ./jvmtop.sh --profile <pid> JvmTop 0.8.0 alpha - 11:54:18, x86_64, 8 cpus, Mac OS X 10.12., load avg 2.96 http://code.google.com/p/jvmtop Profiling PID 49826: com.nhnent.CpuConsumerMain 54.58% ( 1.36s) com.nhnent.cpu.InfiniteLoop.busyMethod() 21.51% ( 0.54s) ....fasterxml.jackson.databind.util.ClassUtil.getEnclosi() 8.46% ( 0.21s) ....fasterxml.jackson.databind.util.ClassUtil.hasEnclosi() 5.92% ( 0.15s) ....fasterxml.jackson.databind.cfg.MapperConfig.collectF() 3.29% ( 0.08s) ....fasterxml.jackson.databind.deser.DeserializerCache._() 3.13% ( 0.08s) ....fasterxml.jackson.databind.introspect.AnnotatedField() 3.10% ( 0.08s) ....fasterxml.jackson.databind.util.BeanUtil.okNameForMu()
  • 16. 16 / 58 Java Attach API  다른 process 에서 JVM 에 접속하여  상태 정보를 읽거나  명령을 수행하기 위한 API 관련 코드  jdk/src/jdk.attach/linux/classes/sun/tools/attach/VirtualMachineImpl.java  jdk/hotspot/src/share/vm/services/diagnosticCommand.cpp jvmtop 원리
  • 17. 17 / 58 jvmtop 원리 (Attach API 의 원리) jvmtop JVM 1. SIGQUIT 요청 2. AttachListener 쓰레드 시작 3. 요청 전송 5. 응답 전송 4. 처리
  • 20. 20 / 58 jvm-tools란  https://github.com/aragozin/jvm-tools • 살아 있는 프로젝트
  • 21. 21 / 58 jvm-tools란 특징  기능이 다양함 빌드 절차  직접 빌드를 해야 사용할 수 있음  git 에서 클론 후 을 실행하면 sjk/target 디렉터리에 jar 파일이 생성됨 주요 사용 시기  CPU 사용량이 높은 쓰레드를 확인하고자 할 때  flame 그래프로 성능을 확인하고자 할 때 $ mvn package -DskipTests
  • 22. 22 / 58 jvm-tools options  ttop  hh  stcap, stcpy, ssa, frame  mx  jps  gc
  • 23. 23 / 58 jvm-tools options  ttop: thread top  hh: heap histogram  stcap, stcpy, ssa, frame: stack info  mx: mbean  jps: java processes  gc: gc log
  • 24. 24 / 58 jvm-tools 실행 예 ttop(thread top) 명령 실행 $ java -jar sjk-0.10.1.jar ttop -p <pid> 20XXXX-XXT15:10:39.580+0900 Process summary process cpu=70.43% application cpu=66.58% (user=65.00% sys=1.58%) other: cpu=3.85% thread count: 14 GC time=0.23% (young=0.23%, old=0.00%) heap allocation rate 306mb/s safe point rate: 2.3 (events/s) avg. safe point pause: 1.16ms safe point sync time: 0.01% processing time: 0.26% (wallclock time) [017398] user= 9.95% sys= 0.04% alloc= 49mb/s - pool-4344-thread-3 [017396] user= 4.92% sys= 0.02% alloc= 10b/s - pool-4344-thread-1 [017338] user= 0.38% sys= 0.13% alloc= 281kb/s - RMI TCP Connection(7)-127.0.0.1 [017400] user= 0.02% sys= 0.01% alloc= 3410b/s - JMX server connection timeout 17400 [000001] user= 0.01% sys= 0.01% alloc= 994b/s – main [017339] user= 0.00% sys= 0.00% alloc= 0b/s - JMX server connection timeout 17339
  • 26. 26 / 58 $ java -jar sjk-0.10.1.jar stcap -p <pid> -o dump.std -t 15s Writing to /develop/javalib/jvmtool/dump.std Collected 504 Collected 1000 Collected 1506 Collected 2001 … $ java -jar sjk-0.10.1.jar flame -f dump.std -o report.html Input files ./dump.std 52050 samples processed Generated /develop/javalib/jvmtool/report.html (195423 bytes) jvm-tools 실행 예 stcap 명령 • 이 명령을 이용하여 덤프를 생성하면, flame graph를 생성할 수 있음 $ java -jar sjk-0.10.1.jar stcap -p <pid> -o dump.std -t 15s Writing to /develop/javalib/jvmtool/dump.std Collected 504 Collected 1000 Collected 1506 Collected 2001 … $ java -jar sjk-0.10.1.jar flame -f dump.std -o report.html Input files ./dump.std 52050 samples processed Generated /develop/javalib/jvmtool/report.html (19543 bytes)
  • 28. 28 / 58 개요 • 왜 해당 서버 리소스의 상태가 바쁜지에 대한 성능 분석이 필요할 때 사용하는 도구 분석 방법 • X 축: 해당 메소드에서 얼마나 많은 시간을 소비했는지를 나타냄 • Y 축: 스택(stack)의 깊이를 나타냄 • 색상: 설정에 따라 다름 • 유의사항 • X축이 시간의 흐름을 나타내지 않기 때문에 가로 너비를 읽어야 함! 참고 링크 • https://blog.codecentric.de/en/2017/09/jvm-fire-using-flame-graphs-analyse-performance/ • http://www.brendangregg.com/FlameGraphs/cpuflamegraphs.html 참고 – flame 그래프란
  • 29. jcmd
  • 30. 30 / 58 jcmd란 개요  JDK에 포함  Java 8 부터 제공되는 분석 도구  Attach API 사용  jvm-tools 와 비슷하지만 다른 도구  기존 Java 기본 도구들을 통합한 형태  jps, jmap, jstack, jinfo 등이 포함되어 있음 지금까지 불가능 했던 것들을 가능하도록 만들어 주는 도구!
  • 31. 31 / 58 기본 사용법  jcmd  jcmd <pid> help  jcmd <pid> GC.class_stats  jcmd <pid> help GC.class_stats jcmd basic options
  • 32. 32 / 58 기본 사용법  jcmd: Java 프로세스 목록  jcmd <pid> help: 사용 가능한 명령어 목록  jcmd <pid> GC.class_stats: GC.class_stats 실행  jcmd <pid> help GC.class_stats: GC.class_stats의 도움말 jcmd basic options
  • 33. jcmd popular commands 많이 사용하는 옵션들  jcmd <pid> VM.version  jcmd <pid> VM.system_properties  jcmd <pid> VM.flags  jcmd <pid> GC.class_histogram  jcmd <pid> GC.heap_dump filename=dump.hprof  jcmd <pid> GC.class_stats  jcmd <pid> PerfCounter.print  jcmd <pid> Thread.print
  • 34. jcmd popular commands 많이 사용하는 옵션들  jcmd <pid> VM.version : JVM 버전 출력  jcmd <pid> VM.system_properties : 시스템 속성값 출력  jcmd <pid> VM.flags : VM 에 수동/자동으로 설정된 옵션 목록 출력  jcmd <pid> GC.class_histogram : 메모리 점유 히스토그램 표. (jmap –histo <pid>와 동일)  jcmd <pid> GC.heap_dump filename=dump.hprof : 힙 덤프 생성 (jmap 의 힙덤프 생성과 동일)  jcmd <pid> GC.class_stats : Java 클래스의 메타 데이터 통계  jcmd <pid> PerfCounter.print : 성능 카운터 값 출력  jcmd <pid> Thread.print : 쓰레드 덤프 출력 https://dzone.com/articles/how-to-read-a-thread-dump 참고
  • 36. 36 / 58 VM.log 개요  지금까지는 gc log 를 추가하기 위해서는 JVM 을 재시작 해야만 했음  jcmd 를 사용하면 실행중인 JVM 의 gc log 를 남기도록 할 수 있음 VM.log 를 이용하여 gc log 를 남기는 법  jcmd <pid> VM.log output="file=gc.log" what="gc=debug" decorators="time,level”  <pid> 프로세스에 대해서  output=“file=gc.log”: gc.log라는 파일을 프로세스가 시작된 위치에 저장하고  what="gc=debug”: gc의 디버그 레벨로 출력하며  decorators="time,level”: 시간과 레벨 데코레이터를 사용한다. jcmd hidden function – VM.log
  • 37. 37 / 58 VM.log options  output  output_options  what  decorators  disable  list  rotate jcmd hidden function – VM.log
  • 38. 38 / 58 VM.log options  output: 파일 이름 등을 지정  output_options: filecount (파일 개수), filesize (파일 크기)등 지정  what: 로그 레벨 지정 (trace, debug, info, warning, error)  decorators: 추가 항목들 지정  disable: 로깅 끄기  list: 로깅 목록들  rotate: 파일 로테이트 방식 참고 사항  로그 레벨, 로그 데코레이터의 종류, 로그 태그의 종류들은 list 옵션 실행 시 출력됨 jcmd hidden function – VM.log
  • 39. 39 / 58 VM.log 사용시 주의사항  주의 사항  output 파일의 이름을 지정하면, JVM 이 시작한 위치에 로그가 쌓이기 때문에 절대 경로로 지정하는 것을 권장  시작 위치 확인 : pwdx <pid> (linux only)  아무 생각없이 시작하는 명령만 실행하면 로깅하는 작업이 계속 추가될 수 있으므로, 명령으로 현재 로깅 중인 내역들을 확인해 봐야 함 관련 내용  http://openjdk.java.net/jeps/158 jcmd hidden function – VM.log $ jcmd <pid> VM.log list
  • 40. 40 / 58 jcmd hidden function – VM.log VM.log 실행 스크립트 예 #!/bin/bash pid=$1 echo "PID="$pid jcmd $pid VM.log output="file=/develop/nhnforward/jcmd/gc.log" what="gc=debug" decorators="time,level" sleep 3 cat gc.log jcmd $pid VM.log list jcmd $pid VM.log output="#2" what="all=off"
  • 41. 41 / 58 jcmd hidden function – VM.log VM.log 실행 스크립트 예 #!/bin/bash pid=$1 echo "PID="$pid jcmd $pid VM.log output="file=/develop/nhnforward/jcmd/gc.log" what="gc=debug" decorators="time,level" sleep 3 cat gc.log jcmd $pid VM.log list jcmd $pid VM.log output="#2" what="all=off" logging 시작 VM 의 로깅 목록 출력 VM 의 두번째에 있는 GC 로깅 중지
  • 43. 43 / 58 NMT 개요  NMT == Native Memory Tracking  HotSpot JVM 의 내부 메모리 사용량을 추적하는 기능 NMT 사용법 1. JVM 시작시 다음의 옵션을 추가  -XX:NativeMemoryTracking=summary 혹은 -XX:NativeMemoryTracking=detail 2. baseline 지정  jcmd <pid> VM.native_memory baseline 3. diff 로 확인  jcmd <pid> VM.native_memory detail.diff jcmd hidden function – NMT
  • 44. 44 / 58 참고 링크  https://docs.oracle.com/javase/8/docs/technotes/guides/vm/nmt-8.html  https://docs.oracle.com/javase/8/docs/technotes/guides/troubleshoot/tooldescr007.html jcmd hidden function – NMT
  • 45. jhsdb
  • 46. 46 / 58 jhsdb 개요  Java 9 부터 JDK에 포함되어 제공되는 분석 도구   용도  core 덤프 파일  crash 된 JVM에 붙어서 분석할 때 사용  주의 사항  만약 실행 중인 애플리케이션에 이 도구로 붙을 경우 JVM은 정지됨  core 덤프 파일은 gcore 명령어로 core 덤프를 생성할 수 있으나, Heap 메모리 크기 대비 몇 십 배의 덤프 파일이 생성됨. 따라서 문제가 있을 때만 사용할 것  https://docs.oracle.com/javase/9/tools/jhsdb.htm jhsdb란
  • 47. 47 / 58 jhsdb 사용법  sudo jhsdb [option] [--pid pid | --exe executable --core coredump]  가능하다면 root 권한으로 실행하는 것을 권장함  JVM 에 못 붙을 수도 있음  보다 자세한 설명은 아래 링크 참고 http://marxsoftware.blogspot.com/2017/06/jhsdb-jdk9.html jhsdb usage
  • 48. 48 / 58 jhsdb 옵션  jhsdb clhsdb  jhsdb debugd  jhsdb hsdb jhsdb options
  • 49. 49 / 58 jhsdb 옵션  jhsdb clhsdb: 인터렉티브 디버거  jhsdb debugd: 원격 디버그 서버 기동  jhsdb hsdb: 인터렉티브 GUI 디버거 jhsdb options
  • 50. 50 / 58 jhsdb hsdb GUI 예
  • 52. 52 / 58 jhsdb 추가 옵션들  jhsdb jstack  jhsdb jmap  jhsdb jinfo  jhsdb jsnap jhsdb other options
  • 55. 55 / 58 JMH 개요  Java Microbenchmark Harness  http://openjdk.java.net/projects/code-tools/jmh/  마이크로 벤치마크를 수행하기 위한 도구  두개 이상의 메소드 성능을 비교 JMH를 사용해야 하는 이유  (초기 진입장벽이 조금 있긴 하지만 적응이 되면) 간단하게 벤치마크가 가능  JVM 최적화를 감안하여 워밍업 기능 제공 JMH
  • 56. 56 / 58 JMH JMH 주요 벤치마크 모드  응답 시간 관련 • Mode.AverageTime • Mode.SampleTime • Mode.SingleShotTime  처리량 • Mode.Throughput  전체 • Mode.All 참고 링크  샘플 코드 • http://hg.openjdk.java.net/code-tools/jmh/file/tip/jmh-samples/src/main/java/org/openjdk/jmh/samples/
  • 57. 57 / 58 jcstress jcstress 개요  Java Concurrency Stress tests  https://wiki.openjdk.java.net/display/CodeTools/jcstress 참고 링크  소개 자료 • https://shipilev.net/talks/jvmls-July2013-jcstress.pdf  샘플 코드 • http://hg.openjdk.java.net/code-tools/jcstress/file/tip/jcstress-samples/src/main/java/org/openjdk/jcstress/samples
  • 58. 58 / 58 jol jol 개요  Java Object Layout  http://openjdk.java.net/projects/code-tools/jol/ jol 주요 기능  객체 내부 정보 • 필드 레이아웃, 헤더 정보, 필드 값, 공간 손실 크기 (data on alignment losses)  객체 외부 정보 • 인스턴스에서 접근 가능한 객체들, 주소, 접근 가능성 그래프를 통한 경로 등
  • 59. 59 / 58 jol usage example $ java -jar jol-cli/target/jol-cli.jar internals java.util.HashMap Running 64-bit HotSpot VM. Using compressed oop with 3-bit shift. Using compressed klass with 3-bit shift. Objects are 8 bytes aligned. Field sizes by type: 4, 1, 1, 2, 2, 4, 4, 8, 8 [bytes] Array element sizes: 4, 1, 1, 2, 2, 4, 4, 8, 8 [bytes] java.util.HashMap object internals: OFFSET SIZE TYPE DESCRIPTION VALUE 0 4 (object header) 05 00 00 00 (0000 0101 0000 0000 0000 0000 0000 0000) 4 4 (object header) 00 00 00 00 (0000 0000 0000 0000 0000 0000 0000 0000) 8 4 (object header) 8c 3b 00 f8 (1000 1100 0011 1011 0000 0000 1111 1000) 12 4 Set AbstractMap.keySet null 16 4 Collection AbstractMap.values null 20 4 int HashMap.size 0 24 4 int HashMap.modCount 0 28 4 int HashMap.threshold 0 32 4 float HashMap.loadFactor 0.75 36 4 Node[] HashMap.table null 40 4 Set HashMap.entrySet null 44 4 (loss due to the next object alignment) Instance size: 48 bytes (reported by Instrumentation API) Space losses: 0 bytes internal + 4 bytes external = 4 bytes total
  • 61. 61 / 58 상황에 맞는 적절한 도구를 선택하는 방법을 아는 것이 가장 중요  모든 문제를 도구만으로 해결하려고 하거나  도구 없이 로그(log)만으로 해결하려고 하면 안 됨 도구는 도구일 뿐
  • 62. 62 / 58 명령어와 도구는 눈으로 보는 것이 아니라,  직접 실행해보고,  결과를 확인하고,  그 내용을 분석하는 연습을 통해서만,  내 것으로 만들 수 있다. 그래야 장애 상황에서 침착하게 대응이 가능 한번씩은 실행해 볼 것을 권장
  • 63. 63 / 58 내일 출근해서 꼭 직접 확인해 봐야 하는 도구 • jvmtop • jcmd 한번씩은 실행해 볼 것을 권장
  • 64. © 2018 NHN FORWARD. All rights reserved. Q&AQ&A
  • 65. © 2018 NHN FORWARD. All rights reserved. THANK YOUTHANK YOU