Oracleインストール中にでたSysctl系エラーであたったkernel parameterについて
Oracleインストール中にでたSysctl系エラーであたったkernel parameterについて
Table of Contents
Motivation
Documentを毎回読むのがめんどくさい・他の人がOracle沼にハマる一助になるために
そもそもsysctlとは何なのか?
- カーネルのランタイム中に設定を反映するコマンド
-
/proc/sys/
を使うことで特殊なツールを使わなくても反映できる
Oracleセットアップ中に遭遇したkernel parameters
semopm
セマフォの項目の一つ
/proc/sys/kernel/sem
にスペース区切りで記載されている
cat /proc/sys/kernel/sem
> 250 32000 32 128
左からSEMMSL、SEMMNS、SEMOPM、SEMMNIを表す
Oracleのインストールには3つ目の項目を100以上にする必要がある。
変更方法
以下のコマンドを実行する。
echo "kernel.semx=250 32000 200 1284" | sudo tee -a /etc/sysctl.conf
sudo sysctl -p
セマフォ(semaphore)とは?
一度に一つしか実行できないスレッドを保護する仕組み。線路にある信号のような概念。
Mutexと同じくロックの概念の一つ
セマフォもOSの勉強をしたときにさらった気がするけど名前を聞いて思い出せないくらいには忘れた。
コンピュータ内のセマフォは、単一の整数で表現されます。スレッドは進行が許可されるのを待ち、その後進行したことを知らせるためにセマフォに対して P 操作を実行します。
- P操作とV操作
- スレッドはセマフォが正の値を取るまで待つ必要があり、進行を開始するとセマフォから1を引き、セマフォを変更する。
- この操作をP操作という
- 処理が完了したタイミングでセマフォに1を加えることで、他の処理が侵入可能な状態に戻す。
- この処理をV処理という
- この2つの処理によってセマフォは常に0以上、V処理をされたあとの値が処理前より1だけ小さいことを保証する。
- スレッドはセマフォが正の値を取るまで待つ必要があり、進行を開始するとセマフォから1を引き、セマフォを変更する。
SEMSML
セマフォ集合の最大セマフォ数。一度にいくつの処理が実行可能化を表す。
P処理で減算されるまえの数字
SEMMNS
システム全体で全てのセマフォの数の制限
SEMOPM
SEMOPコールによって指定されるオペレーションの最大数。
SEMOPコールはSEMSMLの範囲内でSEMOPMまでセマフォ数を加算する。
SEMMNI
システム全体でのセマフォ識別子の最大値
file-max
/proc/sys/fs/file-nr
にスペース区切り、または/proc/sys/fs/file-max
で記載されている
cat /proc/sys/fs/file-nr
> 1248 0 379788
左から現在開かれているファイルの数、空きファイルの管理データ数、システム中の最大ファイル管理データ数
空きファイルの管理データ数はメモリが確保されているが、現在使用されていないファイルを表す。
変更方法
以下のコマンドを実行する。
echo "fs.file-max=6815744\n" | sudo tee -a /etc/sysctl.conf
sudo sysctl -p
rem_default/rem_max/wmem_default/wmem_max
/proc/sys/net/core
以下のそれぞれのファイルに記載されている。
それぞれソケットバッファに送信された、または受信したデータを格納しておくバッファのデフォルト、最大値を表す。
変更方法
以下のコマンドを実行する。
echo "net.core.rmem_default=262144" | sudo tee -a /etc/sysctl.conf
echo "net.core.rmem_max=41943044" | sudo tee -a /etc/sysctl.conf
echo "net.core.wmem_default=262144" | sudo tee -a /etc/sysctl.conf
echo "net.core.wmem_max=1048576" | sudo tee -a /etc/sysctl.conf
sudo sysctl -p
aio-max-nr
/proc/sys/fs/aio-nr
に記載されている。
aio(active io_setup)の最大数
変更方法
以下のコマンドを実行する。
echo "fs.aio-max-nr=1048576" | sudo tee -a /etc/sysctl.conf
sudo sysctl -p
参考
Discussion