Linux 설정 조정
RHEL 및 CentOS에서 시스템 제한 및 커널 매개변수 조정.
Linux의 기본 제한 및 커널 설정은 상대적으로 사용 빈도가 낮은 기본 시스템에 적합하지만 이러한 설정은 보다 강력하고 바쁜 구현에서는 빠르게 부적절해집니다.
대부분의 사람들이 직면하는 첫 번째 문제는 파일 설명자입니다. 기본적으로 Linux 시스템은 프로세스가 열 수 있는 파일 설명자의 수를 프로세스당 1024개로 제한합니다. 파일 디스크립터는 파일 읽기 및 쓰기에서 TCP 연결 유지 관리에 이르기까지 Linux에서 많은 작업에 사용되며 빠르게 애플리케이션을 손상시키는 병목 현상이 될 수 있습니다.
다음 명령을 사용하여 제한을 볼 수 있습니다.
ulimit -aH
core file size (blocks) unlimited
data seg size (kbytes) unlimited
file size (blocks) unlimited
max locked memory (kbytes) unlimited
max memory size (kbytes) unlimited
open files 1024
pipe size (512 bytes) 8
stack size (kbytes) unlimited
cpu time (seconds) unlimited
max user processes 4094
virtual memory (kbytes) unlimited
시스템 제한 변경
/etc/security/limits.conf에서 직접 제한을 편집하는 것은 더 이상 권장되지 않습니다. 대신 /etc/security/limits.d/에 파일을 생성해야 합니다(파일 이름의 낮은 숫자는 항목이 충돌하는 경우 높은 숫자의 값을 무시합니다).
다음은 새 서버를 프로비저닝할 때 루트 사용자와 다른 모든 사용자에 대한 값을 추가하는 샘플 스크립트입니다. 응용 프로그램은 자체 사용자 계정으로 실행되고 루트 계정은 운영 체제에서만 사용된다고 가정합니다.
echo "root soft nofile 4096" > /etc/security/limits.d/20-nproc.conf
echo "root hard nofile 65535" >> /etc/security/limits.d/20-nproc.conf
echo "* soft nofile 131072" >> /etc/security/limits.d/20-nproc.conf
echo "* hard nofile 131072" >> /etc/security/limits.d/20-nproc.conf
echo "* soft nproc 131072" >> /etc/security/limits.d/20-nproc.conf
echo "* hard nproc 131072" >> /etc/security/limits.d/20-nproc.conf
고급 커널 설정
제한 외에도 Linux 커널 매개변수는 특히 과부하 상태에서 시스템 동작에 상당한 영향을 미칠 수 있습니다.
⚠ 경고 :
Linux에서 잘못된 커널 매개변수를 적용하면 시스템이 부팅되지 않습니다. 변경하기 전에 현재 구성을 백업하고 시스템의 유효한 스냅샷/백업이 있는지 확인하십시오. 구성 파일을 수정하기 위해 시스템을 복구 모드로 부팅하는 것이 가능하지만 쉽지 않으며 권장되는 방법이 아닙니다. 희망은 전략이 아닙니다 .
바쁜 Oracle 데이터베이스 서버를 실행하는 것과 같은 일부 응용 프로그램의 경우 자체 조정 을 적용하기 위해 tuned 또는 ktune 과 같은 일부 자동 조정 서비스를 비활성화하는 것이 좋습니다.
다음 스크립트는 시스템에서 사용 가능한 메모리 양에 따라 권장 값 중 일부를 설정하므로 사용자의 용도에 맞게 조정하십시오. sed 명령은 행을 제거하고 구성 파일에서 중복을 방지하는 데 사용됩니다. 이러한 설정은 시작 시에만 적용되는 반면 스크립트 끝의 sysctl 명령은 이러한 값을 즉시 적용할 수 있지만 시스템을 재부팅하는 것이 새 값이 적용되도록 하는 가장 좋은 방법입니다.
service tuned stop
chkconfig tuned off
service ktune stop
chkconfig ktune off
############ VARIABLES TO CHANGE
# System Global Area (SGA) values from Oracle in Gig
SGA=8
# Oracle user ID
oracle_user=oracle
oracle_user_oid=$(id -g $oracle_user)
echo "fs.file-max=65536" > /etc/sysctl.conf
echo "vm.pagecache=40" >> /etc/sysctl.conf
echo "kernel.panic_on_oops=1" >> /etc/sysctl.conf
echo "fs.file-max=6815744" >> /etc/sysctl.conf
echo "fs.aio-max-nr=1048576" >> /etc/sysctl.conf
echo "net.core.rmem_default=262144" >> /etc/sysctl.conf
echo "net.core.rmem_max=4194304" >> /etc/sysctl.conf
echo "net.core.wmem_default=262144" >> /etc/sysctl.conf
echo "net.core.wmem_max=1048576" >> /etc/sysctl.conf
echo "net.bridge.bridge-nf-call-arptables=0" >> /etc/sysctl.conf
echo "net.bridge.bridge-nf-call-ip6tables=0" >> /etc/sysctl.conf
echo "net.bridge.bridge-nf-call-iptables=0" >> /etc/sysctl.conf
echo "net.ipv4.ip_local_port_range=9000 65500" >> /etc/sysctl.conf
echo "net.ipv4.tcp_fin_timeout=30" >> /etc/sysctl.conf
sed -i -e '/kernel.shmmax/d' /etc/sysctl.conf
sed -i -e '/kernel.shmall/d' /etc/sysctl.conf
#Obtain the total memory in the system in bytes:
mem=$(free -b | awk '/Mem/ {print $2}')
#Get page size in bytes:
page=$(getconf PAGE_SIZE)
#Calculate 75% of the total memory in the system in pages for SHMALL:
all=$(expr $mem \* 75 / 100 / $page + 1)
#Multiply the SHMALL value by the page size to get SHMMAX:
max=$(expr $all \* $page)
#Set the SHMMAX and the SHMALL values in the /etc/sysctl.conf file:
echo "kernel.shmmax=$max" >> /etc/sysctl.conf
echo "kernel.shmall=$all" >> /etc/sysctl.conf
sed -i -e '/kernel.shmmni/d' /etc/sysctl.conf
#Set the maximum number of shared memory segments with SHMMNI in the /etc/sysctl.conf file:
echo "kernel.shmmni=4096" >> /etc/sysctl.conf
sed -i -e '/kernel.sem/d' /etc/sysctl.conf
#Recommended minimums for semaphore operations:
#The first value, SEMMSL, is the maximum number of semaphores per semaphore set
#The second value, SEMMNS, defines the total number of semaphores for the system
#The third value, SEMOPM, defines the maximum number of semaphore operations per semaphore call
#The last value, SEMMNI, defines the number of entire semaphore sets for the system
sysctl -w "kernel.sem=250 32000 100 128"
echo "kernel.sem=250 32000 100 128" >> /etc/sysctl.conf
sysctl --system
sysctl -p
free -h
Tagged with:
performance