소개
이 랩에서는 Linux 에서 커널 메모리 제한을 확인하고 이해하는 방법을 살펴봅니다. 커널이 메모리 할당 요청을 처리하는 방식을 제어하는 vm.overcommit_memory 설정을 중심으로 다룰 것입니다.
실습 단계를 통해 sysctl 명령을 사용하여 이 커널 매개변수를 보고 임시로 수정하고, /proc/sys/vm 디렉토리를 검사하여 메모리 설정을 확인하며, /etc/sysctl.d 내에서 영구적인 커널 구성 파일을 식별하는 방법을 배우게 됩니다. 이 랩은 Linux 메모리 동작을 관리하고 이해하는 데 실질적인 경험을 제공할 것입니다.
sysctl vm.overcommit 으로 메모리 제한 확인
이 단계에서는 Linux 가 메모리 할당을 관리하는 방법을 살펴보고, 특히 sysctl 명령을 사용하여 vm.overcommit_memory 설정을 중점적으로 다룹니다.
sysctl 명령은 런타임에 커널 매개변수를 수정하는 데 사용됩니다. 이러한 매개변수는 종종 /proc/sys/ 디렉토리에 저장됩니다. vm.overcommit_memory 매개변수는 사용 가능한 물리적 RAM 을 초과하는 메모리 요청을 커널이 처리하는 방식을 제어합니다.
vm.overcommit_memory에는 세 가지 가능한 값이 있습니다.
0: 휴리스틱 오버커밋 (Heuristic overcommit). 커널은 메모리 할당 요청이 가능한지 추정하려고 시도합니다. 이것이 기본 설정입니다.1: 항상 오버커밋 (Always overcommit). 커널은 사용 가능한 메모리를 초과하더라도 항상 메모리 할당 요청을 허용합니다. 이는 실제로 메모리를 사용하려고 할 경우 나중에 프로세스가 종료될 수 있습니다.2: 절대 오버커밋 안 함 (Never overcommit). 커널은 사용 가능한 총 스왑 공간과 구성 가능한 물리적 RAM 의 백분율을 초과하는 메모리 할당 요청을 허용하지 않습니다.
vm.overcommit_memory의 현재 값을 확인해 보겠습니다. 터미널을 열고 다음 명령을 입력하십시오.
sysctl vm.overcommit_memory
Enter 키를 누르십시오.
다음과 유사한 출력이 표시되어야 합니다.
vm.overcommit_memory = 0
이 출력은 vm.overcommit_memory의 현재 설정이 0임을 보여줍니다. 즉, 커널이 휴리스틱 오버커밋을 사용하고 있습니다.
이 설정을 이해하는 것은 시스템 리소스를 관리하고 특정 애플리케이션에서 메모리 부족 오류를 방지하는 데 중요합니다.
이제 이 값을 임시로 변경해 보겠습니다. sudo sysctl -w를 사용하여 이 작업을 수행할 수 있습니다. -w 플래그를 사용하면 커널 매개변수에 새 값을 쓸 수 있습니다.
vm.overcommit_memory를 1로 설정하려면 다음 명령을 입력하십시오.
sudo sysctl -w vm.overcommit_memory=1
Enter 키를 누르십시오.
변경 사항을 확인하는 출력이 표시되어야 합니다.
vm.overcommit_memory = 1
이제 값이 변경되었는지 다시 확인해 보겠습니다.
sysctl vm.overcommit_memory
Enter 키를 누르십시오.
이제 출력은 다음과 같이 표시되어야 합니다.
vm.overcommit_memory = 1
sysctl -w로 변경한 사항은 임시적이며 시스템이 다시 시작될 때 재설정됩니다. 이러한 변경 사항을 영구적으로 만드는 방법은 다음 단계에서 살펴보겠습니다.
다음 단계로 진행하려면 **계속 (Continue)**을 클릭하십시오.
/proc/sys/vm 에서 메모리 설정 확인
이전 단계에서는 sysctl 명령을 사용하여 vm.overcommit_memory 커널 매개변수를 확인하고 변경했습니다. 이제 이러한 매개변수가 실제로 파일 시스템에 어디에 저장되는지 살펴보겠습니다.
Linux 는 /proc/sys에 위치한 가상 파일 시스템을 통해 커널 매개변수를 노출합니다. 이 파일 시스템은 디스크에 실제 파일을 포함하지 않고, 실행 중인 커널과 상호 작용할 수 있는 인터페이스를 제공합니다.
메모리 관련 매개변수는 /proc/sys/vm/ 디렉토리에 있습니다. ls 명령을 사용하여 이 디렉토리의 파일을 나열할 수 있습니다.
터미널을 열고 다음 명령을 입력하십시오.
ls /proc/sys/vm/
Enter 키를 누르십시오.
가상 메모리와 관련된 각 커널 매개변수를 나타내는 파일 목록이 표시됩니다. 출력은 다음과 유사합니다 (정확한 파일은 커널 버전에 따라 약간 다를 수 있음).
admin_reserve_kbytes hugetlb_shm_group oom_kill_allocating_task
block_dump laptop_mode oom_score_adj
compact_hueristics lowmem_reserve_ratio overcommit_memory
compact_memory max_map_count overcommit_ratio
... (많은 파일)
overcommit_memory라는 파일을 확인하십시오. 이 파일에는 이전 단계에서 작업했던 vm.overcommit_memory 매개변수의 현재 값이 포함되어 있습니다.
cat 명령을 사용하여 이 파일의 내용을 볼 수 있습니다. 이전 단계에서 값을 1로 설정했음을 기억하십시오.
다음 명령을 입력하십시오.
cat /proc/sys/vm/overcommit_memory
Enter 키를 누르십시오.
출력은 다음과 같아야 합니다.
1
이는 sysctl -w를 사용하여 설정한 값이 /proc/sys/vm/overcommit_memory 파일에 반영되었음을 확인합니다.
cat을 사용하여 이 디렉토리에서 다른 메모리 관련 매개변수를 볼 수도 있습니다. 예를 들어, 오버커밋 비율을 보려면 다음을 수행합니다.
cat /proc/sys/vm/overcommit_ratio
Enter 키를 누르십시오.
출력은 vm.overcommit_memory가 2로 설정된 경우 사용되는 현재 오버커밋 비율을 표시합니다.
50
/proc/sys/vm/의 파일을 탐색하는 것은 Linux 에서 메모리 관리를 제어하는 다양한 커널 매개변수를 이해하는 좋은 방법입니다.
다음 단계로 이동하려면 **계속 (Continue)**을 클릭하십시오.
/etc/sysctl.d 에서 sysctl 설정 검토
이전 단계에서 sysctl을 사용하여 커널 매개변수를 확인하고 임시로 변경하는 방법과 이러한 매개변수가 /proc/sys 파일 시스템에 어떻게 반영되는지 배웠습니다. 그러나 sysctl -w로 변경한 사항은 영구적이지 않습니다. 부팅 시에도 커널 매개변수 변경 사항을 유지하려면 특정 구성 파일에서 이를 구성해야 합니다.
영구적인 sysctl 구성의 기본 위치는 /etc/sysctl.conf 파일입니다. 또한 Linux 시스템은 종종 /etc/sysctl.d/ 디렉토리를 사용하여 별도의 파일에 구성 스니펫을 저장합니다. 이 모듈식 접근 방식은 서로 다른 애플리케이션 또는 시스템 구성 요소에 대한 구성을 더 쉽게 관리할 수 있도록 합니다.
/etc/sysctl.d/ 디렉토리의 내용을 검사해 보겠습니다. ls 명령을 사용하여 이 디렉토리 내의 파일을 나열할 수 있습니다.
터미널을 열고 다음 명령을 입력하십시오.
ls /etc/sysctl.d/
Enter 키를 누르십시오.
구성 파일 목록이 표시됩니다. 이러한 파일은 일반적으로 .conf 확장자를 갖습니다. 출력은 다음과 유사할 수 있습니다.
10-console-messages.conf 10-kernel-hardening.conf 10-tcp-congestion-control.conf 99-sysctl.conf
이러한 각 파일은 parameter = value 형식으로 sysctl 매개변수 설정을 포함할 수 있습니다. 시스템이 부팅되면 /etc/sysctl.conf를 읽은 다음 /etc/sysctl.d/의 모든 파일을 사전순으로 읽어 영구적인 커널 매개변수 설정을 적용합니다.
예를 들어, 이러한 구성 파일 중 하나인 10-kernel-hardening.conf의 내용을 살펴보겠습니다. cat 명령을 사용하여 내용을 표시할 수 있습니다.
다음 명령을 입력하십시오.
cat /etc/sysctl.d/10-kernel-hardening.conf
Enter 키를 누르십시오.
이 파일에 구성된 커널 매개변수가 표시됩니다. 내용은 다양하지만 보안 또는 시스템 동작과 관련된 설정이 포함될 수 있습니다.
#
## sysctl settings for kernel hardening
#
## Disable unprivileged user namespaces
kernel.unprivileged_userns_clone=0
## Protect against symlink attacks
fs.protected_hardlinks=1
fs.protected_symlinks=1
## Disable kexec
kernel.kexec_load_disabled=1
## Disable bpf JIT
net.core.bpf_jit_enable=0
## Disable ptrace access to other processes
kernel.yama.ptrace_scope=1
kernel.unprivileged_userns_clone 및 fs.protected_hardlinks와 같은 커널 매개변수가 여기에 설정되는 방식을 볼 수 있습니다.
vm.overcommit_memory=1 설정을 영구적으로 만들려면 일반적으로 /etc/sysctl.d/ (또는 /etc/sysctl.conf에서) 의 새 파일 또는 기존 파일에 vm.overcommit_memory = 1 줄을 추가합니다. 그러나 이 소개 랩의 목적상 이 변경 사항을 영구적으로 만들지는 않겠습니다.
/etc/sysctl.d/ 디렉토리를 이해하는 것은 Linux 시스템에서 영구적인 커널 매개변수 설정을 구성하는 데 매우 중요합니다.
이 랩을 완료하려면 **계속 (Continue)**을 클릭하십시오.
요약
이 랩에서는 Linux 에서 커널 메모리 제한을 확인하고 이해하는 방법을 배웠으며, 특히 vm.overcommit_memory 설정에 중점을 두었습니다. sysctl 명령을 사용하여 이 매개변수의 현재 값을 확인했습니다. 이 매개변수는 사용 가능한 물리적 RAM 을 초과하는 메모리 할당 요청을 커널이 처리하는 방식을 제어합니다. 세 가지 가능한 값 (0, 1, 2) 과 메모리 관리에 대한 의미를 살펴보았습니다. 또한 sudo sysctl -w를 사용하여 vm.overcommit_memory 값을 임시로 변경하는 연습을 했습니다.
또한 커널 매개변수에 대한 파일 시스템 인터페이스를 제공하는 /proc/sys/vm 디렉토리를 검사하여 커널 메모리 설정을 확인했습니다. 또한 /etc/sysctl.d 디렉토리 내의 파일을 검사하여 영구적인 커널 매개변수 구성을 식별하는 방법을 배웠습니다. 이러한 단계는 Linux 환경에서 커널 메모리 제한 설정을 확인하고 찾는 방법에 대한 포괄적인 이해를 제공했습니다.



