🕌

Oracleインストール中にでたSysctl系エラーであたったkernel parameterについて

3 min read

Oracleインストール中にでたSysctl系エラーであたったkernel parameterについて


Table of Contents

Motivation

Documentを毎回読むのがめんどくさい・他の人がOracle沼にハマる一助になるために

そもそもsysctlとは何なのか?

  1. カーネルのランタイム中に設定を反映するコマンド
  2. /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だけ小さいことを保証する。

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

参考

https://github.com/torvalds/linux/tree/v4.15/Documentation/sysctl
https://thinkit.co.jp/cert/tech/23/5/2.htm
https://docs.oracle.com/cd/E19455-01/806-2732/6jbu8v6os/index.html
https://linuxjm.osdn.jp/html/LDP_man-pages/man2/semop.2.html
https://docs.oracle.com/cd/E19455-01/806-4505/svipc-9/index.html
https://www.atmarkit.co.jp/flinux/special/proctune/proctune02b.html