기본 ulimit 값은 어디에 설정되어 있습니까? (리눅스, 센 토스)


34

스펙이 거의 동일한 두 개의 CentOS 5 서버가 있습니다. 내가 로그인하고 할 때 ulimit -u, 한 시스템에서 나는 다른 시스템 unlimited에서 얻을 수 77824있습니다.

내가 cron을 실행할 때 :

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

나는 같은 결과를 얻는다 ( unlimited, 77824).

변경이 가능하도록 설정 위치를 결정하려고합니다. 그들은 내 프로필 (중 하나로 설정되지 않은 .bashrc, /etc/profile등). 이것들은 어쨌든 크론에 영향을 미치지 않을 것 /etc/security/limits.conf입니다.

나는 구글을 문지르고 심지어 할 정도로 갔다 grep -Ir 77824 /. 그러나 지금까지 아무것도 밝혀지지 않았다. 이 기계가 어떻게 다른 한계로 사전 설정 될 수 있었는지 이해할 수 없습니다.

나는 실제로 이러한 기계가 아니라 한계가있는 다른 (CentOS 6) 기계 1024가 너무 작습니다. 크론 작업을 더 높은 한계로 실행하고 크론 작업 자체에서 설정하는 방법을 아는 유일한 방법이 필요합니다. 괜찮아, 오히려 시스템을 넓게 설정하여 해키가되지 않도록하십시오.

도움을 주셔서 감사합니다. 쉽지 않은 것 같습니다.


편집-해결

좋아, 나는 이것을 알아 냈다. CentOS 6 또는 아마도 내 컴퓨터 구성에 문제가있는 것 같습니다. CentOS 5 구성에서 /etc/security/limits.conf다음을 설정할 수 있습니다 .

* - nproc unlimited

계정과 cron 한도를 효과적으로 업데이트합니다. 그러나 이것은 CentOS 6 상자에서 작동하지 않습니다. 대신, 나는해야합니다 :

myname1 - nproc unlimited
myname2 - nproc unlimited
...

그리고 상황이 예상대로 작동합니다. 아마도 UID 사양이 작동하지만 와일드 카드 (*)는 분명히 여기에 없습니다. 이상하게도 와일드 카드는 nofile한도에 적용됩니다.

기본적 으로이 파일이 비어 있고 동일한 하드웨어를 가지고 동일한 공급자로부터 온 두 CentOS 상자에 대해 다른 기본값을 가진 이유를 알 수 없었기 때문에 여전히 기본값이 실제로 어디에서 오는지 알고 싶습니다. .


3
당신은 무엇을 가지고 /etc/security/limits.d/있습니까?
Patrick

아니, 그 디렉토리가 비어
nomercysir은

1
특정 대기 시간이 지난 후 답변을 실제 답변으로 게시 할 수 있습니다.
sysadmin1138

2
나는 이것을 어딘가에서 찾았습니다. 기본값은 커널에 의해 설정됩니다. 부분적으로 하드 코딩되고 사용 가능한 램에 부분적으로 의존합니다. 나는 11.2 오라클 DB에 대한 SLES10을 설정하는 맥락에서 오라클 메타 링크에 그 발견 생각
닐스

1
이 질문이 해결 된 것으로 표시 될 수 있습니까?

답변:


45

이러한 "기본"제한은 다음에 의해 적용됩니다.

  • 리눅스 커널 에서 부팅 시간 (받는 init과정)
  • 부모 프로세스의 한도 ( fork(2)시각) 에서 상속
  • 사용자 세션이 열리면 PAM (커널 / 상속 된 값을 대체 할 수 있음)
  • 프로세스 자체 (PAM 및 커널 / 상속 된 값을 대체 할 수있는, 참조 setrlimit(2)).

일반 사용자의 프로세스는 하드 한계를 높일 수 없습니다.

리눅스 커널

부팅시 Linux는 기본 제한을 init프로세스로 설정 한 다음 다른 모든 (하위) 프로세스에서 상속합니다. 이러한 한계를 보려면 : cat /proc/1/limits.

예를 들어 최대 파일 설명자 수 ( ulimit -n) 의 커널 기본값 은 1024/1024 (소프트, 하드)이며 Linux 2.6.39에서는 1024/4096 으로 증가 했습니다.

