web-dev-qa-db-ja.com

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

CentOS 5サーバーが2つあり、スペックはほとんど同じです。ログインしてulimit -uを実行すると、一方のマシンではunlimitedが取得され、もう一方のマシンでは77824が取得されます。

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

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

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

私はそれらを変更できるように、これらがどこに設定されているかを決定しようとしています。それらは私のプロファイル(.bashrc/etc/profileなど)のいずれにも設定されていません。これらはいずれにせよcronには影響しません)または/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の制限に対して機能します。

デフォルトではこのファイルは空で、ハードウェアが同じでプロバイダーが同じである2つのCentOSボックスのデフォルトが異なる理由がわからなかったので、デフォルト値が実際にどこから来ているのか知りたいです。 。

34
nomercysir

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

  • 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では、ライブラリ パッチが適用されています なので、デフォルトでは、プロセスの最大数nproc)は無制限です、ファイルの最大数nofile)は1024/1024です:

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

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

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

46
Totor

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

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

不満がありたい場合は https://bugzilla.redhat.com/show_bug.cgi?id=4329 を参照してください:)

15
Tomas

これに関する情報はインターネットではひどいものです。私がdebian linuxのために作成した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
4
XionicFire

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

から limits.confマンページ:

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

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

3

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
2
c4f4t0r

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

設定/etc/security/limits.d/90-nproc.confを上書きするファイルがもう1つあります。

 * soft nproc 1024 
 root soft nproc unlimited 

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

1
Suyash Jain

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

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

1
jamesbtate