デフォルトのulimit値はどこに設定されていますか?(Linux、centos)


34

ほぼ同じ仕様のCentOS 5サーバーが2台あります。ログインして実行するulimit -uと、一方のマシンで取得しunlimited、もう一方のマシンで取得します77824

次のようなcronを実行すると:

* * * * * ulimit -u > ulimit.txt

同じ結果が得られます(unlimited77824)。

これらを変更できるように、これらがどこに設定されているかを判断しようとしています。彼らは(私のプロファイルのいずれかに設定されていない.bashrc/etc/profileなど)。これらはとにかくcronには影響しません)またはin /etc/security/limits.conf(空です)。

私はグーグルを精練しgrep -Ir 77824 /、やることさえしましたが、これまでのところ何も見つかりませんでした。これらのマシンがどのように異なる制限でプリセットされているのか理解できません。

実際、これらのマシンではなく、制限が1024非常に小さい別の(CentOS 6)マシンについて疑問に思っています。cronジョブをより高い制限で実行する必要があり、それを設定する方法を知っている唯一の方法はcronジョブ自体にあります。それは大丈夫ですが、システム全体に設定して、ハッキングほどではないようにします。

助けてくれてありがとう。これは簡単なはずです(NOT)。


編集-解決済み

わかりました、私はこれを理解しました。CentOS 6またはおそらく私のマシン構成の問題のようです。CentOS 5構成では、次を設定できます/etc/security/limits.conf

* - nproc unlimited

これにより、アカウントとcronの制限が効果的に更新されます。ただし、これは私のCentOS 6ボックスでは機能しません。代わりに、私はする必要があります:

myname1 - nproc unlimited
myname2 - nproc unlimited
...

そして、物事は期待通りに機能します。UID仕様は機能するかもしれませんが、ワイルドカード(*)はここでは間違いなく機能しません。奇妙なことに、ワイルドカードはnofile制限のために機能します。

デフォルト値が実際にどこから来ているのかを知りたい。


3
/etc/security/limits.d/かありますか?
パトリック

いいえ、そのディレクトリは空です
-nomercysir

1
一定の待機期間の後に、実際の回答として回答を投稿できます。
sysadmin1138

2
私はかつてどこかでこれを調べました。デフォルトはカーネルによって設定されます。一部はハードコーディングされ、一部は使用可能なRAMに依存します。私は11.2のOracle DB用SLES10を設定するのコンテキストでのOracle Metalinkの上でそれを見つけたと思う
ニルス

1
この質問は解決済みとマークできますか?

回答:


45

これらの「デフォルト」の制限は、以下によって適用されます。

  • Linuxカーネル起動時間(までinitのプロセス)、
  • 継承、親プロセスの制限から(fork(2)時間)、
  • ユーザーセッションが開かれたときのPAM(カーネル/継承された値を置き換えることができます)、
  • プロセス自体が(PAM&カーネル/継承した値を置き換えることができ、参照setrlimit(2))。

通常のユーザーのプロセスは、厳しい制限を上げることはできません。

Linuxカーネル

ブート時に、Linuxはinitプロセスにデフォルトの制限を設定し、他のすべての(子)プロセスに継承されます。これらの制限を確認するには:cat /proc/1/limits

たとえば、ファイル記述子の最大数ulimit -n)のカーネルのデフォルトは1024/1024(ソフト、ハード)でしたが、Linux 2.6.39では1024/4096に引き上げられました。

あなたが話しているプロセスのデフォルトの最大数はおよそに制限されています:

Total RAM in kB / 128

(少なくとも)x86アーキテクチャ用ですが、ディストリビューションによってデフォルトのカーネル値が変更される場合があるため、カーネルソースコードkernel/fork.c、を確認してくださいfork_init()。「プロセス数」の制限は、RLIMIT_NPROCと呼ばれます。

PAM

通常、ログイン時のユーザー認証を保証するために、PAMはいくつかのモジュールとともに使用されます(を参照/etc/pam.d/login)。

Debianでは、制限の設定を担当するPAMモジュールは次のとおり/lib/security/pam_limits.soです。