당신이 말하는 기본 최대 프로세스 수는 대략 다음과 같이 제한됩니다 .

Total RAM in kB / 128

86 아키텍처 (적어도),하지만 배포판 때로는 때문에, 기본 커널 값을 변경 커널 소스 코드 체크 를 들어 kernel/fork.c, fork_init(). "프로세스 수"한계를 RLIMIT_NPROC라고합니다.

일반적으로 로그인시 사용자 인증을 보장하기 위해 PAM이 일부 모듈과 함께 사용됩니다 (참조 /etc/pam.d/login).

데비안에서 한계 설정을 담당하는 PAM 모듈은 다음과 같습니다 /lib/security/pam_limits.so.

이 라이브러리는 /etc/security/limits.conf/etc/security/limits.d/*.conf에서 구성을 읽지 만 해당 파일이 비어 있어도 pam_limits.so 는 소스 코드 내에서 확인할 수있는 하드 코딩 된 값사용할 수 있습니다.

예를 들어, 데비안에서 라이브러리 기본적으로 최대 프로세스 수 ( 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을 거치지 않습니다 (대개 데몬 및 크론 작업과 같이 로그인 한 사용자가 시작하지 않은 경우).


사실, 요점, 의견이 제거되었습니다. 필자는 대부분의 사용자에게 PAM이 활성화되어 있다고 생각할 것이므로 /etc/security/limits.conf 및 /etc/security/limits.d/* 파일을 먼저 확인하는 것이 좋습니다. 이 특정 인스턴스에서는 CentOS 6에서 limits.d 파일을 통해 기본적으로 1024 개의 프로세스 / 총 사용자 스레드 제한이 부과됩니다.
rogerdpack

@ rogerdpack 예, PAM은 확실히 활성화되어 있지만 다시 한 번 대답했습니다. "많은 프로세스가 PAM을 거치지 않습니다 (대개 데몬 및 아마도 cron과 같이 로그인 한 사용자가 시작하지 않은 경우) 직업) ". 우리의 토론에는 부가 가치가 없으므로 모든 의견을 삭제하면 내 의견을 삭제합니다. 고맙습니다.
Totor

SuSE 배포판에는 "프로세스 한계마다 조정하기 편리한 위치"를 통해 제공되는 ulimit 패키지가 /etc/initscript있습니다 /etc/sysconfig/ulimit.
sendmoreinfo

또한 Linux-PAM 라이브러리는 /proc/1/limits버전 1.1.4 (2011 릴리스) 이후 커널 (예 :)에서 설정 한 제한을 읽습니다 .
sendmoreinfo

@sendmoreinfo 그리고 Linux-PAM 라이브러리는 커널이 읽은 것을 제외하고 설정된 한계로 무엇을합니까?
Totor

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

Totor는 기술적으로 당신과 논쟁 할 수 없지만 Tom은 도움이된다는 것을 알게되었습니다. 감사합니다!
부분적으로 흐린

3

한계를 확인할 때 루트 사용자를 사용하여 그렇게 했습니까?

로부터 limits.conf맨 :

참고 : 그룹 및 와일드 카드 제한은 루트 사용자에게 적용되지 않습니다. 루트 사용자에 대한 제한을 설정하려면이 필드에 리터럴 사용자 이름 루트가 포함되어야합니다.

이 경우 명시적인 사용자 이름을 사용하면 문제가 해결됩니다.


이것은 아마도 데비안 고유의 "기능"일 것입니다.
Totor

또한 limits.conf파일이 비어 있습니다 ( limits.d디렉토리로).
Totor

3

이것에 대한 정보는 인터넷에서 끔찍합니다. 여기에서 데비안 리눅스 용으로 만든 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

커널 / 포크

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 등을 확인했지만 이것도 언급하지 않았습니다.
jamesbtate

1

/etc/security/limits.conf에서 구성하는 동안 "noproc"에 대한 구성이 작동하지 않을 가능성이 하나 더 있습니다.

구성 /etc/security/limits.d/90-nproc.conf를 대체하는 파일이 하나 더 있습니다.

* 소프트 nproc 1024
루트 소프트 nproc 무제한

여기서 * 설정은 이전 설정 파일에서 설정 한 내용을 무시합니다. 따라서이 파일에서 설정을 구성하는 것이 이상적입니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.