도커 무작정 따라하기: 도커가 처음인 사람도 60분이면 웹 서버를 올릴 수 있습니다!pyrasis
도커 무작정 따라하기
- 도커가 처음인 사람도 60분이면 웹 서버를 올릴 수 있습니다!
도커의 기본 개념부터 설치와 사용 방법까지 설명합니다.
더 자세한 내용은 가장 빨리 만나는 도커(Docker)를 참조해주세요~
http://www.pyrasis.com/private/2014/11/30/publish-docker-for-the-really-impatient-book
EFK Stack이란 ElasticSearch, Fluentd, Kibana라는 오픈소스의 조합으로, 방대한 양의 데이터를 신속하고 실시간으로 수집/저장/분석/시각화 할 수 있는 솔루션입니다. 특히 컨테이너 환경에서 로그 수집을 위해 주로 사용되는 기술 스택입니다.
Elasitc Stack에 대한 소개와 EFK Stack 설치 방법에 대해 설명합니다.
도커 무작정 따라하기: 도커가 처음인 사람도 60분이면 웹 서버를 올릴 수 있습니다!pyrasis
도커 무작정 따라하기
- 도커가 처음인 사람도 60분이면 웹 서버를 올릴 수 있습니다!
도커의 기본 개념부터 설치와 사용 방법까지 설명합니다.
더 자세한 내용은 가장 빨리 만나는 도커(Docker)를 참조해주세요~
http://www.pyrasis.com/private/2014/11/30/publish-docker-for-the-really-impatient-book
EFK Stack이란 ElasticSearch, Fluentd, Kibana라는 오픈소스의 조합으로, 방대한 양의 데이터를 신속하고 실시간으로 수집/저장/분석/시각화 할 수 있는 솔루션입니다. 특히 컨테이너 환경에서 로그 수집을 위해 주로 사용되는 기술 스택입니다.
Elasitc Stack에 대한 소개와 EFK Stack 설치 방법에 대해 설명합니다.
넥슨코리아 사내 발표자료로 왓 스튜디오에서 파이썬으로 《야생의 땅: 듀랑고》 서버를 비롯한 여러가지 도구를 만든 경험을 공유합니다.
- 게임서버와 각종 툴, 테스트/빌드/배포 시스템을 만들 때 사용한 재료
- 파이썬 코드 품질 개선, 디버깅, 프로파일링, 최적화
- 파이썬 오픈소스 생태계와 왓 스튜디오가 하는 오픈소스 활동
AWS Lambda 내부 동작 방식 및 활용 방법 자세히 살펴 보기 - 김일호 솔루션즈 아키텍트 매니저, AWS :: AWS Summit ...Amazon Web Services Korea
AWS Lambda 내부 동작 방식 및 활용 방법 자세히 살펴 보기
김일호 솔루션즈 아키텍트 매니저, AWS
AWS Lambda는 서버리스 아키텍처의 핵심 서비스입니다. 본 세션에서는 AWS Lambda에 내부 동작 방식을 소개하고, Lambda Layer, 맞춤형 런타임 등 신규로 소개된 기능 및 사용시 도움이 되는 성능 및 확장을 위한 다양한 팁들을 소개합니다.
Github Action is the CI/CD tool made by Github. Deeply integrated with Github features, it can not only automate deployments, but also Githu.b repository management. In this sharing I will talk about how we use Github action in LikeCoin and some issues we encountered.
AWS 클라우드를 활용하면 사용자의 트래픽에 따라 IT 인프라 아키텍처를 확장할 수 있습니다. 이번 강연에서는 서비스 초기의 작은 트래픽에 대응할 수 있는 단순한 아키텍처로 시작해 사업 성장 후의 수백만 사용자에 달하는 대규모 트래픽을 지탱할 수 있는 고확장성 아키텍처에 이르기까지의 단계별 아키텍처 구성 방법에 대해 소개해 드리고 컴퓨팅 및 데이터베이스 선택 및 사용자 증가에 따른 트래픽 경감 방법, 오토스케일링 및 모니터링과 자동화, DB 부하 분산, 고가용성 확보 등에 대한 다양한 모범사례를 알려드릴 예정입니다.
Getting Started with Angular 4 and TypeScript
Slides:
1- What is TypeScript.
2- TypeScript Content
3- Why TypeScript
4- TypeScript Interfaces
5- TypeScript Decorators
6- TypeScript Import and Export
7- What is Angular JS
8- Angular Architecture Overview
9- Anatomy of an Angular Application
10- Setting up an Angular Application
11- Angular CLI
12- Running your application
13- Modules
14- Components
15- Templates
16- Metadata
17- Data binding
18- Pipes
19- Services and Service Creation
Angular is the best open source front end web application framework that helps you to build fast apps. These best practices are followed to run apps much faster and smoother.
넥슨코리아 사내 발표자료로 왓 스튜디오에서 파이썬으로 《야생의 땅: 듀랑고》 서버를 비롯한 여러가지 도구를 만든 경험을 공유합니다.
- 게임서버와 각종 툴, 테스트/빌드/배포 시스템을 만들 때 사용한 재료
- 파이썬 코드 품질 개선, 디버깅, 프로파일링, 최적화
- 파이썬 오픈소스 생태계와 왓 스튜디오가 하는 오픈소스 활동
AWS Lambda 내부 동작 방식 및 활용 방법 자세히 살펴 보기 - 김일호 솔루션즈 아키텍트 매니저, AWS :: AWS Summit ...Amazon Web Services Korea
AWS Lambda 내부 동작 방식 및 활용 방법 자세히 살펴 보기
김일호 솔루션즈 아키텍트 매니저, AWS
AWS Lambda는 서버리스 아키텍처의 핵심 서비스입니다. 본 세션에서는 AWS Lambda에 내부 동작 방식을 소개하고, Lambda Layer, 맞춤형 런타임 등 신규로 소개된 기능 및 사용시 도움이 되는 성능 및 확장을 위한 다양한 팁들을 소개합니다.
Github Action is the CI/CD tool made by Github. Deeply integrated with Github features, it can not only automate deployments, but also Githu.b repository management. In this sharing I will talk about how we use Github action in LikeCoin and some issues we encountered.
AWS 클라우드를 활용하면 사용자의 트래픽에 따라 IT 인프라 아키텍처를 확장할 수 있습니다. 이번 강연에서는 서비스 초기의 작은 트래픽에 대응할 수 있는 단순한 아키텍처로 시작해 사업 성장 후의 수백만 사용자에 달하는 대규모 트래픽을 지탱할 수 있는 고확장성 아키텍처에 이르기까지의 단계별 아키텍처 구성 방법에 대해 소개해 드리고 컴퓨팅 및 데이터베이스 선택 및 사용자 증가에 따른 트래픽 경감 방법, 오토스케일링 및 모니터링과 자동화, DB 부하 분산, 고가용성 확보 등에 대한 다양한 모범사례를 알려드릴 예정입니다.
Getting Started with Angular 4 and TypeScript
Slides:
1- What is TypeScript.
2- TypeScript Content
3- Why TypeScript
4- TypeScript Interfaces
5- TypeScript Decorators
6- TypeScript Import and Export
7- What is Angular JS
8- Angular Architecture Overview
9- Anatomy of an Angular Application
10- Setting up an Angular Application
11- Angular CLI
12- Running your application
13- Modules
14- Components
15- Templates
16- Metadata
17- Data binding
18- Pipes
19- Services and Service Creation
Angular is the best open source front end web application framework that helps you to build fast apps. These best practices are followed to run apps much faster and smoother.
※다운로드하시면 더 선명한 자료를 보실 수 있습니다.
패션 텍스트 데이터에서 패션 시소러스를 구축한 과정과 패션 상품 특징 분석 시스템에 대해 소개합니다.
패션 상품 특징을 어떻게 활용할 수 있는지에 대해 공유하고자 합니다.
목차
1. 개발 배경
2. 패션 시소러스 기반 상품 특징 분석 시스템 (A-Tagger)
3. A-Tagger 활용
대상
- 언어 처리 입문자
- 이미지 검색에 관심 있는 분
- 패션 업계 종사자
■관련 동영상: https://youtu.be/oGPqbvEkfxs
※다운로드하시면 더 선명한 자료를 보실 수 있습니다.
머릿속으로 그리던 나만의 앱, 생각만 잔뜩 하고 어디서부터 시작할지 고민 중이세요?
Android에 대한 가벼운 이해를 곁들여서 간단한 앱을 만들어가는 과정을 통해 (앱 개발이 생소한) 개발자들이 느끼는 Android 앱 개발의 진입장벽을 조금 낮춰보는 시간을 준비했습니다.
목차
1. 기획
2. 화면 개발
3. 서버 연동
4. 데이터 UI 바인딩
5. Play Store 출시
대상
Android 앱을 한번 만들어 보고 싶은 개발자라면 누구나
■관련 동영상: https://youtu.be/VhBKxRKPaSo
※다운로드하시면 더 선명한 자료를 보실 수 있습니다.
딥러닝을 처음 시작하시는 분, 특히 개발자에게 맞춰 필요한 내용을 준비하였습니다.
딥러닝의 수학적인 이해보다는 딥러닝을 활용하는 방법을 공유하고자 합니다.
목차
1. 딥러닝 권장 개발 환경
2. 코드 작성을 위한 약간의 이론
3. 가장 빠르게 그럴싸한 모델 만들기
대상
딥러닝에 관심이 있거나 딥러닝을 시작하려는 모든 개발자
※발표 영상은 제공하지 않습니다.
※다운로드하시면 더 선명한 자료를 보실 수 있습니다.
'베이스캠프(Basecamp)'는 NHN 신입 사원을 위한 개발 교육 과정입니다. 9주간의 교육 과정에서 무엇을 배웠고, 어떤 점이 좋고 힘들었는지 이야기하려 합니다.
목차
1. 5단 구성(발단-전개-위기-절정-결말)으로 베이스캠프 교육 과정 살펴보기
2. 그 과정에서 배웠던 점, 좋았던 점, 힘들었던 점
대상
NHN 신입사원 교육에 관심이 있는 주니어 개발자, 대학생
신입 개발자 교육을 정착시키고 싶은 시니어 개발자
※발표 영상은 제공하지 않습니다.
[2019] GIF 스티커 만들기: 스파인 2D를 이용한 움직이는 스티커 만들기NHN FORWARD
※다운로드하시면 더 선명한 자료를 보실 수 있습니다.
간단한 캐릭터를 그리고 완성된 캐릭터를 이용하여 포토샵에서 애니메이션이 가능하도록 분절에 대해 알려드리겠습니다. 분절이 완료되면 스파인에서 읽을 수 있게 내보내고 스파인에서 애니메이션 작업을 하겠습니다.
시간이 된다면 2가지 정도의 GIF 애니메이션을 제작할 예정입니다.
목차
1. 스프라이트 애니메이션과 키 애니메이션
2. 캐릭터 파트별로 분리하기
3. 캐릭터에 뼈대 심기
4. 애니메이션 만들기
5. GIF 출력
대상
- 이모티콘에 관심있는 누구나
- 애니메이션에 관심있는 누구나
■관련 동영상: https://youtu.be/7KqDL-D8dys
[2019] 전기 먹는 하마의 다이어트 성공기 클라우드 데이터 센터의 에너지 절감 노력과 사례NHN FORWARD
※다운로드하시면 더 선명한 자료를 보실 수 있습니다.
데이터 센터는 IT 장비의 안정적인 운영을 효율적이고 경제적으로 수행하는 것이 비교 우위에 있을 수 있습니다. 그중에서 이 시간에 다루고자 하는 것은 에너지의 효율성입니다.
데이터 센터에서 사용되는 전기 에너지는 어디에서 얼마나 사용되며 효율적으로 절감할 수 있었던 사례를 소개하고 NHN의 노력과 그 결과를 이야기하려 합니다.
목차
1. 클라우드 데이터센터는 ?
2. 에너지의 사용과 절감 ?
3. 모든 것을 측정 분석(DcIM) – 1st Tech
4. 효율적인 Cooling & Control(Cooling System) – 2nd Tech
5. Hot & Cold 분리(Containment) – 3rd Tech
대상
데이터 센터의 이야기에 관심 있는 분 누구나
■관련 동영상: https://youtu.be/-WHQUKAzdMs
※다운로드하시면 더 선명한 자료를 보실 수 있습니다.
Oracle을 MySQL로 전환하는 과정에서 경험했던 내용을 공유합니다.
이 세션을 들으시면 사전에 구체적인 계획을 세우고 체크리스트를 작성할 수 있습니다.
목차
1. 무엇을 어떻게 했나?
2. 어떤 이슈들이 있었나?
3. 도움이 될 만한 내용들
대상
- C++ 개발자
- Oracle과 MySQL의 차이점이 궁금한 분
- DB 전환 계획이 있는 분
■관련 동영상: https://youtu.be/9mTMlDN3rso
※다운로드하시면 더 선명한 자료를 보실 수 있습니다.
Oracle Database를 타 DBMS로 전환하기 위해 검토해야 하는 내용을 설명합니다
전환하려는 총괄 책임자는 어떠한 리스크가 발생하는지 검토해 볼 수 있습니다
DBA는 전환 작업을 하면서 전체 계획을 수립하는 데 도움을 받을 수 있습니다.
개발자는 전환 작업이 진행되면 어떠한 사항을 준비해야 하는지 전체적인 시야를 확보하게 됩니다.
목차
1. Open Source DBMS로의 전환
2. DBMS 전환 단계
3. Migration 예제 (to MySQL)
4. 전환 시스템 구성 및 용량 산정 방안
대상
- Open Source DBMS로 전환하고자 하는 DBA
- Open Source DBMS로 전환하고자 하는 개발자
- Oracle Database를 다른 DBMS로 전환하고자 하는 분
■관련 동영상: https://youtu.be/DXu3nbWa4AA
※다운로드하시면 더 선명한 자료를 보실 수 있습니다.
브랜드 디자인 프로세스와 디자인에 필요한 Basic System을 다양한 브랜드 사례로 설명합니다.
목차
1. 디자인 프로세스
2. 베이직 시스템
3. 적용 사례
대상
브랜드 디자인에 대한 기본적 이해가 필요하신 분
※영상자료는 공개하지 않습니다.
※다운로드하시면 더 선명한 자료를 보실 수 있습니다.
서버 사이드에서도 Spring 5를 통해 공식적으로 지원이 시작된 후,
Spring을 이용한 많은 서비스가 Java를 대신하여 Kotlin을 적용하고 있습니다.
본 세션에서는 PAYCO 매거진 프로젝트에 Kotlin을 적용했던 경험과 시행착오를 나누어 보려 합니다.
목차
1. Introduction
2. Motivation
3. Kotlin
4. Migration
5. Refactoring
6. Report
7. Conclusion
대상
Kotlin이라는 언어를 들어보신 분이라면 누구나
■관련 동영상: https://youtu.be/wiJqu7xoH58
※다운로드하시면 더 선명한 자료를 보실 수 있습니다.
벅스 Android 5.0에 Kotlin, Jetpack을 적용하면서 얻은 노하우와 시행착오를 공유합니다.
목차
1. 소개
2. Java to Kotlin
3. AAC (Android Architecture Components)
4. 미디어 앱 아키텍처(Media app architecture)
대상
- Kotlin과 Jetpack을 서비스에 적용하려는 Android 개발자
- 관련 Android 기술에 관심 있는 누구나
■관련 동영상: https://youtu.be/PqsjZn30XGE
[2019] Java에서 Fiber를 이용하여 동시성concurrency 프로그래밍 쉽게 하기NHN FORWARD
※다운로드하시면 더 선명한 자료를 보실 수 있습니다.
복잡하고 어려운 동시성(concurrency) 프로그래밍을 Fiber를 이용하여 성능은 유지하면서 간단하게 작성하는 방법을 알아봅니다.
Java에서 유저 모드 경량 스레드인 Fiber를 배우고 언제 어떻게 사용하면 좋을지 알게 됩니다.
목차
1. 동시성(concurrency) 프로그래밍이 어려운 이유
2. Fiber란 무엇인가?
3. Coroutine은 무엇인가?
4. Java Fiber Quasar
5. Fiber를 이용해 동시성 프로그래밍을 하는 방법
6. Fiber의 성능
7. 적용 사례 소개 (Tardis)
8. Java Fiber의 미래, Project Loom
9. Q&A
대상
- Java로 실시간 게임 서버를 만들고 싶은 분
- Java에서 동시성(concurrency) 프로그래밍을 쉽게 해보고 싶은 분
■관련 동영상: https://youtu.be/7H_ROv5rNIg
※다운로드하시면 더 선명한 자료를 보실 수 있습니다.
PAYCO 쇼핑의 아키텍처를 MSA로 변경하면서 겪은 삽질을 공유합니다.
레거시 서비스에서 서비스를 분리해내는 방법과 순서, 이후 고려해야 할 사항을 공유하고자 합니다.
목차
1. PAYCO 쇼핑?
2. 프로젝트 진행 과정
3. 아키텍처 공유
대상
- MSA, Spring cloud, Docker, Ansible 등을 실무에 적용하는 방법에 관심이 있는 분
- Spring Cloud를 써서 MSA로 개발하고 싶은데 어디서부터 손대야 할지 모르는 분
■관련 동영상: https://youtu.be/l195D5WT_tE
※다운로드하시면 더 선명한 자료를 보실 수 있습니다.
데이터에서 가치를 찾고 수익화하기까지 지난 1년간 겪었던 과정 및 국내 기업들이 찾는 데이터는 무엇이었는지 공유드리고자 합니다.
목차
1. 데이터로 인사이트를 찾는 여정
2. 인사이트에서 수익을 만들기까지
3. 데이터 제공 및 활용 사례
대상
- 데이터를 다루는 개발자
- 데이터 분석가
- 데이터로 사업을 고민하는 분
- 데이터 활용에 관심 있는 누구나
■관련 동영상: https://youtu.be/A9QiWjp1mb4
※다운로드하시면 더 선명한 자료를 보실 수 있습니다.
서버를 개발하면서 대규모 테스트를 어떤 식으로 진행할 것인지 고민하고 설계했던 내용과 그 과정에서 겪었던 시행착오를 공유하고자 합니다.
목차
1. 부하 테스트, 이것만 모니터링하면 끝?
2. Web, TCP Game Server
3. TCP Stress Test
4. 이렇게 모니터링해 보자
5. 시행착오
6. Q&A
대상
서버-클라이언트 테스트에 관심 있는 분 누구나
■관련 동영상: https://youtu.be/WhkZP4ZATmA
※다운로드하시면 더 선명한 자료를 보실 수 있습니다.
동접 200만 명이 접속할 수백 대의 게임 서버가 최소한의 MySQL 서버만으로 서비스할 수 있는 구조를 설명합니다.
고성능/고효율의 MySQL 스케일링 기법을 공유합니다. 대규모 게임 서비스에서 이미 검증된 것은 안 비밀~
목차
1. 기본적인 아기텍처
2. ProxySQL을 이용한 더 나은 아키텍처
3. 최종 아키텍처
대상
- 대규모 게임 서비스에 MySQL을 사용한 경험에 관심 있는 분
- ProxySQL에 관심이 있는 서버 개발자 혹은 DBA
- 게임 서버 개발 과정에서 DB 쪽을 유연하게 구성하고 싶은 분
■관련 동영상: https://youtu.be/8Eb_n7JA1yA
※다운로드하시면 더 선명한 자료를 보실 수 있습니다.
언리얼 엔진 프로그래밍을 시작하면, 편리하지만 한편으로는 골치아픈 UObject 시스템을 만나게 됩니다.
이 발표에서는 C++ 프로그래머를 대상으로 UObject 시스템과 그 핵심 기능인 리플렉션, 가비지 컬렉션을 소개하고 그 동작 원리를 함께 들여다봅니다.
목차
1. 일반적인 리플렉션의 개념
2. 언리얼엔진의 리플렉션
3. 일반적인 가비지컬렉션의 개념
4. 언리얼엔진의 가비지 컬렉션
대상
- C++ 개발자
- 언리얼 C++ 프로그래밍에 관심 있는 분
■관련 동영상: https://youtu.be/VpEe9DbcZIs
※다운로드하시면 더 선명한 자료를 보실 수 있습니다.
NHN의 게임은 어떻게 글로벌 서비스를 준비하는지, 시행착오와 이슈, 사례를 중심으로 공유합니다.
TOAST와 Gamebase 등 인프라와 플랫폼 중심의 해결 방식을 제안합니다.
목차
1. 왜 글로벌 서비스인가?
2. 처음 직면하게 될 문제들
3. 해외 이용자들의 다양한 요구
4. 사례 - 리소스 배포와 멀티 스레드 다운로드
5. 사례 - 글로벌 인프라 구성
6. 사례 - 보안 침해
7. 인프라 스케일링
대상
- 내 게임을 해외에 출시하고 싶은데, 어떤 기술적인 준비가 필요할지 궁금한 분
- NHN은 어떻게 글로벌에 게임 서비스를 하는지 궁금한 분
■관련 동영상: https://youtu.be/3O8RQboMMh8
[2019] 배틀로얄 전장(map) 제작으로 알아보는 슈팅 게임 레벨 디자인NHN FORWARD
※다운로드하시면 더 선명한 자료를 보실 수 있습니다.
배틀로얄 게임 전장(맵) 레벨 디자인의 경험과 노하우를 공유하려 합니다.
100인 이상의 PVP 사용자가 대전하는 오픈 필드 전장을 디자인할 때 레벨 기획자가 가져야 할 관점과 고려 사항을 다룹니다. 인도어 FPS와 오픈 필드 배틀로얄 게임의 레벨 관점 차이와 오픈 필드 전장을 효과적으로 제작하기 위한 작법을 사례와 함께 설명합니다.
목차
1. 범위 - 강연에서 다룰 레벨 디자인의 영역은?
2. 관점 - 일반 슈팅 맵과 배틀로얄 맵의 레벨 시각
3. 작법 - 어떤 방식으로 배틀로얄 맵을 만들 것인가?
4. 이슈 - 문제와 고민거리는 무엇인가?
대상
- FPS/TPS 레벨 디자인에 관심 있는 분
- 배틀로얄 게임 디자인에 관심 있는 분
■관련 동영상: https://youtu.be/ZWJKvCi3Njc
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 부하 점검 :
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!
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. 처리
21. 21 / 58
jvm-tools란
특징
기능이 다양함
빌드 절차
직접 빌드를 해야 사용할 수 있음
git 에서 클론 후
을 실행하면 sjk/target 디렉터리에 jar 파일이 생성됨
주요 사용 시기
CPU 사용량이 높은 쓰레드를 확인하고자 할 때
flame 그래프로 성능을 확인하고자 할 때
$ mvn package -DskipTests
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 그래프란
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
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
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
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
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