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 /にファイルを作成する必要があります(エントリが競合する場合は、ファイル名の数値が小さいほど、大きい数値の値が上書きされます)。
新しいサーバーをプロビジョニングするときに、rootユーザーと他のすべてのユーザーに値を追加するサンプルスクリプトを次に示します。アプリケーションは独自のユーザーアカウントで実行され、rootアカウントはオペレーティングシステムでのみ使用されると想定されています。
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