일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
31 |
- react
- 알고리즘
- redis
- JPA
- Proxy
- 네트워크
- C
- 컴퓨터구조
- design pattern
- mongoDB
- 자료구조
- IT
- c언어
- spring webflux
- 백준
- Java
- Spring
- 자바
- Kafka
- OS
- Heap
- 디자인 패턴
- MSA
- Algorithm
- 운영체제
- MySQL
- JavaScript
- 파이썬
- Galera Cluster
- Data Structure
- Today
- Total
목록Java, Spring (75)
시냅스

Thread Dump thread dump 를 활용하는 상황은 여러가지가 있을 수 있습니다. JVM이 정상적으로 작동하는데 애플리케이션이 비정상적으로 느리다거나, 액티브 트랜잭션이 쌓이기만 하는데 메모리나 CPU가 이상현상이 없다거나, 정상 작동하면서 특정 환경에서는 TCP 에러가 발생한다거나 하는 등의 상황이 될 것입니다. 이전에 살펴보았던 Heap Dump 에서도 눈으로 확인하는 것이 중요하다는 것을 배웠습니다. 이번에는 Thread Dump 를 통해서 Thread 상태에 대해 확인하는 방법을 배워보겠습니다. https://liltdevs.tistory.com/167 JMX 와 VisualVM 그리고 Heap dump 분석하기 JMX jmx는 jdk 1.5 부터 포함된 Java 애플리케이션의 모니터링..

자바 직렬화 (Java Serialization) 자바 객체를 바이트 스트림으로 변환하여 파일이나 네트워크 상에서 전송 가능하도록 만드는 것 자바 객체는 주소 값을 가지고 있고 이는 프로세스가 새로 실행될 때 마다 변하는 값이다. 프로세스를 새로 실행했을 때 해당 객체에 대한 주소가 같을 거라는 보장이 없다. 따라서 객체(혹은 레퍼런스 타입)에 대한 데이터를 외부에 저장하고 싶다면 직렬화가 필요하다. 직렬화된 객체는 다시 역직렬화(Deserialization)하여 객체로 변환될 수 있다. 역직렬화를 할 때에는 몇가지 조건이 필요하다. 직렬화 대상의 클래스가 class path 에 존재하며 import 되어 있어야 한다. 동일한 버전 (serialVersionId) 를 유지해야 한다. 만약 serialVe..

개발자에게 장애 상황에 대한 판단 및 해결 조치는 매우 중요합니다. 이 글에서는 장애 상황을 판단하는 방법에 대해 알아보고자 합니다. 웹 애플리케이션에서 장애 상황은 크게 2가지로 구분할 수 있습니다. JVM 관련 Network 관련 이번에는 각각을 모니터링 및 테스트 하기 위하여 Visual VM과 nGrinder를 활용하여 보겠습니다. https://liltdevs.tistory.com/167 JMX 와 VisualVM 그리고 Heap dump 분석하기 JMX jmx는 jdk 1.5 부터 포함된 Java 애플리케이션의 모니터링 관리를 위한 표준 API 이다. 애플리케이션의 상태, 성능 및 리소스 사용 등과 같은 정보를 수집하고 이를 모니터링, 관리 및 제어하는 데 liltdevs.tistory.com..

nGrinder JMeter 와 같은 부하 및 성능 테스트 도구 JMeter 와 차이점은 JMeter 는 단일 데스크톱 컴퓨터에서 수행되는 반면에 nGrinder 는 컨트롤러 및 에이전트로 구성된 분산 아키텍처로 수행된다. nGrinder는 jython 또는 Groovy 같은 스크립트 언어를 사용하여 스크립트를 작성한다. 클라우드 환경에서도 실행 가능하다. Controller 테스트를 생성하고, 실행하고, 테스트 결과를 수집하고 분석한다. 단일 머신에 설치된다. Agent 컨트롤러가 생성한 테스트를 수행하는 실행 환경. 각 에이전트는 분산된 머신 또는 가상 머신에 설치된다. 에이전트가 테스트에 필요한 부하를 생성하고, 데이터를 수집하여 컨트롤러에 전송한다. 설치 https://github.com/nave..

