- webhook문제가 간헐적으로 계~속 발생함- 모니터링 툴이 전무한 상황 일단 이걸 해결하고자함. - 특정시점에 발생하는 것을 확인함. - 간할적인 좀시상태도 생김보여지는 원인 - DB lock- Thread점유- CPU부하.. 로직을 잘모르니 시스템 메트릭을 분석해봐야함. 해결과정- Heap dump 분석, Thread 부하테스트 진행.. - Thread TIMED_WATING 발생이 대부분이므로 이부분을 중점적으로 확인. (lettuce-eventExecutorLoop... -> Redis문제자나?)1차 해결방법- 일단 간헐적으로 좀비상태가 되는 문제 해결책으로 문제생기면 server restart 방법을 채택 (근본적인 해결책은 아니지만)- 특정 시점 Thread Cnt가 기하 급수적으로 느는것..
연말 발송량이 많아지면서 발송처리 후 처리 작업을 위한 토픽의 컨슈머 랙이 40,000건 기준으로 6시간 이상 처리가 안되는 이슈가 생겨 처리가 필요해 보였음. 이 정도도 처리 못하는건 문제가 있다고 판단.해결 할 수 있는 방법이 몇 가지 있을듯?컨슈머 처리 속도를 높인다.1. 컨슈머 20개 토픽 20개 맞춰서 처리를 높인다. (확인해보니 토픽이 20개인데, 컨슈머는 3개인 상태로 동작하고 있음.)- 아예 토픽을 좀 더 늘리는 방법도 고려해볼 수 있을 것 같다. 하지만 컨슈머 3개인 상태로 동작하는게 큰 문제로 보여, 이 부분 부터 해결하고 고려하기로하자.2. 컨슈머의 비지니스 로직을 개선한다. (비지니스로직이 단건 씩 처리하도록 하는 부분이 많아 DB I/O가 부하가 많이 걸리도록 처리되고 있었음 ..
jvm 프로세스 상태 확인 명령어 : jps 파라미터와 함꼐 보려면 : jps -v > jps -v17201 Jps -Denv.class.path=. -Dapplication.home=/app/jdk1.8.0 -Xms8m13028 test-batch-1.2.30-SNAPSHOT.jar -Xmx3g -Xms3g -Dfile.encoding=UTF-8 -Dspring.data.elasticsearch.cluster-nodes=tas-es-master:19300 -XX:+UseG1GC -XX:MaxGCPauseMillis=20 -XX:InitiatingHeapOccupancyPercent=35 -XX:+DisableExplicitGC -Dspring.profiles.active=prod -DtargetList..
Boot에서 변경 -Xmx8g: 최대 힙 메모리를 8GB로 제한 -XX:NewSize=2g 및 -XX:MaxNewSize=2g: Young Generation 크기를 2GB로 설정하여 Old Generation이 약 6GB가 -XX:+UseG1GC: G1 가비지 컬렉터를 사용 bootRun { jvmArgs = ["-Xmx8g", "-XX:NewSize=2g", "-XX:MaxNewSize=2g", "-XX:+UseG1GC"]}JVM 옵션에서 조정-Xmx8g -XX:NewSize=2g -XX:MaxNewSize=2g-XX:+UseG1GC
더보기사용이유 : 동기 삽입으로 인한 I/O 절약 하기 위함Clickhouse 에서 Async Insert 설정을 사용하게되면, Clickhouse가 서버측에서 일괄로 처리 할 수 있습니다.Clickhouse의 기본 설정은 동기식으로 작동하게 됩니다. 아래 그림은 async_insert = 0 이 상태, 기본 설정입니다. 기본 설정을 이용하게 되면, Insert statements가 작동함에 따라 동기적으로 처리가 됩니다.아래 설정은 async_insert설정을 사용하는 방식입니다.async_insert =1 으로 설정하게 되면 async_insert를 활성화 한다는 뜻입니다. ClickHouse는 정기적으로 디스크에 플러시하기 전에 먼저 들어오는 삽입을 메모리 내 버퍼에 저장합니다.wait_for_as..
File -> Setting -> Plugins -> market 에서 Pets 검색~ GitHub - gabrielchl/intellij-pets: Adds a cute pet to your favourite IDE.Adds a cute pet to your favourite IDE. Contribute to gabrielchl/intellij-pets development by creating an account on GitHub.github.com 왔다갔따~ 귀엽다~
맨날 draw.io로 삽질하면서 그리다가 쉽게 시퀀스 다이어그램 그리는 신기술 도입..좋은 공짜 툴을 찾았다. WebSequenceDiagrams - Draw sequence diagrams online in secondsDraw sequence diagrams in seconds using this free online tool.www.websequencediagrams.com이런식으로 시퀀스 다이어그램을 쉽게 작성할 수 있다.형식만 만들어주면 빠르게 시퀀스 다이어그램을 만들 수 있을 것 같다. 실무에 써보려고 해보니 무료버전은 크게 그리면 제약이 있음..그래도 크게 복잡하지 않으면 가능하다. 그래도 text파일로 저장된거 서로 공유할 수 있을때 편할듯 [1]title 게시글 등록 시퀀스note ri..
Keys 보단, SCAN을 사용하자 # 모든 key를 조회하는 명령인 keys는 사용하지 말고, scan 명령으로 대체하여 사용해야합니다. KEYS 명령어의 위험성 가장 먼저 구현한 기능은 특정 검색 키워드의 캐시를 삭제하는 기능이었는데, key를 삭제하기 위해서는 먼저 조회를 해야 합니다. 이때 일반적으로 생각할 만한 명령어가 바로 KEYS 입니다. glob pattern으로 간단히 데이터베이스의 모든 key를 조회할 수 있고, 시간 복잡도가 O(N)이기는 하지만 공식 문서에 따르면 저사양 랩탑에서도 40ms 내에 100만 개의 key가 존재하는 데이터베이스를 스캔할 수 있다고 합니다. 그러나 이 명령에는 치명적인 문제점이 있는데, 해당 명령이 실행되는 도중에는 다른 모든 명령의 실행이 블로킹된다는 점..
목차파티셔너카프카에서 메시지 전송 구현방식 파티셔너프로듀서가 전송하려는 메시지들은 프로듀서의 send() 메소드를 통해 시리얼라이저, 파티셔너를 거쳐 카프카로 전송된다.이 과정을 파티셔닝이라고 한다.카프카의 토픽은 성능 향상을 위해 병렬 처리가 가능하도록 파티션으로 나누고, 각 파티션에 프로듀서가 전송한 메시지가 로그 세그먼트에 저장된다.프로듀서는 토픽으로 메시지를 보낼 때 해당 토픽의 어느 파티션으로 메시지를 보내야 할지를 결정 하는데, 이때 사용하는 것이 "파티셔너(partitioner)"입니다.기본적으로 메시지(레코드)의 키를 Hash처리 해 파티션을 구하는 방식을 사용하는데, 메시지의 키 값이 동일하면 해당 메시지들은 모두 같은 파티션으로 전송되는 방식으로 구현된다.배치전송 옵션buffer.mem..