Oracle Database や Grid Infrastructure の製品マニュアル(Oracle Databaseのインストール前の作業、クラスタ用Oracle Grid Infrastructureの拡張インストール前の作業)に /etc/security/limits.conf と /etc/profile を以下のように設定するよう書かれている。このように設定すると、oracle ユーザでログインする際にどのように動作するか考えてみた。
- /etc/security/limits.conf
oracle soft nproc 2047 oracle hard nproc 16384 oracle soft nofile 1024 oracle hard nofile 65536
- /etc/profile
if [ $USER = "oracle" ]; then if [ $SHELL = "/bin/ksh" ]; then ulimit -p 16384 ulimit -n 65536 else ulimit -u 16384 -n 65536 fi umask 022 fi
この場合、oracle ユーザは /etc/security/limits.conf の soft を大きな値に変更することができるが、hard より大きな値に変更することはできない。
oralce ユーザでログインすると、
- /etc/security/limits.conf の設定が有効になる
- /etc/profile により nproc と nofile のソフトリミットがハードリミットまで上げられる
という動作になる。
つまり、oracle ユーザは 16384 個のプロセスを起動することができ、65536 のファイルディスクリプタを開くことができる。
と思います。
以下はちょっと検証してみた結果。
[root@centos54 ~]# tail -n 6 /etc/security/limits.conf oracle soft nproc 2047 oracle hard nproc 16384 oracle soft nofile 1024 oracle hard nofile 65536 # End of file [root@centos54 ~]# tail -n 10 /etc/profile #if [ $USER = "oracle" ]; then # if [ $SHELL = "/bin/ksh" ]; then # ulimit -p 16384 # ulimit -n 65536 # else # ulimit -u 16384 -n 65536 # fi #umask 022 #fi [root@centos54 ~]# su - oracle [oracle@centos54 ~]$ ulimit -a|perl -nle '/open|processes/ and print' open files (-n) 1024 max user processes (-u) 2047
/etc/profile でソフトリミットを上げていないので、ソフトリミットは /etc/security/limits.conf で設定された値になっている。
[root@centos54 ~]# tail -n 6 /etc/security/limits.conf oracle soft nproc 2047 oracle hard nproc 16384 oracle soft nofile 1024 oracle hard nofile 65536 # End of file [root@centos54 ~]# tail -n 10 /etc/profile if [ $USER = "oracle" ]; then if [ $SHELL = "/bin/ksh" ]; then ulimit -p 16384 ulimit -n 65536 else ulimit -u 16384 -n 65536 fi umask 022 fi [root@centos54 ~]# su - oracle [oracle@centos54 ~]$ ulimit -a|perl -nle '/open|processes/ and print' open files (-n) 65536 max user processes (-u) 16384
/etc/profile でソフトリミットをハードリミットまで上げているので、ソフトリミットがハードリミットまで上がっている。