
- Oracle Linux 9.7
Oracle Database 12cの公式ドキュメントのインストール手順は、事前設定として/etc/profileにulimitを追記する記述がありました。
ところが、Oracle AI Database / Oracle Databaseの最新の公式ドキュメントは、/etc/profileの追記が見当たらず、/etc/security/limits.confの追記だけが説明されています。
本記事では、なぜ/etc/profileが不要になったのかを、実機で検証してまとめました。
結論
リソース制限(nofile / nproc / stack)は、/etc/security/limits.confの追記だけで十分だからです。
逆に/etc/profileのulimit設定だけでは、ログイン方法によって設定が適用されたりされなかったり不安定だったため、/etc/security/limits.confの追記だけにしたと考えられます。
検証環境
- OS : Oracle Linux 9.7
- ユーザ:oracle / learn
- 確認コマンド
- ulimit -Sn # soft nofile
- ulimit -Hn # hard nofile
- ulimit -Su # soft nproc
- ulimit -Hu # hard nproc
- ulimit -Ss # soft stack
- ulimit -Hs # hard stack
初期状態(何も設定していない状態)
まず、/etc/security/limits.confと/etc/profileに何も追記していない状態(今回はセッションAと呼びます)で確認します。
[oracle@learnbytebybyte ~]$ # /etc/security/limits.confと/etc/profile設定前(セッションA)
[oracle@learnbytebybyte ~]$ ulimit -Sn
1024
[oracle@learnbytebybyte ~]$ ulimit -Hn
524288
[oracle@learnbytebybyte ~]$ ulimit -Su
29685
[oracle@learnbytebybyte ~]$ ulimit -Hu
29685
[oracle@learnbytebybyte ~]$ ulimit -Ss
8192
[oracle@learnbytebybyte ~]$ ulimit -Hs
unlimited検証1:/etc/security/limits.confだけ設定した場合
/etc/security/limits.confに、oracleユーザー向けのリソース制限を追記します。
[root@learnbytebybyte ~]# # /etc/security/limits.confの設定
[root@learnbytebybyte ~]# vi /etc/security/limits.conf
<省略>
#追記
oracle soft nofile 1024
oracle hard nofile 65536
oracle soft nproc 2047
oracle hard nproc 16384
oracle soft stack 10240
oracle hard stack 32768
# End of file結果は以下のようになりました。
- セッションA(変更前から接続済みのセッション)
- リソース制限値に反映されない
- 別セッション(変更後に新しいセッション)
- リソース制限値に反映される
- su oracle(ハイフンなし)
- リソース制限値に反映される
- su – oracle(ハイフンあり)
- リソース制限値に反映される
[root@learnbytebybyte ~]# # 項目1:セッションA(変更前から接続済みのセッション)
[oracle@learnbytebybyte ~]$ ulimit -Sn
1024
[oracle@learnbytebybyte ~]$ ulimit -Hn
524288
[oracle@learnbytebybyte ~]$ ulimit -Su
29685
[oracle@learnbytebybyte ~]$ ulimit -Hu
29685
[oracle@learnbytebybyte ~]$ ulimit -Ss
8192
[oracle@learnbytebybyte ~]$ ulimit -Hs
unlimited
[oracle@learnbytebybyte ~]$ # 項目2:別セッション(変更後に新しいセッション)
[oracle@learnbytebybyte ~]$ ulimit -Sn
1024
[oracle@learnbytebybyte ~]$ ulimit -Hn
65536
[oracle@learnbytebybyte ~]$ ulimit -Su
2047
[oracle@learnbytebybyte ~]$ ulimit -Hu
16384
[oracle@learnbytebybyte ~]$ ulimit -Ss
10240
[oracle@learnbytebybyte ~]$ ulimit -Hs
32768
[learn@learnbytebybyte ~]$ # 項目3:su oracle(ハイフンなし)
[learn@learnbytebybyte ~]$ su oracle
パスワード:
[oracle@learnbytebybyte learn]$ ulimit -Sn
1024
[oracle@learnbytebybyte learn]$ ulimit -Hn
65536
[oracle@learnbytebybyte learn]$ ulimit -Su
2047
[oracle@learnbytebybyte learn]$ ulimit -Hu
16384
[oracle@learnbytebybyte learn]$ ulimit -Ss
10240
[oracle@learnbytebybyte learn]$ ulimit -Hs
32768
[oracle@learnbytebybyte learn]$ exit
[learn@learnbytebybyte ~]$ # 項目4:su oracle(ハイフンあり)
[learn@learnbytebybyte ~]$ su - oracle
パスワード:
[oracle@learnbytebybyte ~]$ ulimit -Sn
1024
[oracle@learnbytebybyte ~]$ ulimit -Hn
65536
[oracle@learnbytebybyte ~]$ ulimit -Su
2047
[oracle@learnbytebybyte ~]$ ulimit -Hn
65536
[oracle@learnbytebybyte ~]$ ulimit -Ss
10240
[oracle@learnbytebybyte ~]$ ulimit -Hs
32768
[oracle@learnbytebybyte ~]$ 検証2:/etc/profile だけ設定した場合
次に、/etc/security/limits.confの追記を削除し、/etc/profileにulimitを追記します。
[root@learnbytebybyte ~]# # /etc/security/limits.confの追記は一度削除
[root@learnbytebybyte ~]# vi /etc/security/limits.conf
[root@learnbytebybyte ~]# vi /etc/profile
if [ $USER = "oracle" ]; then
if [ $SHELL = "/bin/ksh" ]; then
ulimit -p 16384
ulimit -n 65536
else
ulimit -u 16384 -n 65536
fi
fi- セッションA(変更前から接続済みのセッション)
- リソース制限値に反映されない
- 別セッション(変更後に新しいセッション)
- リソース制限値に反映される
- su oracle(ハイフンなし)
- リソース制限値に反映されない
- su – oracle(ハイフンあり)
- リソース制限値に反映される
つまり/etc/profileのulimit設定は、ログインシェルとして起動するかどうか(su -かどうか等)に依存します。
[oracle@learnbytebybyte ~]$ # 項目1:セッションA(変更前から接続済みのセッション)
[oracle@learnbytebybyte ~]$ ulimit -Sn
1024
[oracle@learnbytebybyte ~]$ ulimit -Hn
524288
[oracle@learnbytebybyte ~]$ ulimit -Sn
1024
[oracle@learnbytebybyte ~]$ ulimit -Hn
524288
[oracle@learnbytebybyte ~]$ ulimit -Ss
8192
[oracle@learnbytebybyte ~]$ ulimit -Hs
unlimited
[oracle@learnbytebybyte ~]$ # 項目2:別セッション(変更後に新しいセッション)
[oracle@learnbytebybyte ~]$ ulimit -Sn
65536
[oracle@learnbytebybyte ~]$ ulimit -Hn
65536
[oracle@learnbytebybyte ~]$ ulimit -Su
16384
[oracle@learnbytebybyte ~]$ ulimit -Hu
16384
[oracle@learnbytebybyte ~]$ ulimit -Ss
8192
[oracle@learnbytebybyte ~]$ ulimit -Hs
unlimited
[learn@learnbytebybyte ~]$ # 項目3:su oracle(ハイフンなし)
[learn@learnbytebybyte ~]$ #設定後に別セッション別ユーザで切り替えだと制限できない
[learn@learnbytebybyte ~]$ su oracle
[oracle@learnbytebybyte learn]$ ulimit -Sn
1024
[oracle@learnbytebybyte learn]$ ulimit -Hn
524288
[oracle@learnbytebybyte learn]$ ulimit -Su
29685
[oracle@learnbytebybyte learn]$ ulimit -Hu
29685
[oracle@learnbytebybyte learn]$ ulimit -Ss
8192
[oracle@learnbytebybyte learn]$ ulimit -Hs
unlimited
[learn@learnbytebybyte ~]$ # 項目4:su oracle(ハイフンあり)
[learn@learnbytebybyte ~]$ su - oracle
パスワード:
[oracle@learnbytebybyte ~]$ ulimit -Sn
65536
[oracle@learnbytebybyte ~]$ ulimit -Hn
65536
[oracle@learnbytebybyte ~]$ ulimit -Su
16384
[oracle@learnbytebybyte ~]$ ulimit -Hu
16384
[oracle@learnbytebybyte ~]$ ulimit -Ss
8192
[oracle@learnbytebybyte ~]$ ulimit -Hs
unlimitedまとめ
今回の検証で分かったことは以下です。
- /etc/security/limits.confは、新規ログインセッションで安定して反映される
- /etc/profileのulimitは、ログイン方法に依存して反映されないケースがある(su と su – の差が出る)
インストール前提条件として「確実に満たす」必要があるリソース制限は、適用が安定している/etc/security/limits.confに寄せるのが合理的です。
最後までご愛読ありがとうございました。
