Tomcat, Netty의 쓰레드 덤프 분석을 통해 병목 지점을 분석해보자 - Prometheus,Grafana를 통한 시각화 모니터링
·
backend
자바 쓰레드의 상태(Thread State)상태 전이에 대해 간략하게 설명하기 전에 종류나 알고 가자NEW : 쓰레드가 생성되었으나 아직 시작되지 않은 상태 (아직 OS 쓰레드는 존재하지 않는 상태)Thread.start()를 호출해야 OS에서 실제로 쓰레드를 생성RUNNABLE : 쓰레드가 실행 가능하여 OS의 리소스를 기다리거나 JVM 안에서 실행중인 상태OS 스케줄러의 실행 대기열에 포함되었다가 차례로 CPU에서 실행된다.BLOCKED : 쓰레드가 동기화 락을 기다리며 Block된 상태WAITING : 무한정 대기중인 쓰레드 (CPU 입장에서 Waiting과 Blocked는 동일)TIMED_WAITING : 쓰레드가 지정된 시간동안 대기TERMINATED : 실행 완료되었거나 예외가 발생하여 종료된..
Windows In Docker - C++ 프로젝트의 컨테이너화 빌드 및 관리
·
windows
Windows 환경의 C++ 프로젝트의 컨테이너 이미지 관리혹자는 Linux 환경에서 C++ 빌드도 되는데, 그냥 리눅스로 도커 이미지 빌드하면 안되냐고 할 것이다. 하지만 제목에서 말해주듯 IOCP 게임서버에 관한 내용으로, IO Completion Port는 윈도우 OS의 커널 오브젝트이다.Overlapped IO를 통해 OS에 종속될 수 밖에 없는 Proactor 비동기 기술의 비애라고 볼 수 있겠다. 어쩔 수 없이 Windows 플랫폼을 고집해야하는 상황이고, k8s 환경에서 다른 마이크로서비스들과 함께 관리하기 위해서라도 컨테이너화 빌드도 필요한 상황이다.  핵심 : Visual Studio 빌드 시스템 사용 (.vcsproj 프로젝트 파일) FROM mcr.microsoft.com/window..
Github Action으로 시작하는 GitOps 파이프라인(AWS ECR, Github Actions)
·
backend
Github Actions이 뭘까?CI/CD와 같은 workflow를 자동화 할 수 있는 도구로, 2018년부터 깃허브에서 제공하는 서비스.​깃허브를 통해서 버전 관리나 협업하는 이상, 깃허브 내의 이벤트(push,pull,merge ...) 의 발생에 대해 정해진 동작을 실행해주는 Actions 기능은 Jenkins같은 CI 툴만큼이나 편리할 수 밖에 없다. Public 레포지토리는 제한있는 무료로 사용 가능함.​Github CLI를 사용하면 Repository를 push하지 않더라도 Branch의 Actions들을 실행하고 필요한 정보를 넘겨줄 수 있다.​​​들어가기에 앞서서, 알아둬야할 핵심적인 개념을 소개하겠음 Github Actions의 구성1. WorkflowEvent를 트리거로 여러 Job으..
Docker 데몬 없이 컨테이너 이미지 빌드(kubernetes Docker 지원 중단)
·
backend
컨테이너화는 애플리케이션 배포의 필수적인 요소로 자리잡았고, Docker로 대표되는 가장 인기 있는 기술이다.​다른 k8s 문제에 대해 트러블 슈팅중에 뒤지다가 검색 키워드로 떠서 좀 찾아봤다.​kubernetes is deprecating Docker...네?kubernetes에서 docker 지원을 중단하려고 한다는 아티클을 발견해서 허겁지겁 들어가서 탐독했다.​​휴 다들 진정해 사격중지​아래 링크는 k8s 공식 문서에서 제공하는 번역본이다.https://kubernetes.io/ko/blog/2020/12/02/dont-panic-kubernetes-and-docker/​ 웃긴게, 하도 논란되니까 해명하는거 같은 내용이다.​k8s은 v1.20 이후 컨테이너 런타임(CRI)으로서 도커를 사용 중단(d..
Docker 컨테이너 패키징과 이미지 최적화의 이해
·
backend
로컬의 경우 ARM, x86 68bit 두 가지 환경이 있다.서버 환경도 보통 후자인데 크로스 플랫폼으로 빌드하지 않는 이상, 최신 버전의 맥북은 빌드시 ARM 으로 된다.​서비스 배포시 우리는 어떤 환경에서던 동일한 Dockerfile을 작성해서 컨테이너 이미지를 빌드한다.​어떻게 동일한 컨테이너 이미지를 이용해서 Docker와 kubernetes에서 이용 가능할까? 이에 대해 알려면 Docker에 대한 살짝 더 깊은 이해가 요구된다.​​​OCI(Open Container Initiative) : 저수준 컨테이너 런타임OCI 이미지 스펙을 가진 컨테이너 이미지는 OCI 런타임에서 구동 가능실제 실행할려면 isolation된 환경이 필요한데, 관련된 리눅스 기술을 관리하는 레이어Linux 운영체제의 커널..