동일한 사용자에 대한 여러 세션. 그 중 하나가 더 이상 새 프로그램을 실행할 수 없으면 그 중 어느 것도 실행할 수 없으며 해당 사용자에 대한 새 로그인도 실행할 수 없습니다. 다른 사용자는 새 로그인을 포함하여 새 프로그램을 정상적으로 실행할 수 있습니다.
일반적으로 사용자 제한은limits.conf에 있지만 설명서에는 "모든 제한 설정은 로그인별로 설정됩니다. 전역적이거나 영구적이지 않으며 세션 기간 동안만 존재합니다."라고 나와 있습니다.
메모리가 거의 부족하지만(44GB 사용 가능) 무엇을 더 봐야 할지 모르겠습니다. 동일한 UID를 사용하지만 다른 UID는 사용하지 않는 모든 세션에 전역적으로 영향을 미치는 제한 사항은 무엇입니까?
2016년 6월 12일 오후 8시 45분에 추가되도록 수정되었습니다.
다음을 작성하면서 문제가 X11과 관련이 있을 수 있다는 것을 깨달았습니다. 상자에 있는 사용자 계정은 거의 GUI 응용 프로그램에만 사용됩니다. 많은 리소스를 사용하고 좋은 오류 메시지를 표시하는 bash에서 실행해 볼 수 있는 좋은 텍스트 기반 프로그램이 있습니까? 상자는 ls를 실행할 수 없는 지점까지 도달하지 않았습니다.
불행하게도 이 문제는 일반적으로 오류 메시지를 잘 남기지 않는 GUI 프로그램(Chrome 및 Firefox)에 영향을 미칩니다. Chrome 탭에 공백이 있거나 전혀 쓸모 없는 "앗, 이런!" 오류가 표시되기 시작합니다. Firefox가 시작을 거부합니다. 내가 받은 유일한 부분적으로 유용한 오류 메시지는 bash에서 Firefox를 시작하려고 할 때 발생했습니다.
[pascal@firefox ~]$ firefox --display=:0 --safe-mode
Assertion failure: ((bool)(__builtin_expect(!!(!NS_FAILED_impl(rv)), 1))) && thread (Should successfully create image decoding threads), at /builddir/build/BUILD/firefox-45.2.0/firefox-45.2.0esr/image/DecodePool.cpp:359
#01: ???[/usr/lib64/firefox/libxul.so +0x10f2165]
#02: ???[/usr/lib64/firefox/libxul.so +0xa2dd2c]
#03: ???[/usr/lib64/firefox/libxul.so +0xa2ee29]
#04: ???[/usr/lib64/firefox/libxul.so +0xa2f4c1]
#05: ???[/usr/lib64/firefox/libxul.so +0xa3095d]
#06: ???[/usr/lib64/firefox/libxul.so +0xa52d44]
#07: ???[/usr/lib64/firefox/libxul.so +0xa4c051]
#08: ???[/usr/lib64/firefox/libxul.so +0x1096257]
#09: ???[/usr/lib64/firefox/libxul.so +0x1096342]
#10: ???[/usr/lib64/firefox/libxul.so +0x1dba68f]
#11: ???[/usr/lib64/firefox/libxul.so +0x1dba805]
#12: ???[/usr/lib64/firefox/libxul.so +0x1dba8b9]
#13: ???[/usr/lib64/firefox/libxul.so +0x1e3e6be]
#14: ???[/usr/lib64/firefox/libxul.so +0x1e48d1f]
#15: ???[/usr/lib64/firefox/libxul.so +0x1e48ddd]
#16: ???[/usr/lib64/firefox/libxul.so +0x20bf7bc]
#17: ???[/usr/lib64/firefox/libxul.so +0x20bfae6]
#18: ???[/usr/lib64/firefox/libxul.so +0x20bfe5b]
#19: ???[/usr/lib64/firefox/libxul.so +0x21087cd]
#20: ???[/usr/lib64/firefox/libxul.so +0x2108cd2]
#21: ???[/usr/lib64/firefox/libxul.so +0x210aef4]
#22: ???[/usr/lib64/firefox/libxul.so +0x22578b1]
#23: ???[/usr/lib64/firefox/libxul.so +0x228ba43]
#24: ???[/usr/lib64/firefox/libxul.so +0x228be1d]
#25: XRE_main[/usr/lib64/firefox/libxul.so +0x228c073]
#26: ???[/usr/lib64/firefox/firefox +0x4c1d]
#27: ???[/usr/lib64/firefox/firefox +0x436d]
#28: __libc_start_main[/lib64/libc.so.6 +0x21b15]
#29: ???[/usr/lib64/firefox/firefox +0x449d]
#30: ??? (???:???)
Segmentation fault
[pascal@firefox ~]$ firefox --display=:0 --safe-mode -g
1465632860286DeferredSave.extensions.jsonWARNWrite failed: Error: Could not create new thread! (resource://gre/modules/PromiseWorker.jsm:173:18) JS Stack trace: [email protected]:173:18 < [email protected]:292:9 < [email protected]:315:40 < [email protected]:933:23 < [email protected]:812:7 < this.PromiseWalker.scheduleWalkerLoop/<@Promise-backend.js:746:1 < [email protected]:770:1 < [email protected]:284:9
1465632860287addons.xpi-utilsWARNFailed to save XPI database: Error: Could not create new thread! (resource://gre/modules/PromiseWorker.jsm:173:18) JS Stack trace: [email protected]:173:18 < [email protected]:292:9 < [email protected]:315:40 < [email protected]:933:23 < [email protected]:812:7 < this.PromiseWalker.scheduleWalkerLoop/<@Promise-backend.js:746:1 < [email protected]:770:1 < [email protected]:284:9
1465632860288addons.xpi-utilsWARNFailed to save XPI database: Error: Could not create new thread! (resource://gre/modules/PromiseWorker.jsm:173:18) JS Stack trace: [email protected]:173:18 < [email protected]:292:9 < [email protected]:315:40 < [email protected]:933:23 < [email protected]:812:7 < this.PromiseWalker.scheduleWalkerLoop/<@Promise-backend.js:746:1 < [email protected]:770:1 < [email protected]:284:9
1465632860289addons.xpi-utilsWARNFailed to save XPI database: Error: Could not create new thread! (resource://gre/modules/PromiseWorker.jsm:173:18) JS Stack trace: [email protected]:173:18 < [email protected]:292:9 < [email protected]:315:40 < [email protected]:933:23 < [email protected]:812:7 < this.PromiseWalker.scheduleWalkerLoop/<@Promise-backend.js:746:1 < [email protected]:770:1 < [email protected]:284:9
1465632860289addons.xpi-utilsWARNFailed to save XPI database: Error: Could not create new thread! (resource://gre/modules/PromiseWorker.jsm:173:18) JS Stack trace: [email protected]:173:18 < [email protected]:292:9 < [email protected]:315:40 < [email protected]:933:23 < [email protected]:812:7 < this.PromiseWalker.scheduleWalkerLoop/<@Promise-backend.js:746:1 < [email protected]:770:1 < [email protected]:284:9
1465632860290addons.xpi-utilsWARNFailed to save XPI database: Error: Could not create new thread! (resource://gre/modules/PromiseWorker.jsm:173:18) JS Stack trace: [email protected]:173:18 < [email protected]:292:9 < [email protected]:315:40 < [email protected]:933:23 < [email protected]:812:7 < this.PromiseWalker.scheduleWalkerLoop/<@Promise-backend.js:746:1 < [email protected]:770:1 < [email protected]:284:9
1465632860358DeferredSave.addons.jsonWARNWrite failed: Error: Could not create new thread! (resource://gre/modules/PromiseWorker.jsm:173:18) JS Stack trace: [email protected]:173:18 < [email protected]:292:9 < [email protected]:315:40 < [email protected]:933:23 < [email protected]:812:7 < this.PromiseWalker.scheduleWalkerLoop/<@Promise-backend.js:746:1 < [email protected]:770:1 < [email protected]:284:9
1465632860359addons.repositoryERRORSaveDBToDisk failed: Error: Could not create new thread! (resource://gre/modules/PromiseWorker.jsm:173:18) JS Stack trace: [email protected]:173:18 < [email protected]:292:9 < [email protected]:315:40 < [email protected]:933:23 < [email protected]:812:7 < this.PromiseWalker.scheduleWalkerLoop/<@Promise-backend.js:746:1 < [email protected]:770:1 < [email protected]:284:9
Segmentation fault
[pascal@firefox ~]$
[pascal@localhost ~]$ ulimit -aH
core file size (blocks, -c) unlimited
data seg size (kbytes, -d) unlimited
scheduling priority (-e) 0
file size (blocks, -f) unlimited
pending signals (-i) 579483
max locked memory (kbytes, -l) 64
max memory size (kbytes, -m) unlimited
open files (-n) 65536
pipe size (512 bytes, -p) 8
POSIX message queues (bytes, -q) 819200
real-time priority (-r) 0
stack size (kbytes, -s) unlimited
cpu time (seconds, -t) unlimited
max user processes (-u) 579483
virtual memory (kbytes, -v) unlimited
file locks (-x) unlimited
[pascal@localhost ~]$ ulimit -a
core file size (blocks, -c) 0
data seg size (kbytes, -d) unlimited
scheduling priority (-e) 0
file size (blocks, -f) unlimited
pending signals (-i) 579483
max locked memory (kbytes, -l) 64
max memory size (kbytes, -m) unlimited
open files (-n) 32768
pipe size (512 bytes, -p) 8
POSIX message queues (bytes, -q) 819200
real-time priority (-r) 0
stack size (kbytes, -s) 8192
cpu time (seconds, -t) unlimited
max user processes (-u) 4096
virtual memory (kbytes, -v) unlimited
file locks (-x) unlimited
[pascal@localhost ~]$ set /proc/*/task/*/cwd/.; echo $#
306
[pascal@localhost ~]$ prlimit
RESOURCE DESCRIPTION SOFT HARD UNITS
AS address space limit unlimited unlimited bytes
CORE max core file size 0 unlimited blocks
CPU CPU time unlimited unlimited seconds
DATA max data size unlimited unlimited bytes
FSIZE max file size unlimited unlimited blocks
LOCKS max number of file locks held unlimited unlimited
MEMLOCK max locked-in-memory address space 65536 65536 bytes
MSGQUEUE max bytes in POSIX mqueues 819200 819200 bytes
NICE max nice prio allowed to raise 0 0
NOFILE max number of open files 32768 65536
NPROC max number of processes 4096 579483
RSS max resident set size unlimited unlimited pages
RTPRIO max real-time priority 0 0
RTTIME timeout for real-time tasks unlimited unlimited microsecs
SIGPENDING max number of pending signals 579483 579483
STACK max stack size 8388608 unlimited bytes
2016년 6월 13일 오후 10시 24분에 다음 내용을 추가하여 수정되었습니다.
GUI 문제가 아닙니다. 오늘 사용자를 고소하려고 했으나 소용이 없었습니다. 전혀 문제 없습니다. ls, vi를 수행하고 새 사용자를 생성하고 해당 사용자에 대해 su를 수행하면 해당 사용자에 대해 모든 것이 잘 작동합니다. 종료하고 문제가 있는 사용자에 대해 su를 시도하지만 성공하지 못합니다. Bash가 처음 로드되지만 종료해도 작동하지 않습니다. 루트로 돌아가려면 다시 연결해야 합니다.
[root@firefox ~]# su - pascal
Last login: Sat Jun 11 03:08:47 CDT 2016 on pts/1
-bash: fork: retry: No child processes
-bash: fork: retry: No child processes
-bash: fork: retry: No child processes
-bash: fork: retry: No child processes
-bash: fork: Resource temporarily unavailable
-bash-4.2$ ls
-bash: fork: retry: No child processes
-bash: fork: retry: No child processes
-bash: fork: retry: No child processes
-bash: fork: retry: No child processes
-bash: fork: Resource temporarily unavailable
-bash: fork: retry: No child processes
-bash: fork: retry: No child processes
-bash: fork: retry: No child processes
-bash: fork: retry: No child processes
-bash: fork: Resource temporarily unavailable
-bash-4.2$ exit
logout
-bash: fork: retry: No child processes
-bash: fork: retry: No child processes
-bash: fork: retry: No child processes
-bash: fork: retry: No child processes
-bash: fork: Resource temporarily unavailable
-bash-4.2$
[root@firefox ~]# ls -l /
total 126
lrwxrwxrwx. 1 root root 7 Jan 28 23:53 bin -> usr/bin
---- snip ----
drwxr-xr-x. 19 root root 23 May 27 18:03 var
[root@firefox ~]# vi /etc/rc.local
[root@firefox ~]# useradd test
[root@firefox ~]# su - test
[test@firefox ~]$ cd
[test@firefox ~]$ ls -l
total 0
[test@firefox ~]$ ls -l /
total 126
lrwxrwxrwx. 1 root root 7 Jan 28 23:53 bin -> usr/bin
---- snip ----
drwxr-xr-x. 19 root root 23 May 27 18:03 var
[test@firefox ~]$ vi /etc/rc.local
[test@firefox ~]$ exit
logout
[root@firefox ~]# su - pascal
Last login: Mon Jun 13 22:12:12 CDT 2016 on pts/1
su: failed to execute /bin/bash: Resource temporarily unavailable
[root@firefox ~]#
답변1
nproc이 문제입니다.
[root@localhost ~]# ps -eLf | grep pascal | wc -l
4068
[root@localhost ~]# cat /etc/security/limits.d/20-nproc.conf
# Default limit for number of user's processes to prevent
# accidental fork bombs.
# See rhbz #432903 for reasoning.
* soft nproc 4096
root soft nproc unlimited
[root@localhost ~]#
manlimits.conf 상태:
Also, please note that all limit settings are set per login. They are
not global, nor are they permanent; existing only for the duration of
the session. One exception is the maxlogin option, this one is system
wide. But there is a race, concurrent logins at the same time will not
always be detected as such but only counted as one.
nproc은 로그인할 때마다 강제로 적용되지만 전역적으로 계산되는 것 같습니다. 따라서 로그인된 nproc 8192 및 5000 스레드를 사용하는 것은 문제가 되지 않지만 동일한 UID에 대해 동시에 로그인된 nproc 4096 및 50 스레드를 사용하면 전역 개수(5050)가 nproc 설정보다 높기 때문에 더 많은 스레드를 생성할 수 없습니다. .
[root@localhost ~]# ps -eLf | grep pascal | grep google/chrome | wc -l
3792
답변2
계정에 전혀 접근할 수 없다면, 문제가 무엇인지 파악하기 어려울 것입니다. 하지만 시스템이나 애플리케이션 로그를 확인하세요. 일부 프로그램이 거기에 단서를 남기기를 바랍니다(특히 실패한 로그인 시도에 대해).
실험을 위해 프로그램을 실행할 수 있는 경우 각 한계 값을 늘리고 작동 시기와 시도가 실패(및 표시)되는 시기를 확인하여 어느 한계에 도달했는지 알 수 있습니다 EAGAIN
. 각 값에 사용된 리소스를 나열하는 것도 가능합니다. 모든 한도에 대한 데이터를 수집하는 유틸리티는 생각나지 않지만 아마도 하나는 있을 것입니다.
문제가 커널 제한이라고 가정하면 이러한 문제는 다음 목록에 나열되어 있습니다.setrlimit
매뉴얼 페이지. 각 사용자 ID에 적용되는 내용은 다음과 같습니다.
RLIMIT_MEMLOCK
— 스왑 불가능한 메모리의 크기입니다. 로그인이 차단되어서는 안 되며, 스왑 불가능한 메모리를 요청하는 프로그램은 거의 없습니다.RLIMIT_MSGQUEUE
— 메시지 대기열의 크기입니다. 로그인은 차단되어서는 안 되며 메시지 큐를 사용하는 프로그램은 거의 없습니다.RLIMIT_NPROC
— 최대 프로세스 수. 이건 확실히~ 할 것이다도달하면 로그인을 차단합니다. 제한을 늘리면/etc/security/limits.conf
기존 세션에는 영향을 미치지 않지만 새로운 프로세스에는 영향을 미치므로 시스템 관리자가 값을 늘리면 사용자가 로그인할 수 있습니다.RLIMIT_SIGPENDING
— 처리할 최대 신호 수입니다. 로그인은 차단되어서는 안 되며sigqueue
대기열 신호를 사용하는 프로그램은 거의 없습니다.
따라서 프로세스에 대한 제한이 가장 가능성이 높습니다. 실행 중인 셸에 액세스할 수 있는 경우 프로그램을 실행해 보면 오류가 매우 분명합니다.
$ ls
bash: fork: retry: No child processes
bash: fork: retry: No child processes
bash: fork: retry: No child processes
bash: fork: retry: No child processes
bash: fork: Resource temporarily unavailable
이 한도의 인쇄물을 사용할 수 있습니다 ulimit -u
. 문제의 사용자로 실행 중인 쉘에 대한 액세스 권한이 있고 해당 사용자가 아직 setuid 프로그램을 실행하지 않은 경우 다음을 사용할 수 있습니다. ( 사용자가 링크를 읽을 수 있는 커널 스레드 set /proc/*/task/*/cwd/.; echo $#
나열 , 이는 사용자가 cwd
프로세스).
답변3
운영 체제가 프로그램을 실행하려고 시도했지만 실패할 때 어떤 시스템 호출이 발생하는지 알아보세요. 사용스트레스
매우 간단하기를 바랍니다. 릴리스 추적이 없는 경우.
일반적으로 말해서, 더 많은 정보를 수집하려고 노력하는 것 외에는 선택의 여지가 없습니다.
답변4
nproc
당신은 확신할 수 있습니다https://unix.stackexchange.com/a/289589/8337
-n
식별할 수 있는 파일을 엽니다.https://stackoverflow.com/a/21752125/32453
나머지는 불확실합니다.
골드 레벨에 도달할 때까지 한 번에 하나씩 제한을 늘릴 수 있을까요? :)