vps의 보류 메모리 해제

리눅스 시스템은 기본적으로 kdump를 위해 메모리 영역을 보류합니다. 이 메모리의 크기는 crashkernel 매개변수로 설정할 수 있으며, 대부분의 애플리케이션 개발자는 커널 충돌을 유발하지 않으므로 /etc/default/grub 파일을 수정하여 이 메모리를 해제할 수 있습니다.

kdump가 필요하지 않은 경우, crashkernel 매개변수를 0M-1G:0M,1G-4G:0M,4G-128G:0M,128G-:512M로 설정하면 메모리 영역을 해제할 수 있습니다.

확인 방법: cat /etc/default/grub

기본값은 다음과 같습니다:

GRUB_CMDLINE_LINUX=" vga=792 console=tty0 console=ttyS0,115200n8 net.ifnames=0 noibrs nvme_core.io_timeout=4294967295 nvme_core.admin_timeout=4294967295 iommu=pt crashkernel=0M-1G:0M,1G-4G:192M,4G-128G:384M,128G-:512M crash_kexec_post_notifiers=1"

crashkernel 필드의 의미는 0-1G 메모리 호스트는 0M 메모리를 보류하고, 1-4G 메모리 호스트는 192M 메모리를 보류하며, 4-128G 메모리 호스트는 384M 메모리를 보류하고, 128G 이상의 호스트는 512M 메모리를 보류한다는 것입니다.

1G 메모리 호스트는 1-4G 구간으로 올라가 192MB 메모리를 kdump 용도로 보류합니다. 4G 메모리 호스트는 4-128G 구간으로 올라가 384MB 메모리를 kdump 용도로 보류합니다.

수정 방법: sudo sed -i 's/crashkernel=0M-1G:0M,1G-4G:192M,4G-128G:384M,128G-:512M/crashkernel=0M-1G:0M,1G-4G:0M,4G-128G:0M,128G-:512M/' /etc/default/grub

재시작 후 적용: sudo update-grub && sudo reboot

초보 학습자가 자주 사용하는 2C1G vps를 예로 들면, 깨끗한 시스템에서 수정 전후의 메모리 공간은 다음과 같습니다. 366MB와 562MB의 차이가 상당히 큰 것을 확인할 수 있습니다.

# 수정 전
root@iZj6c0otki9ho421eewyczZ:~# free
               total        used        free      shared  buff/cache   available
Mem:          707180      340772      123400        2624      358872      366408
Swap:              0           0           0

# 수정 후
root@iZj6c0otki9ho421eewyczZ:~# free
               total        used        free      shared  buff/cache   available
Mem:          903788      341656      451380        2616      251032      562132
Swap:              0           0           0

2C4G vps의 수정 전후 메모리 공간은 다음과 같습니다. 3.1GB와 3.5GB의 차이.

# 수정 전
root@iZj6c1prxn78ilvd2inku1Z:~# free
               total        used        free      shared  buff/cache   available
Mem:         3512696      377672     2870944        1260      415116     3135024
Swap:              0           0           0

# 수정 후
root@iZj6c1prxn78ilvd2inku1Z:~# free
               total        used        free      shared  buff/cache   available
Mem:         3905912      374468     3408304        1252      270508     3531444
Swap:              0           0           0

kdump에 대한 추가 설명

Kdump는 Linux 시스템 커널이 충돌할 때 시스템 메모리 상태를 캡처하기 위해 사용되는 커널 충돌 덤프 메커니즘입니다. kexec 기술을 기반으로 하며, kexec는 BIOS 초기화 과정을 거치지 않고 하나의 Linux 커널이 다른 Linux 커널을 시작할 수 있게 해줍니다. 이를 통해 시스템이 충돌한 후 새로운 커널(캡처 커널 또는 crashkernel이라고도 함)로 빠르게 부팅할 수 있습니다.

시스템이 치명적인 오류를 만나 커널 패닉을 발생시킬 때, 현재 실행 중인 커널(메인 커널이라고도 함)은 kexec를 사용하여 미리 준비된 캡처 커널을 로드하고 시스템 메모리 내용을 지정된 위치(특정 디스크 파티션이나 네트워크를 통해 다른 머신으로 전송)에 저장합니다. 이 저장된 메모리 이미지 파일(vmcore 또는 kdump 파일)은 사후 분석에 사용할 수 있으며, 개발자나 시스템 관리자가 충돌 원인을 파악하는 데 도움이 됩니다.

kdump 기능을 활성화하려면 일반적으로 부트로더 설정을 수정하고, 커널 매개변수를 조정하며, vmcore 파일을 저장할 적절한 저장 위치를 설정해야 합니다. 이를 위해 시스템 부팅 구성에서 캡처 커널을 위해 일부 메모리를 미리 예약해야 합니다. 이렇게 하면 메인 커널이 충돌하더라도 이 메모리 영역은 영향을 받지 않아 캡처 커널이 정상적으로 작동하고 메모리 덤프 작업을 완료할 수 있습니다.