데비안에 너무 많은 열린 파일


15

데비안에서 오랫동안 프로세스를 실행하고 있습니다. 어느 시점에서 오류가 발생합니다.

열린 파일이 너무 많습니다.

달리는:

ulimit -a

보여줍니다 :

열린 파일 (-n) 1024

열린 파일 수를 2 배 늘리고 싶습니다. 실행 후

ulimit -n 2048

제한은 내 세션이 끝날 때까지 활성화되며 작업에는 적용되지 않습니다.

열려있는 파일 수를 어떻게 영구적으로 늘릴 수 있습니까?

답변:


12

프로세스가 스크립트를 통해 시작된 경우 데몬을 실행하기 직전에 스크립트에서 ulimit를 호출 할 수 있습니다.

사용자 또는 모든 사용자의 ulimit를 늘리려면 pam_limits로그인시 적용되는 제한을 설정할 수 있습니다 . 이들은에서 설정됩니다 /etc/security/limits.conf. 귀하의 경우 다음과 같이 할 수 있습니다.

*               hard    nofile             2048

"hard"는 초과 할 수없고 변경할 수없는 하드 한계를 나타냅니다. 소프트 제한은 사용자 (예 : 루트 기능이없는 사람)에 의해 변경 될 수 있지만 하드 제한을 넘어서는 안됩니다.

limits.conf사용에 대한 자세한 내용 은를 읽으십시오 pam_limits.


제한 conf에는 2 줄이 있습니다. * soft nofile 4096 * hard nofile 8192 효과가 없습니다.
FoxyBOA 2016 년

그리고 당신은 이것을 테스트 한 후 로그 아웃했다가 다시 로그인 했습니까? 로컬 컴퓨터에서이 작업을 시도하는 경우 X / GNOME / KDE 등에서 바로 로그 아웃하는 것을 의미합니다.
Daniel Lawson

예. /etc/security/limits.conf가 작동하지 않습니다. 두 번째 방법을 시도하겠습니다.
FoxyBOA 2016 년

3
/etc/security/limits.conf는 pam 및 pam 모듈 pam_limits를 사용하는 서비스에만 작동합니다 (각 서비스의 PAM 구성 및 /etc/pam.d/common-*에 대해서는 /etc/pam.d/ 참조). . 따라서 그것은 sshd, gdm, login 등에 의해 생성 된 모든 사용자 세션과 관련이 있습니다. 그것은 부팅시에 시작된 모든 프로그램과 관련이 없습니다 ...
Raphaël Hertzog

그 효과에 대해 말했지만 명확하게 해주셔서 감사합니다. OP가 서비스인지 또는 사용자가 실행중인 프로세스인지는 명확하지 않습니다.
Daniel Lawson

13

커널에 열려있는 파일의 "총 최대 값"도 있으며 다음을 사용하여 현재 설정을 확인할 수 있습니다.

cat /proc/sys/fs/file-max 

그리고 다음과 같이 새로운 값을 설정하십시오.

echo "104854" > /proc/sys/fs/file-max

재부팅 사이에 구성을 유지하려면 추가

sys.fs.file-max=104854

/etc/sysctl.conf

현재 최대 파일 사용량을 확인하려면

[root@srv-4 proc]# cat /proc/sys/fs/file-nr
3391    969     52427
|        |       |
|        |       |
|        |       maximum open file descriptors
|        total free allocated file descriptors
total allocated file descriptors
(the number of file descriptors allocated since boot)


내 여기에 음란 한 숫자가 표시됩니다 49152 0 18446744073709551615 . 처음 두 열이 왜 세 번째 열에 합산되지 않는지 이해할 수 없습니다. 그리고 이용 가능한 1.8 조 조가 있다면, 그것들을 어떻게 사용했는지 알 수 없습니다.
mlissner

4

다른 사람들이 말했듯이 /etc/security/limits.conf에서 사용자 또는 그룹당 특정 제한을 적용 할 수 있습니다.

참고 : ulimit -n은 소프트 한계를 나타냅니다.

ulimit -H -n 

하드 한도를 보여줍니다.

예를 들어, 하드 한계 출력을 볼 것으로 예상되는 것처럼 파일 수를 1024에서 4096으로 늘리는 경우 ulimit -a 및 ulimit -n 출력이 상당히 혼란스러워집니다. 한도.

또한 이러한 제한은 로그인마다 적용되므로 새 셸에서 다시 로그인하고 변경 사항을 확인하고 기존 로그인에 전파 될 것으로 예상하지 마십시오.


2

start-stop-daemon 설정으로 프로세스를 실행하면 /etc/security/limits.conf의 ulimits가 작동하지 않습니다. 예를 들어 Tomcat의 열린 파일 제한을 20000으로 올리려면 다음을 행에 추가해야합니다 /etc/default/tomcat.

ulimit -Hn 32768
ulimit -Sn 32768

데비안 6.0.4 에서이 문제가 발생했습니다. 다른 프로세스의 경우 주어진 대답이 도움이되어야합니다.


1

장기 실행 프로세스를 시작하는 방법에 따라 다릅니다. 부팅시 (/etc/rcX.d/* 스크립트를 통해) 시작된 경우 기본 제한이 커널에 의해 설정되고 다시 컴파일하지 않고 조정할 수 없으므로 시작 스크립트에 ulimit 호출을 넣어야합니다.

사용하여 /etc/security/limits.conf당신이 사용하는 경우 일할 수있는 cron이 같은 항목으로, 예를 들어를 시작합니다 :

@reboot $HOME/bin/my-program

/etc/pam.d/cron이 pam_limits.so를 활성화하기 때문에 작동합니다.


-1

이것을 /etc/security/limits.conf에 추가 할 수 있습니다

root soft nofile 100000
root hard nofile 100000

저장하고 재부팅하십시오.


3
이 5 살짜리 질문에 대한 대답으로 받아 들여지지 않은 새로운 것이 있습니까?
Andrew Schulman '12

-2

아주 좋은 명령 ulimit -n이지만 너무 많은 연결과 너무 많은 열린 파일에 문제가 있습니다.

core file size          (blocks, -c) 0
data seg size           (kbytes, -d) unlimited
scheduling priority             (-e) 0
file size               (blocks, -f) unlimited
pending signals                 (-i) 519357
max locked memory       (kbytes, -l) 32
max memory size         (kbytes, -m) unlimited
open files                      (-n) 1024
pipe size            (512 bytes, -p) 8
POSIX message queues     (bytes, -q) 819200
real-time priority              (-r) 0
stack size              (kbytes, -s) 10240
cpu time               (seconds, -t) unlimited
max user processes              (-u) 1024
virtual memory          (kbytes, -v) unlimited
file locks                      (-x) unlimited

답을 정리하려고했지만 여전히 원래 포스터 질문에 무엇을 말하려고하는지 잘 모르겠습니다. 좀 더 정리해 봐도 될까요?
slm

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