CentOS 5サーバーが2つあり、スペックはほとんど同じです。ログインしてulimit -u
を実行すると、一方のマシンではunlimited
が取得され、もう一方のマシンでは77824
が取得されます。
私が次のようなcronを実行すると:
* * * * * ulimit -u > ulimit.txt
同じ結果が得られます(unlimited
、77824
)。
私はそれらを変更できるように、これらがどこに設定されているかを決定しようとしています。それらは私のプロファイル(.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ボックスのデフォルトが異なる理由がわからなかったので、デフォルト値が実際にどこから来ているのか知りたいです。 。
これらの「デフォルト」の制限は、以下によって適用されます。
init
プロセスへ)、fork(2)
時間)、setrlimit(2)
を参照してください)。通常のユーザーのプロセスはハード制限を引き上げることはできません。
ブート時に、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はいくつかのモジュールと共に使用されます(_/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ジョブのように、ログインしているユーザーによって起動されない場合)。
RHEL6(CentOS6)では「最大ユーザープロセス数」はデフォルトで1024に設定されています。
この値はファイルで変更できます:
/etc/security/limits.d/90-nproc.conf
不満がありたい場合は https://bugzilla.redhat.com/show_bug.cgi?id=4329 を参照してください:)
これに関する情報はインターネットではひどいものです。私が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
制限を確認したとき、rootユーザーを使用していたのですか?
から limits.conf
マンページ:
注:グループとワイルドカードの制限は、rootユーザーには適用されません。 rootユーザーの制限を設定するには、このフィールドにリテラルのユーザー名rootを含める必要があります。
この場合、明示的なユーザー名を使用すると問題が解決します。
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
/etc/security/limits.confでの構成中に「noproc」の構成が機能しない可能性がもう1つあります。
設定/etc/security/limits.d/90-nproc.confを上書きするファイルがもう1つあります。
* soft nproc 1024 root soft nproc unlimited
ここで* configは、前のconfigファイルで設定したものを上書きします。したがって、理想的には、このファイルで設定を構成します。
/etc/security/limits.confのようです