어떤 사용자 제한이 발생했는지 어떻게 알 수 있나요?

어떤 사용자 제한이 발생했는지 어떻게 알 수 있나요?

동일한 사용자에 대한 여러 세션. 그 중 하나가 더 이상 새 프로그램을 실행할 수 없으면 그 중 어느 것도 실행할 수 없으며 해당 사용자에 대한 새 로그인도 실행할 수 없습니다. 다른 사용자는 새 로그인을 포함하여 새 프로그램을 정상적으로 실행할 수 있습니다.

일반적으로 사용자 제한은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

나머지는 불확실합니다.

골드 레벨에 도달할 때까지 한 번에 하나씩 제한을 늘릴 수 있을까요? :)

관련 정보