Latency 측정을 위해 Logstash 를 이용해 Nginx 의 access.log 를 분석하여 수집하고있다. logstash:2.4.1 -> logstash:7.16.2 로 버전을 올리면서 OOM 이 발생하여 원인을 파악하기 시작하였다. 서버 환경 Logstash 가 배포되는 서버는 Kubernetes 환경의 WorkerNode 에 배포되고 있으며 컨테이너의 리소스. requested_memory: 1G requested_cpu: 500m 증상 logstash 의 Base Image 를 logstash:2.4.1 -> logstash:7.16.2 로 변경하면 아래와 같이 logstash 가 시작되자마자 OOM Killed Last Termination State: Exit Code: 137 Reas..
RedirectAttributes 를 찾아보게 된 계기 운영중인 서비스에서 로그인 인증에 실패하면 아래와 같이 인증 실패 문구를 보여주고있다. 하지만 실패 문구가 보일때가 안보일때가 있다는 문의가 인입되었다. 실패 문구 노출 조건은 아래와 같이 Handlebars 로 작성되어있다. {{#if fail}} 비밀번호가 맞지 않습니다. {{else}} 로그인 시도시 동작 흐름은 아래와 같다. Login 에 실패할 경우 로그인 Page 로 다시 redirect 시키고 있다. 하지만 로그인에 실패하였을때 fail 여부를 전달하기 위해 Parameter 로 전달하지 않고 있다. 또한 Login Controller 에서 fail 에 대한 Attribute 를 넣어주고 있지도 않았다. 하지만 운영에서는 간헐적으로 동작..
lsof -i TCP:{PORT_NUMBER} - TCP 포로토콜의 PORT_NUMBER 를 사용하고 있는 프로세스 조회 $ lsof -i TCP:10001 COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME Postman 91813 root 71u IPv4 0x92ae7c0d52fa547 0t0 TCP localhost:53614->localhost:scp-config (ESTABLISHED) java 92001 root 151u IPv6 0x92ae7c0c98a283f 0t0 TCP *:scp-config (LISTEN) java 92001 root 153u IPv6 0x92ae7c0b765b83f 0t0 TCP localhost:scp-config->local..
현상 평소와 같은 요청량을 처리하는 서버에서 간혹 Minor GC 가 튀는 것을 Alert 과 Metric 으로 확인하였다. 요청량이 증가하지 않았는데 하나의 노드에서만 Minor GC 가 증가하였다. 각 매트릭의 의미는 아래와 같다. Minor GC count : 1분동안 발생한 gc log 에 기록된 Minor GC 수의 합. Minor GC Time : 1분동안 발생한 gc log 에 기록된 Minor GC 가 걸린 시간의 총 합. Minor GC 가 튀는 것은 당장의 문제가 되지는 않지만 문제가 누적되면 후에 장애로 발전할 수 있기 때문에 원인을 파악해보기로 결정. 분석 어떤 요청에 의해서 Minor GC 가 튀는건지 확인. 동일한 버전으로 서빙되는 서버중 특정 서버에서만 Minor GC 가 튀는..
Unreachable 객체 필터링 방법 우선 Unreachable 객체까지 파싱되도록 설정하여 힙덤프를 불러온다 https://woooongs.tistory.com/78 Heapdump 의 크기와 Mat 으로 Parsing 한 힙 크기가 다르다면 Heapdump 크기 : 1.5G Parsing 결과 : Total 357.3MB Unreachable (GC 대상) 객체는 MAT 기본 설정으로 파싱하지 않도록 되어있다. Unreachable 객체까지 Parsing 하기 위해서는 Preferences > Memory Analyzer.. woooongs.tistory.com Java Basics > GC Roots 버튼 클릭 Unreachable 항목이 GC 대상이 되는 참조가 없는 객체들 하지만 아래와 같이 ..
Heapdump 크기 : 1.5G Parsing 결과 : Total 357.3MB Unreachable (GC 대상) 객체는 MAT 기본 설정으로 파싱하지 않도록 되어있다. Unreachable 객체까지 Parsing 하기 위해서는 Preferences > Memory Analyzer > Keep unreachable objects 체크 이전에 파싱된 결과는 모두 제거하고 다시 파싱. Heapdump 크기와 거의 비슷한 parsing 결과를 얻을 수 있다.
mysql-connector-java -> mariadb-connector-j 로 변경할때 같은 데이터를 바라보지만 다른 값이 리턴될 수 있다. books 테이블에는 deleted 필드가 존재하고 해당 필드에는 CHAR 형식으로 삭제 여부 데이터가 저장된다. deleted = 'Y' : 삭제된 책 deleted = 'N' : 삭제되지 않은 책 ResultSet.getBoolean() 함수를 이용하여 해당 필드의 데이터를 가져오면 'Y', 'N' 의 Char 값을 boolean 으로 리턴해준다. 이때 mysql-connector-java 와 mariadb-connector-j 의 동작 방식 차이에 의해서 리턴값이 달라진다. Connector Data Return boolean mysql-connector-..
https://github.com/mariadb-corporation/mariadb-connector-j https://mariadb.com/kb/en/failover-and-high-availability-with-mariadb-connector-j/#specifics-for-amazon-aurora mariadb-connector-j 를 사용하여 Aurora DB 로 connection 을 맺게 되면 Transaction 의 readOnly 값에 따라서 read 와 write 가 서로 다른 DNS 로 전달되게 된다. 그 과정을 코드 레벨로 확인한다. 0. read/write seperate 동작 확인 Cluster(Writer) : dev56-a.cluster Cluster(Reader) : dev5..
Gateway 서버는 Proxied 도메인으로 부터 온 응답의 일부분을 임의로 수정하곤 한다. ex) HSTS Header 처럼 보안과 관련된 헤더를 모든 요청에 일괄적으로 넣어줄때 위와 같은 역할을 수행하기 위하여 GlobalFilter 에 Response Header 를 수정하려고 시도하면 아래와 같은 예외가 발생한다. @Override public Mono filter(ServerWebExchange exchange, GatewayFilterChain chain) { return chain.filter(exchange).then(Mono.fromRunnable(() -> { exchange.getResponse().getHeaders().set("TEST_HEADER", "TEST_HEADER_VA..
- Total
- Today
- Yesterday
- router
- GlobalFilter
- circurit breaker
- reative
- notifyAll()
- custom config data convertion
- rate limit
- RouteDefinition
- getBoolean
- ConcurrentHashMap
- Seperate Chaining
- aurora
- ResultSet
- MariaDB
- RoutePredication
- referencedColumnName
- msyql-connector-java
- HashMap
- dynamodb
- mariadb-connector-j
- wait()
- AbstractMethodError
- N+1
- reactor
- Lazy
- spring cloud gateway
- Flux
- notify()
- DyanomoDB
- mariada-connector
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |