Linux Kernel Parameters

김재현·2023년 8월 2일
0

Linux

목록 보기
8/12
post-thumbnail

Kernel Parameter

커널 파라미터는 리눅스 운영 체제에서 커널 동작을 제어하고 구성하는 데 사용되는 설정 값들을 의미한다. 시스템의 동작을 조정하고 최적화하는 역할을 한다.
다양한 파라미터들은 시스템의 다른 측면에 영향을 미치며, 시스템 관리자가 시스템의 요구 사항에 맞게 조정할 수 있다.
주로 DB 서버에서 운영 체제가 어플리케이션에 적합하도록 변경이 필요하거나 시스템의 성능을 향상시키기 위해 사용된다.

커널 파라미터 설정

커널 파라미터를 설정할 때 사용하는 명령어는 # sysctl# echo 명령어가 있다.

1. sysctl

sysctl 은 리눅스/유닉스 기반의 시스템에서 커널 매개변수를 동적으로 설정하고 관리하는 도구이다.

  • sysctl을 사용하기 위해선 root 권한이 필요하다.
  • /proc/sys 디렉터리에 커널 매개변수들이 저장되어 있고 # sysctl 명령을 통해 해당 디렉터리에 접근하고 매개 변수를 읽거나 설정한다.
  1. 파라미터 설정값 확인
    # sysctl -a | grep <Parameter_name>

  2. 파라미터 설정값 변경
    # sysctl -w <Parameter_name>=<Value>

2. echo

echo 는 주어진 문자열을 표준 출력(터미널 화면)으로 보내는 데 사용되는 명령어이다.
스크립트에서 메시지를 표시하거나 변수 값을 출력할 때 사용한다.
리다이렉션 연산자(>) 를 사용하여 /proc/sys/<Paramer_name> 파일에 값을 입력함으로써 설정이 가능하다.

  1. 파라미터 설정값 확인
    # cat /proc/sys/<Parameter_name>

  2. 파라미터 설정값 변경
    # echo <Value> > /proc/sys/<Parameter_name>

위의 두 방법은 시스템이 재시작될 경우 커널의 기본 값으로 초기화된다.
설정값을 영구 적용하기 위해선 /etc/sysctl.conf 파일이나 /etc/sysctl.d/ 디렉터리에 파일을 생성한다.

# vi /etc/sysctl.d/test.conf

...
<Parameter_name> = <Value>
...

# sysctl -p 
  • 우선 순위
    sysctl 명령어와 /etc/sysctl.conf 파일에서 동일한 파라미터의 다른 설정값이 설정되어 있을 경우
  1. 명령어로 입력한 값이 우선 적용된다.
  2. 시스템이 재시작되면 /etc/sysctl.conf 파일이 적용된다.

자주 사용되는 커널 파라미터 값

1. 시스템 관련

  1. kernel.sysrq
    magic key 활성화 여부

  2. kernel.hung_task_panic
    kernel.hung_task_timeout_secs 에 설정된 시간 동안 응답이 없을 경우 패닉 발생

  3. kernel.hung_task_timeout_secs
    사용중인 프로세스의 유저 또는 kernel thread 가 메세지를 기록하기까지 대기 시간

  4. kernel.nmi_watchdog
    NMI(Non-Maskable Interrupt) watchdog thread 활성화

    NMI(Non-Maskable Interrupt) 란?

    시스템에서 중요한 이벤트가 발생했을 때 발생하는 인터럽트 중 하나로, 이 인터럽트를 무시할 수 없다는 것을 나타낸다.
    다른 인터럽트들은 소프트웨어에서 마스크 처리가 가능하여 무시하거나 뒤로 미를 수 있지만, NMI는 불가능하다.
    일반적으로 하드웨어 장애나 시스템의 중요한 상태 변경과 같은 긴급 상황에서 NMI가 발생하여 운영체제에 알려준다.

    인터럽트(Interrupt) 란?

    컴퓨터의 정상 실행 흐름을 일시적으로 멈추고, 특정 이벤트가 발생했음을 알리는 신호이다.
    주로 하드웨어나 소프트웨어에서 비동기적으로 발생한다.

    1. 하드웨어 인터럽트
      키보드나 마우스 입력, 타이머 만료, 외부 장치와의 통신 등이 있다.
    2. 소프트웨어 인터럽트
      프로그램이나 운영체제에서 발생하며 예외 상황이나 특별한 상태 변화를 나타낸다.
  5. kernel.panic
    패닉 발생 시 재부팅 시작되기 전 대기 시간(단위: 초)

  6. kernel.panic_on_unrecovered_nmi
    대부분 하드웨어 문제로 발생되며, 시스템 hang 시 NMI 시그널을 발생하여 crash 가 발생할 수 있음.
    기본적으로 사용하지 않지만, vmcore 파일 수집을 위해 사용할 수 있음.

  7. kernel.panic_on_io_nmi
    커널에서 제어 불가능한 I/O 오류로 NMI 시그널이 발생할 경우 패닉 사용 여부

  8. kernel.panic_on_oops
    커널에서 oops 나 버그가 발생해도 프로세스는 계속 진행된다.
    이 경우 oops 나 버그가 발생하더라도 core 가 생성되지 않으므로 문제 해결이 되지 않아 큰 문제가 될 가능성이 있음.

  9. kernel.core_pattern
    core 파일 생성 시 파일 이름의 포맷을 설정함.

  10. kernel.shmall
    시스템에서 사용 가능한 공유 메모리(shared memory)의 최대 값(사용 가능한 세그먼트 총합)

    - 공유 메모리(shared memory) 란?
    여러 프로세스가 데이터를 공유할 수 있도록 하는 메모리 영역이다.
    프로세스 간에 효율적으로 데이터를 교환하고 통신하기 위해 사용된다.
    일반적으로 프로세스는 독립적으로 실행되고 자체 메모리 공간을 가지지만, 때로는 데이터를 공유해야 하는 경우가 있다.
    이러한 상황에서 여러 프로세스가 동일한 메모리 영역을 공유할 수 있도록 해준다.
    shmget, shmat, shmdt 등의 시스템 호출을 사용하여 공유 메모리를 생성하고 연결한다.
    주로 성능 향상이나 데이터 공유 편의성을 위해 사용된다.

  11. kernel.shmmax
    공유 메모리 세그먼트의 최대 값(단위: byte).

  12. kernel.shmmni
    공유 메모리 세그먼트의 최소 값(단위: byte).

  13. kernel.sem
    세마포어(Semaphore)의 할당 및 동작에 대한 값으로, 커널 자원에 대한 제약 사항을 나타낸다.
    어플리케이션에서 권고한 값보다 작을 경우 어플리케이션이 정상 동작하지 않을 수 있다.

    1) semmsl
    배열당 최대 세마포어 수(max semaphores per array)

    2) semmns
    시스템 전체 최대 세마포어 수(max semaphores system wide)

    3) semmni
    최대 배열 수(max number of arrays)

    4) semopm
    세마포어 호출 당 최대 operation 수 (max ops per semop call)

  14. kernel.msgmni
    최대 허용되는 queue의 개수로, 커널 자원에 대한 제약 사항을 나타낸다.
    어플리케이션에서 권고한 값보다 작을 경우 어플리케이션이 정상 동작하지 않을 수 있다.

  15. kernel.msgmax
    메세지 큐에서 허용 가능한 메세지 사이즈의 최대 값(단위: byte)

  16. kernel.msgmnb
    기본 값으로 사용되는 최대 큐 사이즈 값(단위: byte)

  17. vm.max_map_count
    프로세스가 사용할 수 있는 메모리 맵 영역의 최대 수를 지정한다.
    대부분은 기본 값인 65530이 적절하지만, 어플리케이션에서 필요로 할 경우 값을 늘린다.

  18. fs.aio-max-n
    동시 발생되는 트랜잭션의 허용되는 최대 값

  19. fs.file-max
    defaults: 메모리 용량에 따라 달라짐
    커널에서 사용 가능한 파일 최대 개수

    /proc/sys/fs 디렉터리는 리눅스 시스템에서 파일 시스템 관련 설정과 정보를 제공하는 가상 파일 시스템이다.
    이 디렉터리 안에는 다양한 파일들이 위치하며, 각 파일은 시스템의 파일 시스템에 대한 특정 설정이나 정보를 제어한다.

    • file-max:
      경로: /proc/sys/fs/file-max
      이 파일은 시스템 전체에서 열 수 있는 파일 디스크립터의 최대 개수를 나타냅니다.
      이 값을 읽어오거나 수정하여 시스템에서 사용 가능한 파일 디스크립터의 제한을 설정할 수 있습니다.
    • file-nr:
      경로: /proc/sys/fs/file-nr
      현재 시스템에서 열려있는 파일 디스크립터의 개수와 해당 리소스의 최대 개수를 보여줍니다.
    # cat /proc/sys/fs/file-nr
    1504	0	78587
    1. 첫번째 필드: 현재 열린 파일 디스크립터 개수
    2. 두번째 필드: 시스템에서 최근 오픈한 파일 디스크립터 개수
    3. 세번째 필드: 파일 디스크립터 최대 개수(fs-max)

    - /etc/security/limits.conf 파일 nofile 값과의 차이

    1. nofile 값은 계정별로 프로세스가 오픈할 수 있는 파일 디스크립터의 개수를 지정한다.
    2. file-max 값은 시스템에서 사용할 수 있는 최대 파일 디스크립터 개수이다.

2. 네트워크 관련

  1. net.ipv4.tcp_syn_retries
    syn packet 재전송 횟수

  2. net.ipv4.tcp_retries2
    TCP 연결을 끊기 전 재시도 횟수

  3. net.ipv4.tcp_max_tw_buckets
    가질 수 있는 timewait socket 최대 수

  4. net.ipv4.tcp_fin_timeout
    사용되지 않은 connection을 닫기 위한 timeout(Close_wait socket)

  5. net.ipv4.tcp_window_scailing
    RFC 1323에 정의된 옵션으로 TCP window scailing 활성화 여부로 서로 주고 받는 호스트에 각각 설정해야한다.

    - CP window scailing 이란?
    TCP 통신에서 윈도우 크기를 확장하여 더 큰 양의 데이터를 한 번에 전송할 수 있게 하는 기술이다.
    기본적으로 TCP는 네트워크 상에서 데이터를 안정적으로 전송하기 위해 윈도우 크기를 조절하는데, 이때 윈도우 크기가 작으면 한 번에 전송되는 데이터 양이 적어지고, 반대로 크면 많은 양의 데이터를 전송할 수 있다.

    TCP Window Scaling은 이 윈도우 크기를 기본 크기를 넘어서 더 크게 조절할 수 있게 해주는 메커니즘이다. TCP 헤더에 있는 윈도우 크기 필드는 16비트로 되어있어 기본적으로 최대 65535까지의 윈도우 크기만 표현할 수 있다. 그러나 높은 대역폭과 지연 시간을 가진 네트워크에서는 이보다 큰 윈도우 크기가 필요할 수 있다.

    Window Scaling은 TCP 3-way 핸드쉐이크 중에 사용할 수 있음을 두 당사자가 서로 협상하고 설정한다. 이를 통해 16비트로 표현할 수 있는 윈도우 크기의 한계를 넘어설 수 있게 되어 대역폭이 큰 망에서 더 효율적인 데이터 전송이 가능해진다.

  6. net.bridge.bridge-nf-call-ip6tables
    bridge 네트워크를 통해 송수신되는 패킷이 iptables(ipv6) 설정에 따라 제어 여부

  7. net.ipv4.ip_forward
    커널이 처리하는 패킷에 대해 외부로 forwarding 가능 여부

출처: 에스코어

profile
Linux/Cluster/Infra Engineer

0개의 댓글

관련 채용 정보