루트가 아닌 사용자의 열린 파일 제한을 늘리려면 어떻게합니까?


143

이것은 우분투 릴리스 12.04 (정확한) 64 비트 커널 리눅스 3.2.0-25 가상에서 발생합니다

사용자에게 허용되는 열린 파일 수를 늘리려 고합니다. 이것은 현재 한계 1024가 충분하지 않은 이클립스 Java 응용 프로그램을위한 것입니다.

지금까지 찾은 게시물에 따르면 줄을 넣을 수 있어야합니다.

/etc/security/limits.conf는 다음과 같습니다 :

soft nofile 4096
hard nofile 4096

모든 사용자에게 허용되는 열린 파일 수를 늘리려면

그러나 그것은 저에게 효과적이지 않으며 문제는 해당 파일과 관련이 없다고 생각합니다.

모든 사용자에 대해 /etc/security/limits.conf의 내용에 관계없이 기본 제한은 1024입니다 (파일을 변경 한 후 재부팅했습니다)

$ ulimit -n
1024

이제 /etc/security/limits.conf의 항목에도 불구하고 나는 그것을 증가시킬 수 없습니다 :

$ ulimit -n 2048

-bash : ulimit : 열린 파일 : 한계를 수정할 수 없습니다 : 작업이 허용되지 않습니다 이상한 부분은 한계를 아래쪽으로 변경할 수는 있지만 위쪽으로 변경할 수는 없다는 것입니다.

$ ulimit -n 800
$ ulimit -n
800

$ ulimit -n 900

-bash: ulimit: open files: cannot modify limit: Operation not permitted

루트로서, 그 한계를 내가 원하는대로 위 또는 아래로 변경할 수 있습니다. / proc / sys / fs / file-max의 시스템 전체 한계에 대해서는 신경 쓰지 않는 것 같습니다.

# cat /proc/sys/fs/file-max
188897

# ulimit -n 188898
# ulimit -n 
188898

그러나 일식을 루트로 실행하더라도 "너무 많은 파일 열기"예외로 인해 응용 프로그램이 여전히 충돌합니다!

지금까지 루트가 아닌 사용자의 열린 파일 제한을 늘리는 방법을 찾지 못했습니다.

어떻게하면 제대로해야합니까? 다른 게시물을 보았지만 운이 없습니다!


6
또한을 (를) 편집 한 후 /etc/security/limits.conf로그 아웃 한 다음 다시 로그인해야 새로운 최대 제한을 사용할 수 있습니다. 나는 이것을 ulimit -Hs했고, 방금 1000000으로 올렸을 때 여전히 1000을 표시 하여 당황했습니다 ! 그런 다음 로그 아웃했다가 다시 로그인하면 ulimit에 새로운 금액이 표시됩니다.
Cerin

GUI 세션의 경우이 스레드 도 중요합니다 (Ubuntu 16 이상) .
Waldemar Wosiński

답변:


142

ulimit기본적으로 명령은 (사용자)를 낮출 수있는 하드 한계를 변경하지만 올릴 수 없습니다.

SOFT 한계 를 변경 하려면 -S 옵션을 사용하십시오. 범위는 0- { HARD }입니다.

실제로에 별칭 ulimit을 지정 ulimit -S했으므로 기본값은 항상 소프트 제한으로 설정됩니다.

alias ulimit='ulimit -S'

문제와 관련하여의 항목에 열이 없습니다 /etc/security/limits.conf.

4 개의 열이 있어야하지만 예제에서 첫 번째 열이 없습니다.

* soft nofile 4096
* hard nofile 4096

첫 번째 열은 한도가 적용되는 WHO에 대해 설명합니다. '*'는 모든 사용자를 의미하는 와일드 카드입니다. root 의 한계를 높이려면 '*'대신 'root'를 명시 적으로 입력해야합니다.

또한 /etc/pam.d/common-session*다음 줄을 편집 하고 끝에 추가 해야합니다 .

session required pam_limits.so

1
열린 파일 디스크립터의 최대 수에 대한 하드 한계를 어떻게 변경합니까? 내 문제는 Eclipse 응용 프로그램이 원하는만큼 열린 파일을 가질 수 있어야하지만 한계는 4096으로 충분하지 않으며 가능한 한 500000으로 설정하고 싶습니다. limits.conf의 설정 당신이 스타와 함께 언급했지만 여전히 하드 한계는 움직이지 않습니다.
iCode

1
글쎄, 당신은 / proc / sys / fs / file-max의 값이 188,897이라는 것을 알았습니다. 그래서 당신의 상한은 188,000 (허용)과 500,000 (허용되지 않음) 사이입니다. 65000 개가 넘는 열린 파일을 동시에 필요로하는 것을 가지고 있다는 생각이 들었습니다. 와. 일반적으로 그것은 큰 철에서 처리됩니다. 프로그래밍에 대해 의심 스러울 것입니다. (
올바른

4
세션이 필요합니다. pam_limits.so, 감사합니다!
lethalman

13
처음에는 와일드 카드를 놓치고 /etc/pam.d/common-session*편집 common-session한 후 다시 부팅 한 후에도 작동하지 않았습니다. 그러나 (동일한 라인을 추가 한 후 pam_limits.so까지) common-session-noninteractive, ulimit -n신선한 로그인 (필요 없음 재부팅) 후 새 값을 표시. FWIW 루트의 제한을 변경하려고했습니다 (전용).
Lambart

1
또한 루트로 로그인 한 경우 값이 다른지 확인하십시오. superuser.com/questions/1200539/…
Robbo_UK

20

사용자별로 소프트 및 하드 제한을 사용하는 경우 다음과 같은 것을 사용할 수 있습니다.

su USER --shell /bin/bash --command "ulimit -n"

특정 사용자에 대한 설정이 작동하는지 확인하십시오.


5

이 작업을 수행하는 데 많은 문제가 있습니다.

다음을 사용하면 사용자 권한에 관계없이 업데이트 할 수 있습니다.

sudo sysctl -w fs.inotify.max_user_watches=100000

4
$ sudo sysctl -w fs.inotify.max_user_watches=100000 fs.inotify.max_user_watches = 100000 $ ulimit -n 1024
grepmaster
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.