Certification/Linux(LFCS, RHCSA)

커널 매개변수 설정: 지속 및 비지속 커널 매개변수 구성

엘호리스 2024. 6. 17. 21:44

Operations Deployment - Configure kernel parameters, persistent and non-persistent

커널 매개변수: Kernel Parameter

커널 파라미터는 리눅스 운영체제에서 커널을 구성하는 설정 값들이다. 시스템 성능과 동작을 제어하고 최적화하는데 사용되기 때문에 어떤 설정들이 있는지 카테고리화 하여 기억할 필요가 있을듯 하다.
ex) 시스템 성능, 메모리관리, 네트워킹, 파일시스템, 보안, 로깅 ... 등등

커널 매개변수 변경 방법: sysctl 명령어로 일시적 변경 or /etc/sysctl.conf 파일을 수정하여 영구적 변경

일시적으로 커널 매개변수 변경하기

일시적인 커널 매개변수 변경은 시스템을 재부팅할 때까지 유효하다. sysctl 명령어를 사용하여 매개변수를 일시적으로 설정할 수 있다.

예제: kernel.printk 매개변수 변경

  1. 현재 kernel.printk 값 확인
  2. sysctl kernel.printk
  3. kernel.printk 값을 일시적으로 변경 (예: 3 4 1 3으로 설정)
  4. sudo sysctl -w kernel.printk="3 4 1 3"
  5. 변경된 값 확인
  6. sysctl kernel.printk

이 과정은 다음과 같이 요약할 수 있다:

# 현재 kernel.printk 값 확인
sysctl kernel.printk

# kernel.printk 값을 일시적으로 3 4 1 3으로 변경
sudo sysctl -w kernel.printk="3 4 1 3"

# 변경된 값 확인
sysctl kernel.printk

영구적으로 커널 매개변수 변경하기

영구적인 커널 매개변수 변경은 시스템 재부팅 후에도 적용된다. /etc/sysctl.conf 파일을 수정하여 설정할 수 있다.

예제: kernel.printk 매개변수 변경

  1. /etc/sysctl.conf 파일을 수정하여 영구적으로 변경
  2. echo "kernel.printk=3 4 1 3" | sudo tee -a /etc/sysctl.conf
  3. 변경 사항을 즉시 적용
  4. sudo sysctl -p

이 과정은 다음과 같이 요약할 수 있다:

# /etc/sysctl.conf 파일 수정하여 kernel.printk 값을 영구적으로 변경
echo "kernel.printk=3 4 1 3" | sudo tee -a /etc/sysctl.conf

# 변경 사항 즉시 적용
sudo sysctl -p

주요 카테고리별 매개변수 변경 실습(난 VirtualBox로 가상머신을 활용했다)

리눅스 관리자는 커널 매개변수를 변경하여 최적화된 시스템을 제공해줄 의무가 있다.
주요 카테고리와 그에 해당하는 매개변수 변경하는 예시를 아래에 정리해 보았다.

1. 시스템 성능 (Performance)

  • vm.swappiness: 스왑 사용 빈도를 조절.
  • vm.swappiness = 10
  • vm.dirty_ratio: 페이지 캐시의 비율을 설정.
  • vm.dirty_ratio = 15

2. 네트워킹 (Networking)

  • net.ipv4.ip_forward: IP 포워딩을 활성화.
  • net.ipv4.ip_forward = 1
  • net.core.somaxconn: 최대 연결 요청 큐 크기를 설정.
  • net.core.somaxconn = 1024

3. 파일 시스템 (Filesystem)

  • fs.file-max: 시스템에서 열 수 있는 최대 파일 수를 설정.
    fs.file-max = 500000

4. 보안 (Security)

  • kernel.randomize_va_space: 주소 공간 레이아웃 랜덤화를 활성화.
    kernel.randomize_va_space = 2

5. 디버깅 및 로깅 (Debugging and Logging)

  • kernel.printk: 커널 메시지 로그 수준을 설정.
    kernel.printk = 3 4 1 3

6. 메모리 관리 (Memory Management)

  • vm.min_free_kbytes: 시스템이 유지해야 하는 최소 여유 메모리를 설정.
    vm.min_free_kbytes = 67584

예제: /etc/sysctl.conf 파일에 적용하기

다음은 위에서 설명한 매개변수를 /etc/sysctl.conf 파일에 추가하여 시스템을 최적화하는 예시.

# /etc/sysctl.conf

# 시스템 성능
vm.swappiness = 10
vm.dirty_ratio = 15

# 네트워킹
net.ipv4.ip_forward = 1
net.core.somaxconn = 1024

# 파일 시스템
fs.file-max = 500000

# 보안
kernel.randomize_va_space = 2

# 디버깅 및 로깅
kernel.printk = 3 4 1 3

# 메모리 관리
vm.min_free_kbytes = 67584

적용하기

파일을 수정한 후 변경 사항을 즉시 적용하려면 다음 명령어를 사용.

sudo sysctl -p

커널 매개변수 변경하는 방법은 알았으니 나중에 최적화된 값을 세팅하는 튜닝 작업은 해외포럼이나 커뮤니티를 활용하여 축적된 자료를 찾는게 좋을듯 하다. 이미 많은 자료들이 축적 되어있을 것이니 최적화 설정값을 찾는데 너무 많은 시간을 뺏기지 말자.