일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- 자바
- react
- Galera Cluster
- Algorithm
- 파이썬
- Java
- Spring
- C
- mongoDB
- 알고리즘
- IT
- JavaScript
- OS
- MySQL
- 운영체제
- spring webflux
- Proxy
- design pattern
- Data Structure
- 자료구조
- redis
- Kafka
- 백준
- MSA
- JPA
- 네트워크
- c언어
- 컴퓨터구조
- 디자인 패턴
- Heap
- Today
- Total
목록Java (49)
시냅스
JVM -Xmx, -Xms option java -Xms2048m -Xmx2048m -jar app.jar Xmx 와 Xms 는 사용할 최대, 최초 힙 크기를 지정하는 데 사용됩니다. Xmx Java 프로세스에서 사용 가능한 최대 힙 크기 설정 설정하지 않으면 기본적으로 시스템 물리적 메모리 크기에 따라 결정 Xms Java 프로세스에서 사용 가능한 최초 힙 크기를 설정 설정하지 않으면 Xmx 와 동일하게 설정 Xmx 와 Xms 는 왜 지정해야 할까? JVM은 메모리가 부족하게 되면 OS에 메모리를 추가 요청하는 방식으로 힙 사이즈를 조정합니다. 이때 GC 가 발생하게 되고, JVM은 필요한 만큼 힙사이즈를 늘려가게 됩니다. 이렇게 조정하다가 만약 머신의 물리 메모리 사이즈를 넘어가게 되면 가상 메모리를..
Connection timeout handshake 시도 중 서버로부터 응답이 없어서 연결 시간이 초과됨 서버와의 handshake 과정에서 연결이 성립되지 않은 경우라고 볼 수 있다. @Test void ConnectionTimeOut() throws IOException { Socket socket = new Socket(); SocketAddress unavailableHost = new InetSocketAddress("3.3.3.3", 99); socket.connect(unavailableHost, (int) Duration.ofMillis(1000).toSeconds()); } 1초 동안 연결을 시도하고, 연결이 되지 않는다면 위와 같이 Connection timeout 에러를 확일할 수 있..
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 애플리케이션의 모니터링..
nGrinder JMeter 와 같은 부하 및 성능 테스트 도구 JMeter 와 차이점은 JMeter 는 단일 데스크톱 컴퓨터에서 수행되는 반면에 nGrinder 는 컨트롤러 및 에이전트로 구성된 분산 아키텍처로 수행된다. nGrinder는 jython 또는 Groovy 같은 스크립트 언어를 사용하여 스크립트를 작성한다. 클라우드 환경에서도 실행 가능하다. Controller 테스트를 생성하고, 실행하고, 테스트 결과를 수집하고 분석한다. 단일 머신에 설치된다. Agent 컨트롤러가 생성한 테스트를 수행하는 실행 환경. 각 에이전트는 분산된 머신 또는 가상 머신에 설치된다. 에이전트가 테스트에 필요한 부하를 생성하고, 데이터를 수집하여 컨트롤러에 전송한다. 설치 https://github.com/nave..
JMX jmx는 jdk 1.5 부터 포함된 Java 애플리케이션의 모니터링 관리를 위한 표준 API 이다. 애플리케이션의 상태, 성능 및 리소스 사용 등과 같은 정보를 수집하고 이를 모니터링, 관리 및 제어하는 데 사용된다. JMX MBean(Managed Bean) 이라는 개념을 사용하여 모니터링 및 관리할 수 있는 자원을 표현한다. MBean 은 JMX 인프라스트럭처에 등록되며, 클라이언트는 MBean에 대한 요청을 보내어 정보를 얻거나 작업을 수행할 수 있다. MBean Standard MBean 변경이 많지 않은 시스템을 관리하기 위한 MBean이 필요한 경우 사용 Dynamic MBean 애플리케이션이 자주 변경되는 시스템을 관리하기 위한 MBean이 필요한 경우 사용 Model MBean 어떤..
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..
Annotation Processor 컴파일 단계에서 유저가 정의한 어노테이션의 소스 코드를 분석, 처리하기 위해 사용되는 Hook 자바 컴파일러의 플러그인 일종 컴파일 에러나 컴파일 경고를 만들어 냄 자바 컴파일러에 의해 소스코드(.java) 와 바이트코드(.class)를 내보내기도 한다. annotation processor를 통해서 메소드, 필드 등을 생성, 수정하거나 인터페이스만을 가지고도 구현부를 생성해줄 수 있다. 장정 런타임 전에 컴파일 단계에서 수행되기 때문에 비용이 제로에 가깝다. 리플렉션을 사용하지 않아 런타임 시에 예외를 발생시키지 않는다. Boilerplate code를 생성해준다. 단점 기존 클래스 파일에 소스(AST)를 변경할 때는 일종의 해킹이다. 프로세싱 단계 자바 컴파일러가..
GC stop the world GC를 실행하기 위해 JVM이 애플리케이션의 실행을 멈춤 gc를 실행하는 쓰레드를 제외한 나머지 쓰레드는 작업을 멈춤 어떤 GC 알고리즘을 사용하더라도 꼭 발생 대개의 GC 튜닝은 이 시간을 줄이는 것 가비지 컬렉터의 실행 조건 JVM이 OS로부터 메모리를 부여 받고 프로그램을 실행하다가 메모리가 부족하여 OS에게 추가로 메모리를 요청하는 시점에 실행된다. 혹은 JVM의 idle time에 실행된다. dangling object가 그 대상이다. System.gc() 를 호출해선 안된다. System.gc() 는 garbage collection 을 실행하는 함수 자바에서는 명시적으로 메모리를 지정하여 해제하지 않기 때문에 객체를 null 로 지정하거나 System.gc()..
함수형 프로그래밍 순수함수(pure function)를 조합하고 공유 상태(shared state), 변경 가능한 데이터(mutable data) 및 부작용 (side-effects)를 피하는 기본 원칙에 따라 소프트웨어를 구성하는 프로그래밍 패러다임 절차보다 기능에 초점을 맞춘다. 1급 객체 (first object) 변수나 데이터 구조 안에 넣을 수 있다. 파라미터로 전달할 수 있다. 동적으로 프로퍼티 할당이 가능 리턴값으로 사용할 수 있다. 자바의 경우 함수형 인터페이스를 통해 구현이 가능 순수 함수 (pure function) 순수 함수란 같은 입력에 대해 항상 같은 출력을 반환하는 함수 멀티스레드에서도 안전하고 병렬처리 및 계산도 가능하다. 동일한 입력에 대해 항상 같은 값을 반환한다. 부수효과..
선언적 트랜잭션과 AOP 개발자는 트랜잭션 처리가 필요한 곳에 @Transactional 애노테이션만 붙여주면 된다. @Transactional 애노테이션이 특정 클래스나 메서드에 하나라도 있다면 실제 객체 대신에 트랜잭션을 처리해주는 프록시 객체가 스프링 빈에 등록된다. 스프링의 트랜잭션 AOP는 이 애노테이션을 인식해서 트랜잭션을 처리하는 프록시를 적용해준다. 위 케이스에서 tx()의 경우 프록시 객체가 호출되고 트랜잭션이 적용된다. nonTx() 는 트랜잭션이 없는 것을 확인할 수 있다. 트랜잭션은 구체적이고 자세한 것이 높은 우선순위를 가진다. e.g. 클래스 < 메서드 만약 트랜잭션이 적용되지 않은 함수 내부에서 트랜잭션이 적용된 함수를 호출한다면 트랜잭션이 적용되지 않는다. 객체.externa..