ablog

不器用で落着きのない技術者のメモ

Oracle Database をインストール前に設定する /etc/security/limits.conf と /etc/profile について

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 ユーザでログインすると、

  1. /etc/security/limits.conf の設定が有効になる
  2. /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 でソフトリミットをハードリミットまで上げているので、ソフトリミットがハードリミットまで上がっている。