일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- BFS
- 그래프
- DFS
- tarjan
- BindingAdapter
- 위상 정렬
- kruskal
- Java
- MST
- 분리 집합
- union-find
- springdoc
- SCC
- 백트래킹
- 이분 탐색
- MySQL
- disjoint set
- 구현
- 누적 합
- 알고리즘
- Linux
- kapt
- Meet in the middle
- 투 포인터
- miller-rabin
- spring boot
- DP
- 페르마 소정리
- 위상정렬
- concurreny
- Today
- Total
기맹기 개발 블로그
[AWS] Jenkins 빌드를 위한 메모리가 부족할 경우 본문
이번에 젠킨스를 사용해보려고 AWS EC2 프리티어를 하나 더 만들었다.
프리티어라서 t2.micro를 사용하는데, 램 용량이 1GiB이다.
CloudWatch를 이용해서 인스턴스 메모리 사용량을 모니터링해보자.
위는 젠킨스 컨테이너를 실행한 이후에 메모리 사용량이다.
51.9% (약 500MiB)를 사용한다. 벌써부터 예감이 좋지 않다.
gradle 빌드까지 하면 메모리가 부족해진다.
이로 인해서 인스턴스의 응답이 오지 않아서 중지 후 재실행해야한다.
메모리 스왑
근본적인 방법은 메모리가 넉넉한 인스턴스 유형으로 변경하는 것이겠지만, 주어진 메모리에서 최선을 다해보자.
메모리 스왑을 이용해서 disk의 일부 용량을 메모리처럼 활용해야 한다.
aws에 따르면 2GiB 이하의 메모리에서는 [메모리 * 2]가 스왑에 적절한 용량이라고 한다.
따라서 현재 메모리 1GiB * 2인 2GiB만큼 스왑을 설정해야한다.
각 링크는 aws에서 제공하는 가이드라인이다.
2번 방법이 파일 시스템을 거치는 성능 저하가 없어서 더 빨라서 시도해보려고 했다.
$ sudo fdisk -l
Disk /dev/xvda: 30 GiB, 32212254720 bytes, 62914560 sectors
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disklabel type: gpt
Disk identifier: 740A12D4-3E3E-4A54-A989-6F6AB0688304
Device Start End Sectors Size Type
/dev/xvda1 4096 62914526 62910431 30G Linux filesystem
/dev/xvda128 2048 4095 2048 1M BIOS boot
하지만 이미 /dev/xvda1에서 남은 공간(30GiB)을 모조리 사용하고 있다.
/dev/xvda2를 스왑용 파티션으로 생성하려면 /dev/xvda1을 언마운트하고 볼륨을 조정해야 하는데..
아무래도 백업도 하고 운영 중인 젠킨스 서버에서 하기는 부담스러운 것 같다.
이 방법은 로컬에서 연습을 해보고 다시 도전하는 걸로...!!
파일을 이용한 스왑
앞서 말한 이유로 파티션은 포기했고, 스왑용 파일을 만들어서 간편하게 세팅해보자.
$ sudo dd if=/dev/zero of=/swapfile bs=128M count=16
16+0 records in
16+0 records out
2147483648 bytes (2.1 GB) copied, 31.9854 s, 67.1 MB/s
앞서 말한 것처럼 메모리 * 2인 2GiB만큼 사용해야 한다.
따라서 128M * 16으로 구성하였다.
$ sudo chmod 600 /swapfile
스왑 파일의 w/r 권한을 업데이트 한다.
$ sudo mkswap /swapfile
스왑파일을 리눅스의 스왑 영역으로 설정한다.
$ sudo swapon /swapfile
스왑 공간에 스왑 파일을 추가하여 즉시 사용할 수 있도록 한다.
$ sudo vim /etc/fstab
위 파일의 가장 아래에 다음 줄을 추가하여 부팅 시에도 스왑 파일이 시작되도록 한다.
/swapfile swap swap defaults 0 0
결과
이제 빌드해도 메모리가 터지지 않고 무사히 작업이 완료된다.
스왑을 해도 2초만에 메모리 사용량은 80%를 넘는다..
이제 프리티어 ec2를 CI/CD 서버로 잘 이용해봐야겠다!!
'기록' 카테고리의 다른 글
[Linux] 사용 중인 80포트(아파치)를 종료하기 (0) | 2023.03.17 |
---|