JMeter Apache 에서 만든 자바 기반의 오픈소스 부하 및 성능 테스트 툴 web application 및 api, FTP, Database, JMS, LDAP 및 SOAP등 다양한 유형의 서비스를 테스트 할 수 있다. 사용자의 요청에 대한 응답 시간, 처리량 및 성능 지표를 측정할 수 있다. 지원하는 기능 프로토콜 : HTTP, HTTPS, FTP, JDBC, LDAP, JMS, SOAP 등 테스트 계획 : 스레드 그룹, 요청, 사용자 인증 및 요청 변수 등 세밀한 제어 : 스레드 수, 요청률, 대기 시간 및 요청 순서를 제어 리포팅 및 분석 : 결과를 분석하고 그래프, 표, 트리, 요약보고서 등의 형태로 표시 설치 맥 환경에서 설치한다. brew install jmeter brew 를 통해 설..

JMX jmx는 jdk 1.5 부터 포함된 Java 애플리케이션의 모니터링 관리를 위한 표준 API 이다. 애플리케이션의 상태, 성능 및 리소스 사용 등과 같은 정보를 수집하고 이를 모니터링, 관리 및 제어하는 데 사용된다. JMX MBean(Managed Bean) 이라는 개념을 사용하여 모니터링 및 관리할 수 있는 자원을 표현한다. MBean 은 JMX 인프라스트럭처에 등록되며, 클라이언트는 MBean에 대한 요청을 보내어 정보를 얻거나 작업을 수행할 수 있다. MBean Standard MBean 변경이 많지 않은 시스템을 관리하기 위한 MBean이 필요한 경우 사용 Dynamic MBean 애플리케이션이 자주 변경되는 시스템을 관리하기 위한 MBean이 필요한 경우 사용 Model MBean 어떤..

Lock Striping 스레드 동기화는 공유하는 데이터에 대해 데이터 일관성을 보장하기 위해 사용된다. 그러나 스레드 동기화는 성능에 영향을 미치기 때문에 동기화를 최소한으로 유지하면서 스레드 안정성을 보장하는 것이 중요하다. Lock Striping 은 이를 위한 방법 중 하나로 여러 개의 락을 사용하는 대신, 락을 분할하여 동시에 여러 스레드가 접근할 수 있도록 한다. e.g. ConcurrentHashMap에서 특정 노드에 잠금을 거는 것 Lock Striping 은 스레드 경합을 줄이고 락의 사용 빈도를 줄이기 때문에 성능을 향상시킬 수 있다. ConcurrentHashMap 등에서 사용하고 있다. Cf. 락 분할 (Lock spilitting)은 하나의 클래스에서 기능적으로 락을 분리해서 사용..

Synchronized keyword static과 heap을 공유하면서 동시접근이 가능한 resource 에 관하여 race condition 을 회피하기 위해 Java에서 제공하는 키워드 함수에 synchronized 키워드를 붙이거나 (Lock in Synchronized Methods) 함수에 synchronized를 걸면 함수가 포함된 해당 객체(this)에 lock을 거는 것과 동일하다. synchronized block을 만들어 사용할 수 있다. (Synchronized Statements) 필요한 부분만 lock이 걸린다. 객체에 lock을 거는 것은 동일하다. 만약 singleton 객체에 synchronized 키워드를 사용할 경우 synchronized 메소드가 많을 수록 deadlo..

Equals 와 == 의 차이 Primitive type (원시타입) Call by value 주소로 변수 값을 바로 확인하여 계산하기 때문에 == 비교가 가능 Reference type (원시타입 이외 모두) Call by reference 주소값을 참조(포인터) 하여 사용하기 때문에 == 비교를 하게 될 경우 주소값을 비교하게 된다. String을 new (builder, buffer 포함)를 사용하지 않고 리터럴로 생성한 경우 String은 string constant pool 이라는 영역에 속한다. (intern) 같은 값에 한해서는 같은 주소값을 같게 된다. 따라서 == 비교가 가능하다. 이때 객체 내부에 Equals()를 override 하여 객체간 값에 대한 비교를 할 수 있다. Equals..

Annotation Processor 컴파일 단계에서 유저가 정의한 어노테이션의 소스 코드를 분석, 처리하기 위해 사용되는 Hook 자바 컴파일러의 플러그인 일종 컴파일 에러나 컴파일 경고를 만들어 냄 자바 컴파일러에 의해 소스코드(.java) 와 바이트코드(.class)를 내보내기도 한다. annotation processor를 통해서 메소드, 필드 등을 생성, 수정하거나 인터페이스만을 가지고도 구현부를 생성해줄 수 있다. 장정 런타임 전에 컴파일 단계에서 수행되기 때문에 비용이 제로에 가깝다. 리플렉션을 사용하지 않아 런타임 시에 예외를 발생시키지 않는다. Boilerplate code를 생성해준다. 단점 기존 클래스 파일에 소스(AST)를 변경할 때는 일종의 해킹이다. 프로세싱 단계 자바 컴파일러가..