このライブラリはから設定を読み込みます/etc/security/limits.conf/etc/security/limits.d/*.conf、しかし、それらのファイルが空になっている場合でも、pam_limits.soはハードコードされた値を使用することがありますが、ソースコード内で確認することができること。

たとえば、Debianでは、デフォルトでプロセス最大数()が無制限になり、ファイル最大数()が1024/1024になるように、ライブラリにパッチが適用されています。nprocnofile

  case RLIMIT_NOFILE:
      pl->limits[i].limit.rlim_cur = 1024;
      pl->limits[i].limit.rlim_max = 1024;

したがって、CentOSのPAMモジュールのソースコードを確認してください(RLIMIT_NPROCを探してください)。

ただし、多くのプロセスはPAMを通過しないことに注意してください(通常、デーモンやcronジョブなど、ログインしているユーザーによって起動されない場合)。


真、要点、コメント削除。ほとんどのユーザーにとってPAMはおそらく有効になっていると思うので、まず/etc/security/limits.confファイルと/etc/security/limits.d/*ファイルを確認することをお勧めします。また、この特定のインスタンスでは、CentOS 6では、limits.dファイルを介して、デフォルトで1024プロセス/合計ユーザースレッドの制限が課されています。
rogerdpack 14

@rogerdpackはい、PAMは確かに有効になっていますが、繰り返しになりますが、私の答えで述べたように:「多くのプロセスはPAMを通過しないことに注意してくださいジョブ)」。私たちの議論には付加価値がないので、すべてのコメントを削除する場合、私は私のものを削除します。ありがとうございました。
トーター14

SuSEディストリビューションには、提供されるulimitパッケージが/etc/initscriptあります/etc/sysconfig/ulimit。「プロセスごとの制限を調整するのに便利な場所」で、で構成できます。
sendmoreinfo

また、Linux-PAMライブラリは/proc/1/limits、バージョン1.1.4(2011年リリース)以降、カーネル(つまり)によって設定された制限を読み取ります。
sendmoreinfo

@sendmoreinfoとLinux-PAMライブラリは、それらを読むこととは別に、カーネルによって設定された制限で何をしますか?
トーター

15

RHEL6(CentOS6)では、「最大ユーザープロセス」はデフォルトで1024に設定されています。
ファイルでこの値を変更できます。

/etc/security/limits.d/90-nproc.conf

文句を言う場合は、https://bugzilla.redhat.com/show_bug.cgi?id = 432903を参照してください :)


nprocのこの1024の値が正しいとは思えず、著者はそのlimits.d dirが空だったと言ったので、デフォルト値は明らかにそこに定義されていません。
トーター

Totorはあなたと技術的に議論することはできませんが、Tom Iはそれが役に立ったと思っていますので、ありがとう!
部分的に曇り

3

制限を確認したときに、rootユーザーを使用して確認していましたか?

limits.confマンページから:

注:グループおよびワイルドカードの制限は、rootユーザーには適用されません。rootユーザーに制限を設定するには、このフィールドにリテラルユーザー名rootを含める必要があります。

この場合、明示的なユーザー名を使用すると問題が解決します。


注意してください、これはおそらくDebian固有の「機能」です。
トーター

また、limits.confファイルは空です(limits.dディレクトリとして)。
トーター

3

これに関する情報はインターネット上でひどいものです。debianlinux用に作成したlimits.confファイルは、すべての可能なオプションとそれらの最大「安全」制限を示しています。

これらは設定可能な最高値であり、いくつかのものがハッシュ化され、それらをアクティブにするとエラーが発生してコンソールにログインできなくなり、コメントアウトされたオプションをご自身の責任で変更しますが、必要はありません(デフォルトは無制限ですほとんど)

私はこの情報がどこにも見つからなかったので、これが誰かに役立つことを願っています、このファイルに関する4時間の研究があります。

==== FILE START =====
# /etc/security/limits.conf
# 
#Each line describes a limit for a user in the form:
#
#<domain>        <type>  <item>  <value>
#
#Where:
#<domain> can be:
#- a user name
#- a group name, with @group syntax
#- the wildcard     *, for default entry
#- the wildcard %, can be also used with %group syntax,
#         for maxlogin limit
#- NOTE: group and wildcard limits are not applied to     root.
#  To apply a limit to the     root user, <domain> must be
#  the literal username     root.
#
#<type> can have the two values:
#- "soft" for enforcing the soft limits
#- "hard" for enforcing hard limits
#
#<item> can be one of the following:
#- core - limits the core file size (KB)
#- data - max data size (KB)
#- fsize - maximum filesize (KB)
#- memlock - max locked-in-memory address space (KB)
#- nofile - max number of open files
#- rss - max resident set size (KB)
#- stack - max stack size (KB)
#- cpu - max CPU time (MIN)
#- nproc - max number of processes
#- as - address space limit (KB)
#- maxlogins - max number of logins for this user
#- maxsyslogins - max number of logins on the system
#- priority - the priority to run user process with
#- locks - max number of file locks the user can hold
#- sigpending - max number of pending signals
#- msgqueue - max memory used by POSIX message queues (bytes)
#- nice - max nice priority allowed to raise to values: [-20, 19]
#- rtprio - max realtime priority
#- chroot - change     root to directory (Debian-specific)
#
#<domain>      <type>  <item>         <value>
#

#*               soft    core            0
#root            hard    core            100000
#*               hard    rss             10000
#@student        hard    nproc           20
#@faculty        soft    nproc           20
#@faculty        hard    nproc           50
#ftp             hard    nproc           0
#ftp             -       chroot          /ftp
#@student        -       maxlogins       4

# -- Defaults:
#(core) core file size                (blocks, -c) 0 (ulimit -Hc or -Sc)
#(data) data seg size                  (bytes, -d) unlimited
#(priority) scheduling priority               (-e) 0
#(fsize) file size                    (blocks, -f) unlimited
#(sigpending) pending signals                 (-i) 378197
#(memlock) max locked memory          (kbytes, -l) 64
# max memory size                     (kbytes, -m) unlimited
#(nofile) open files                          (-n) 65536
# pipe size                        (512 bytes, -p) 8
#(msgqueue) POSIX message queues       (bytes, -q) 819200
#(rtprio) real-time priority                  (-r) 0
#(stack) stack size                   (kbytes, -s) 8192
#(cpu) cpu time                      (seconds, -t) unlimited
#(nproc) max user processes                   (-u) 378197
# virtual memory                      (kbytes, -v) unlimited
#(locks) file locks                           (-x) unlimited

# --     root Limits:
root               -    core            -1
root               -    data            -1
root               -    fsize           -1
root               -    memlock         -1
root               -    nofile          999999
root               -    stack           -1
root               -    cpu             -1
root               -    nproc           -1
root               -    priority        0
root               -    locks           -1
root               -    sigpending      -1
root               -    msgqueue        -1
root               -    rtprio          -1
root               -    maxlogins       -1
root               -    maxsyslogins    -1
#root               -    rss             -1
#root               -    as              -1
#root               -    nice            0
#root               -    chroot          -1

#All Users:
# -- Hard Limits
*               hard    core            -1
*               hard    data            -1
*               hard    fsize           -1
*               hard    memlock         -1
*               hard    nofile          999999
*               hard    stack           -1
*               hard    cpu             -1
*               hard    nproc           -1
*               hard    priority        0
*               hard    locks           -1
*               hard    sigpending      -1
*               hard    msgqueue        -1
*               hard    rtprio          -1
*               hard    maxlogins       -1
*               hard    maxsyslogins    -1
#*               hard    rss             -1
#*               hard    as              -1
#*               hard    nice            0
#*               hard    chroot          -1

# -- Soft Limits
*               soft    core            -1
*               soft    data            -1
*               soft    fsize           -1
*               soft    memlock         -1
*               soft    nofile          999999
*               soft    stack           -1
*               soft    cpu             -1
*               soft    nproc           -1
*               soft    priority        0
*               soft    locks           -1
*               soft    sigpending      -1
*               soft    msgqueue        -1
*               soft    maxlogins       -1
*               soft    maxsyslogins    -1
*               soft    rtprio          -1
#*               soft    rss             -1
#*               soft    as              -1
#*               soft    nice            0
#*               soft    chroot          -1

#randomuser:
# -- Soft Limits
randomuser           soft    core            -1
randomuser           soft    data            -1
randomuser           soft    fsize           -1
randomuser           soft    memlock         -1
randomuser           soft    nofile          999999
randomuser           soft    stack           -1
randomuser           soft    cpu             -1
randomuser           soft    nproc           -1
randomuser           soft    priority        0
randomuser           soft    locks           -1
randomuser           soft    sigpending      -1
randomuser           soft    msgqueue        -1
randomuser           soft    maxlogins       -1
randomuser           soft    maxsyslogins    -1
randomuser           soft    rtprio          -1
#randomuser           soft    rss             -1
#randomuser           soft    as              -1
#randomuser           soft    nice            0
#randomuser           soft    chroot          -1

# End of file

2

kernel / fork.c

max_threads = mempages / (8 * THREAD_SIZE / PAGE_SIZE);

64ビットスレッドサイズは8192

 grep -i total /proc/meminfo 
 MemTotal:        8069352 kB

今、私は4で除算してKBで合計を取得します

 echo $((8069352/4))
 2017338

今、私はページ数を得ました

 echo $((8 * 8192 / 4096)
 16

最終結果は

echo $((2017338/16))
126083

このようにして、thread-maxパラメーターを取得し、デフォルトのユーザープロセス制限は半分です

init_task.signal->rlim[RLIMIT_NPROC].rlim_cur = max_threads/2;
init_task.signal->rlim[RLIMIT_NPROC].rlim_max = max_threads/2;

ルートからのulimit

ulimit -u
62932
echo $((62932*2))
125864 #we are near

1

/etc/security/limits.confのようです

http://ss64.com/bash/limits.conf.html


1
私はすでに私の投稿でそれについて言及しました。それは効果がなく、またそれらの値(無制限、77824)はそれぞれのマシンに設定されません(そのファイルは空です)。
-nomercysir

ああ、私はあなたが.bashrcなどをチェックしたのを見ましたが、あなたもこれについて言及していませんでした。
ジェームズベート

1

/etc/security/limits.confでの構成中に「noproc」の構成が機能しない可能性がもう1つあります。

設定/etc/security/limits.d/90-nproc.confをオーバーライドするファイルがもう1つあります。

*ソフトnproc 1024
ルートソフトnproc無制限

ここで* configは、以前の設定ファイルで設定したものを上書きします。したがって、理想的には、このファイルで設定を構成します。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.