io 부하 모니터링하기

cpu 부하가 적은데 load가 높아지는 경우가 존재합니다. 그럴 경우 대부분 io 부하 문제입니다. 1. iotop iotop은 top 처럼 프로세스 별 io 사용량을 알 수 있습니다.보안 문제로 root 권한이여야 합니다. python 기반으로 개발되어 있다네요 2. iostat iotop은 디스크 별로 사용량을 알 수 있습니다.

swap 메모리 할당하기

cloud 환경에서 메모리 부족을 격으면 서버가 다운는 현상이 발생합니다.특히 mysql 많은 메모리를 사용하게 되어 메모리가 4GB의 경우 메모리 부족으로 다운되는 경우가 빈번합니다. 보통 사용이 빈번하지 않은 메모리 영역이 swap으로 이동되게 됩니다.그러므로 큰 성능 저하는 없습니다. 2. 권한 설정 (시스템 메모리가 저장될 곳으로 권한이 엄격해야 합니다.) 3. linux swap 설정 4. swap 적용 swap 메모리 설정이 … Read more

haproxy에서 http3(QUIC) 사용하기

먼저 기본적으로 HTTP3(QUIC)가 활성화되어 있지 않아서 만약 haproxy가 설치되어 있다면 재설치하셔야 하니다. 먼저 openssl는 QUIC를 지원하지 않아 fork된 quictls를 설치해야 합니다. 설치가 완료되면 haproxy를 설치합니다. 아래는 config 예시입니다.http3는 http2로 먼저 접속 후 alt-svc 헤더를 통해 http3를 연결하게 됩니다.

Virtual Thread

기존 Thread는 실제 OS의 Thread와 1대1 대응됩니다. 여기서 너무 많은 Thread를 생성하면 오버헤드가 발생해 성능 저하가 발생되는데요 Java 17부터 추가된 Virtual Thread는 실제 스레드에 비해 경량화되어 있으며, 수백만 개의 스레드를 생성하더라도 소프트웨어적인 부하를 크게 줄일 수 있습니다. 사용하면 하나의 Thread에 여러 Vitrual thread가 대응됩니다.

ubuntu에서 최신 nginx 설치

https://nginx.org/en/linux_packages.html#Ubuntu 우분투 저장소에서 설치할지 구버전과 우분투에서 설정해둔? 설정파일들이 설치됩니다.저는 nginx 공식 저장소에서 설치하는 것을 선호.

tar 압축하기, 압축해제

옵션 설명 -c 파일과 디렉터리를 함께 묶어 아카이브를 만듭니다. -x 기존 아카이브에서 파일과 디렉터리를 추출합니다. -f 생성하거나 추출할 아카이브의 파일 이름을 지정합니다. -t 아카이브 내에 포함된 파일 및 디렉터리를 표시하거나 나열합니다. -u 기존 아카이브에 새 파일이나 디렉터리를 아카이브하고 추가합니다. -v 자세한 정보를 표시하여 보관 또는 추출 프로세스 중에 자세한 출력을 제공합니다. -A 여러 아카이브 파일을 … Read more

mysql root 계정에 다른 아이피 허용하기

create user ‘root’@’10.11.22.33’ identified by ‘암호’;grant all privileges on *.* to ‘root’@’10.11.22.33’ with grant option; 중요한 것이 ‘with grant option’ 이다.all privileges으로 모든 권한을 줘도 권한을 설정할 수 있는 권한이 없어서 완벽한 root가 아님 그리고 mysql 8에서는 flush privileges가 필요없다고 한다.

Java템플릿 엔진 성능

템플릿 엔진은 동적 콘텐츠(HTML)을 생성하는데에 쓰입니다. 대표적으로 Spring에서 사용되는 thymeleaf와 Apache Freemarker, Velocity 등이 있네요 github에서 벤치마킹을 한 결과가 있어서 가져왔습니다. 역시 JSP가 가장 빠르네요 https://github.com/jreijn/spring-comparing-template-engines

java 성능 향상 팁 (String.split, SimeDateFormat)

java 기본 클래스 중에 단순한 기능에 비하여 성능이 떨어지는 것들이 있다. 이따금 호출되는 정도라면 크게 상관 없지만, 아주 많이 반복적으로 호출되는 코드에 아래 클래스를 사용하면 성능이 떨어진다. String.split 대신에 StringTokenizer를 사용할 수 있는데 아래 조건에서는 StringTokenizer가 더 빠르다. SimeDateFormat 함수는 일단 Thread Safe가 아니다. Multi Thread 환경에서는 의도했던 결과가 나오지 않을 수도 있음. 대신에 더 … Read more

디자인패턴 책 추천

자바 개발자라면, 특히 초급이 아니려면, 반드시 읽어봐야할 유명한 책을 소개한다 ^^ Head First Design Patterns 디자인패턴 입문에 제일 좋은 책 같다. 나도 집에 디자인패턴 책이 2권이나 있었는데, 다 재미없어서(…) 읽다가 말았는데, 이 책은 다른 책과는 달리 이해하기 쉬운 순서로 패턴을 소개한다.내 기억에 제일 첫번째로 소개한 패턴은 “상속이 아닌 컴포지션을 사용하라!” 였다. 또 슷비슷하면서 다른 패턴이 … Read more