728x90
1. 리눅스 커널 이란?
리눅스 커널은 리눅스 운영체제의 주요 구성 요소이자 컴퓨터 하드웨어와 프로세스를 잇는 핵심 인터페이스.
커널의 기능
- 메모리 관리 : 메모리가 어디에서 무엇을 저장하는 데 얼마나 사용되는지를 추적한다.
- 프로세스 관리 : 어느 프로세스가 중앙 처리 장치(CPU)를 언제 얼마나 오랫동안 사용할지를 결정한다.
- 장치 드라이버 : 하드웨어와 프로세스 사이에서 중재자/인터프리터의 역할을 수행한다.
- 시스템 호출 및 보안 : 프로세스의 서비스 요청을 수신합니다.
2. 커널 파라미터란?
리눅스에서 사용되는 시스템 변수들을 의미하며, 커널 변수 값을 제어하여 시스템을 운영 용도에 맞게 최적화 할 수 있는 설정. 커널 매개변수 경로는 /proc/sys 디렉토리 밑에 존재하고 커널 파라미터의 절대 경로의 수정을 통해 설정 변경이 가능하지만 sysctl을 통해 간편하게 설정할 수 있다.
3. 커널 파라미터 설정 방법
영구 설정 방법
1) 파라미터 설정
#vi /etc/sysctl.conf
kernel.shmall = 19763530
kernel.shmmax = 80951418880
2) 설정 적용
# sysctl -p
3) 적용 확인
[root@lenovo1 etc]# sysctl -a | grep kernel.shmall
kernel.shmall = 19763530
[root@lenovo1 etc]# sysctl kernel.shmall
kernel.shmall = 19763530
임시 설정 방법
재부팅 시 적용이 초기화 된다.
1) 파라미터 설정
[root@lenovo1 etc]# sysctl -w kernel.shmall=20000000
kernel.shmall = 20000000
2) 설정 확인
[root@lenovo1 etc]# sysctl kernel.shmall
kernel.shmall = 20000000
주로 커널 파라미터 변경 및 설정 할 때
- 성능 : Network 성능 조율, 파일 시스템 성능 조율
- 서비스 : DB 설치 시 성능 조율
자주 사용되는 커널 파라미터
설정 예시 (ORACLE 19c)
# oracle-database-preinstall-19c setting for fs.file-max is 6815744
fs.file-max = 6815744
# oracle-database-preinstall-19c setting for kernel.sem is '250 32000 100 128'
kernel.sem = 250 32000 100 128
# oracle-database-preinstall-19c setting for kernel.shmmni is 4096
kernel.shmmni = 4096
# oracle-database-preinstall-19c setting for kernel.shmall is 1073741824 on x86_64
kernel.shmall = 1073741824
# oracle-database-preinstall-19c setting for kernel.shmmax is 4398046511104 on x86_64
kernel.shmmax = 4398046511104
# oracle-database-preinstall-19c setting for kernel.panic_on_oops is 1 per Orabug 19212317
kernel.panic_on_oops = 1
# oracle-database-preinstall-19c setting for net.core.rmem_default is 262144
net.core.rmem_default = 262144
# oracle-database-preinstall-19c setting for net.core.rmem_max is 4194304
net.core.rmem_max = 4194304
# oracle-database-preinstall-19c setting for net.core.wmem_default is 262144
net.core.wmem_default = 262144
# oracle-database-preinstall-19c setting for net.core.wmem_max is 1048576
net.core.wmem_max = 1048576
# oracle-database-preinstall-19c setting for net.ipv4.conf.all.rp_filter is 2
net.ipv4.conf.all.rp_filter = 2
# oracle-database-preinstall-19c setting for net.ipv4.conf.default.rp_filter is 2
net.ipv4.conf.default.rp_filter = 2
# oracle-database-preinstall-19c setting for fs.aio-max-nr is 1048576
fs.aio-max-nr = 1048576
# oracle-database-preinstall-19c setting for net.ipv4.ip_local_port_range is 9000 65500
net.ipv4.ip_local_port_range = 9000 65500
- fs.file-max : 시스템에서 동시에 오픈 가능한 파일의 수와 연관된 파일 핸들의 최대값
- kernel.sem
- semmsl : 세마포어 세트당 세마포어의 최대 개수
- semmns : 시스템 전체에 대한 세마포어의 최대 개수
- semopm : 시스템 호출(call)별로 수행될 수 있는 세마포어 작업의 수
- semmni : 시스템 전체에 대한 세마포어 세트의 최대 개수
- 세마포어(semaphore) : 오라클 백그라운드 프로세스들 간 동시성(Concurrency)을 조절하기 위해 사용
- kernel.shmmni : 공유 메모리 세그먼트의 최대 개수
- kernel.shmall : 특정 시점에 시스템에서 사용 가능한 공유 메모리의 최대 크기
- kernel.shmmax : 공유 메모리 세그먼트의 최대 크기
- 커널이 응용프로그램들에게 메모리를 할당해줄 때 작게 여러 번 할당하지 않고 큰 덩어리(=세그먼트)로 한꺼번에 주게되는데 이값이 너무 작으면 DB가 시작할 때 ORA-27123 : unable to attach to shared memory segment라는 메시지가 발생할 수 있고 너무 크면 세그먼트의 사용되지 않는 빈 공간을 두기 때문에 메모리 낭비가 발생함.
- 이 값의 기본 값은 32MB. 오라클 사용 시에는 2G로 설정하도록 권장.
- kernel.panic_on_oops : 버그가 발생하면 시스템 PANIC 상태로 처리할지를 결정
- net.core.rmem_default : TCP 수신 버퍼 크기의 기본값 설정
- net.core.rmem_max : TCP 수신 버퍼 크기의 최대값 설정
- net.core.wmem_default : TCP 송신 버퍼 크기의 기본값 설정
- net.core.wmem_max : TCP 송신 버퍼 크기의 최대값 설정
- net.ipv4.conf.default.rp_filter : 모든 인터페이스에서 들어오는 패킷에 대해 reply를 하여 들어오는 인터페이스로 나가지 못하는 패킷을 거부함
- fs.aio-max-nr : 동시에 들어오는 요청의 개수를 제한함
- net.ipv4.ip_local_port_range : 시스템에 접속할 때 사용할 수 있는 네트워크 포트의 범위
3. 사용자 리소스 설정 (shell limit)
shell limit?
shell과 shell이 실행한 프로세스에 대하여 시스템 상의 사용 자원을 제한할 수 있도록 해주는 설정.
limit 설정 시 두가지 종류의 limit이 존재한다.
- hard limit : soft limit에서 최대로 늘릴 수 있는 한도이며, 슈퍼유저(즉, root)에 의해서 조정이 가능함
- soft limit : 새로운 프로세스가 생성되면 기본적으로 적용되는 제한값이다.
shell limit을 사용하는 이유
웹 서비스를 운영 할 때 동시 접속자가 많은 경우에 따라 웹 서비스 프로세스 수와 해당 프로세스가 처리하게 되는 파일 수를 조절 하기 위해
오라클과 같은 데이터베이스 같은 경우 Linux 계정마다 실행되는 프로세스와 열린 파일의 수를 제한하는 것을 권장하기 때문
설정 방법
1) ulimit 명령어와 옵션 사용
- 현재 설정 상황 확인
[oracle@lenovo1 ~]$ ulimit -a
core file size (blocks, -c) 0
data seg size (kbytes, -d) unlimited
scheduling priority (-e) 0
file size (blocks, -f) unlimited
pending signals (-i) 1029047
max locked memory (kbytes, -l) 134217728
max memory size (kbytes, -m) unlimited
open files (-n) 1024
pipe size (512 bytes, -p) 8
POSIX message queues (bytes, -q) 819200
real-time priority (-r) 0
stack size (kbytes, -s) 10240
cpu time (seconds, -t) unlimited
max user processes (-u) 16384
virtual memory (kbytes, -v) unlimited
file locks (-x) unlimited
2) /etc/security/limits.conf 파일 수정
설정 예시 (ORACLE 19c)
oracle soft nofile 1024
oracle hard nofile 65536
oracle soft nproc 16384
oracle hard nproc 16384
oracle soft stack 10240
oracle hard stack 32768
oracle hard memlock 134217728
oracle soft memlock 134217728
- soft : 새로운 프로그램을 생성하면 기본적으로 적용되는 한도. 간간히 지키지 않아도 되는 limit
- hard : Soft한도에서 최대로 늘릴 수 있는 한도. 무조건 지켜야 하는 최대 limit
- nofile : 한 번에 열 수 있는 최대 파일 수
- nproc : 최대 프로세스의 개수(KB)
- stack : 최대 스택 사이즈(KB)
- memlock : 쉘에 허용 가능한 가상메모리의 최대량 제한
728x90
반응형
'OS > Linux' 카테고리의 다른 글
[Linux] top 명령어 (0) | 2023.01.19 |
---|---|
[Linux] kernal memory 영역 (0) | 2023.01.19 |
[Linux] ssh 접속 지연 조치 방법 (0) | 2022.12.05 |
[Linux] 정렬과 중복 처리 (sort, uniq) (0) | 2022.12.05 |
[Linux]압축 명령어 모음 (0) | 2022.04.22 |