Ubuntu에서 Neo4j의 최대 파일 열기 제한 (ulimit)을 늘리는 방법은 무엇입니까?


78

현재 ulimit -n표시 10000됩니다. 나는 그것을 40000. 나는 "/etc/sysctl.conf"를 편집하고 fs.file-max=40000. 또한 /etc/security/limits.conf하드 및 소프트 값을 편집 하고 업데이트 했습니다 . 그러나 여전히 ulimit 보여줍니다 10000. 이러한 변경을 모두 수행 한 후 랩톱을 재부팅했습니다. 루트 암호에 액세스했습니다.

usr_name@usr_name-lap:/etc$ /sbin/sysctl fs.file-max
fs.file-max = 500000

/etc/security/limits.conf-에 다음 줄이 추가되었습니다.

*     soft    nofile          40000
*     hard    nofile          40000

나는 또한 다음 줄을 추가했습니다 /etc/pam.d/su.

session    required   pam_limits.so

다른 포럼에서 제공하는 가능한 모든 방법을 시도했지만 최대 한도 인 10000. 무엇이 문제 일 수 있습니까?

neo4j최대 열린 파일 제한이 오류에 도달 했기 때문에이 변경을하고 있습니다 .


제대로 sudo ulimit -n 40000
하셨습니다

@ 0x90 시스템을 재부팅했습니다. 그러나 그럼에도 불구하고 그것은 변하지 않습니다.
theharshest

6
Ubuntu 전용이므로 실제로는 askubuntu.com에 속합니다. 비슷한 질문은 여기에 있습니다 : askubuntu.com/questions/162229/...
Lambart


/etc/security/limits.conf에 추가 한 후 변경 사항을 적용하려면 어떤 서비스를 다시 시작해야합니까?
Ashish Karpe 2015

답변:


8

Debian을 사용하고 있지만이 솔루션은 Ubuntu에서 잘 작동합니다. neo4j-service 스크립트에
줄을 추가해야합니다 . 내가 한 일은 다음과 같습니다.

나노 /etc/init.d/neo4j-service
«추가 ulimit를 -n 40000 »바로 전에 시작 - 중지 - 데몬 라인 에서 do_start 섹션

버전 2.0 Enterprise Edition을 사용하고 있습니다. 이것이 당신을 도울 수 있기를 바랍니다.


13
FWIW Ubuntu Server 14.04에는 이러한 스크립트가 없습니다. 내 솔루션은이 질문에서 발견 된 (그리고 lornix의 대답)되었다 askubuntu.com/questions/162229/...는 - 짧은에, 당신은 편집해야 /etc/security/limits.conf하고/etc/pam.d/common-session*
Lambart

1
원래 질문자가 통과시 neo4j를 언급 한 것을 확인했습니다. 그것은 우분투와 관련이 없기 때문에 질문의 주제에 속하는 것처럼 보입니다.
Lambart 2014-06-26

Ubuntu 14.04에는 실제로 /etc/init.d/neo4j-service파일이 있고 Martin Larivière가 맞습니다. 삽입 uname -n 40000하면 문제가 해결됩니다. 나는 우분투 서버와 우분투의 차이점을 모르기 때문에 아마 당신이 맞을 수도 있습니다. 마틴이 쓴 것이 평범한 우분투 14.04의 문제를 해결한다는 것을 명확히하기 위해 이것을 추가하고 있습니다.
Grégoire C

3
@Lambart, neo4j-service의 경우 common-session-*neo4j-service가 PAM을 기반으로 start-stop-daemon하고 start-stop-daemon전혀 활용하지 않기 때문에 트릭이 작동 하지 않습니다. 유일한 해결책은 실제로 ulimit -n xxxinit 스크립트에 명시적인 호출 을 추가하는 것 입니다.
David Ammouial 2015 년

2
이것은 해결책이 아니라 반창고입니다.
Tim Wachter

83

수행중인 작업은 루트 사용자에게는 작동하지 않습니다. 서비스를 루트로 실행하고 있으므로 변경 사항을 볼 수 없습니다.

루트 사용자의 ulimit를 늘리려면 루트로 대체해야 *합니다. *루트 사용자에게는 적용되지 않습니다. 휴식은 당신과 동일합니다. 여기서 다시 인용하겠습니다.

파일에 다음 행을 추가하십시오. /etc/security/limits.conf

root soft  nofile 40000

root hard  nofile 40000

그리고 파일에 다음 줄을 추가합니다. /etc/pam.d/common-session

session required pam_limits.so

그러면 루트 사용자의 ulimit가 업데이트됩니다. 의견에서 언급했듯이 변경 사항을 확인하기 위해 재부팅 할 필요조차 없습니다.


2
실제로 새 제한을 적용하기 위해 재부팅 할 필요가 없습니다. /etc/pam.d/common-session 파일을 편집하는 요점은 새 세션을 만들면 제한 파일이 처리되도록하는 것입니다.
Christopher Smith

1
이 절차는 작동합니다. 재부팅이 필요하지 않습니다. 로그 아웃하고 다시 로그인하면 결과를 볼 수 있습니다.
Bill Butler

2
neo4j 서비스 또는 사용하는 다른 서비스의 경우 start-stop-daemoncommon-session-*때문에 트릭은 작동하지 않습니다 start-stop-daemon전혀 없습니다 활용 PAM을 수행합니다. ulimit -n xxx서비스가 시작되기 전에 init 스크립트 어딘가에 명시 적 호출을 추가하는 것 외에 다른 방법은 없습니다 .
David Ammouial 2015 년

3
Ubuntu 16.04.1 LTS에서 아름답게 작업
Andrew T

63

1) sysctl file-max제한 확인 :

$ cat /proc/sys/fs/file-max

제한이 원하는 값보다 낮 으면을 열고 sysctl.conf파일 끝에 다음 줄을 추가합니다.

fs.file-max = 65536

마지막으로 sysctl제한을 적용 합니다.

$ sysctl -p 

2) /etc/security/limits.conf위에서 언급 한 내용을 편집 하고 추가하십시오.

* soft     nproc          65535    
* hard     nproc          65535   
* soft     nofile         65535   
* hard     nofile         65535

이러한 제한은 root사용자에게 적용되지 않습니다. 제한 을 변경하려면 root명시 적으로 수행해야합니다.

root soft     nofile         65535   
root hard     nofile         65535
...

3) 시스템을 재부팅하거나 끝에 다음 줄을 추가하십시오 /etc/pam.d/common-session.

session required pam_limits.so

로그 아웃하고 다시 로그인하십시오.

4) 소프트 한계 확인 :

$ ulimit -a

및 엄격한 제한 :

$ ulimit -Ha
....

open files                      (-n) 65535

참조 : http://ithubinfo.blogspot.in/2013/07/how-to-increase-ulimit-open-file-and.html


1
루트 사용자로 확인하지 않으면 당신은이 작업을 수행 할 수 있습니다 우분투 것이, 변경 사항을 반영 할 수 있도록 로그 아웃하고 다시 물론 확인gnome-session-quit
Mayank Saxena는

/ proc / sys / fs / file-max는 시스템에서 허용하는 최대 nofile이 아닙니다 !!! 예를 들어 내 시스템에서는 기본적으로 1528702로 설정되어 있습니다. limits.conf의 소프트 / 하드 제한 값으로 설정하면 사용자가 1024에서 제한을 전혀 늘릴 수 없습니다. limits.conf를 훨씬 더 보수적 인 것으로 설정해야했습니다 (예 : 256 * 1024 = 262144). 마지막으로 ulimit -a가 일반 사용자에게 동일하게 표시됩니다.
sabujp

3

나는 같은 문제가 있었고 항목을 /etc/security/limits.d/90-somefile.conf. 제한이 작동하는지 확인하려면 ssh 세션에서 완전히 로그 아웃 한 다음 다시 로그인해야합니다.

서비스를 실행하는 특정 사용자에 대한 제한을 설정하고 싶었지만 로그인 한 사용자에 대해 설정된 제한을받는 것 같습니다. 다음은 유효 사용자가 아닌 인증 된 사용자를 기반으로 ulimit가 설정되는 방법을 보여주는 예입니다.

$ sudo cat /etc/security/limits.d/90-nofiles.conf
loginuser    soft    nofile   10240
loginuser    hard    nofile   10240
root         soft    nofile   10241
root         hard    nofile   10241
serviceuser  soft    nofile   10242
serviceuser  hard    nofile   10242

$ whoami
loginuser
$ ulimit -n
10240
$ sudo -i
# ulimit -n
10240    # loginuser's limit
# su - serviceuser
$ ulimit -n
10240    # still loginuser's limit.

를 사용하여 *모든 사용자에 대한 증가를 지정할 수 있습니다 . 로그인 한 사용자로 서비스를 다시 시작하고 ulimit -ninit 스크립트에 추가 하면 초기 로그인 사용자의 제한이 적용되는 것을 알 수 있습니다. 시스템 부팅 중에 어떤 사용자의 제한이 사용되는지 확인하거나 내가 실행중인 서비스 (start-stop-daemon으로 시작됨)의 실제 nofile 제한이 무엇인지 확인할 기회가 없었습니다.

현재 작동하는 두 가지 접근 방식이 있습니다.

  1. start-stop-daemon 직전에 init 스크립트에 ulimit 조정을 추가하십시오.
  2. 보안 파일의 와일드 카드 또는보다 광범위한 ulimit 설정.

내가 당신이 한 일을 할 때 (부터 시작해서 whoami) 나는 먼저 1024를 얻은 다음 루트의 경우 65536을 얻은 다음 사용자의 경우 65536을 얻습니다. 그러나 첫 번째는 동일한 사용자였습니다. 이에 대한 설명이 있습니까, 나는 당황하고있어
다니엘

이상하게 들립니다. 사용자에서 루트로, 다시 사용자로 전환하는 방법은 무엇입니까? 파일 설정 후 완전히 로그 아웃 했습니까? 처음에는 캐시 된 세션에있을 수 있으며 사용자에게 돌아가는 방법에 따라 새 세션을 사용할 수 있습니다.
Brett

확인하기 위해 계속 재부팅합니다. 또한 설정 시도 /etc/sysctl.conf-> fs.file-max = 1000000모든 사용자에 대해 전역 적으로 수정해야하며 결과도 없습니다. 마치 프로세스가 나를 무시하는 것 같습니다. 설명했듯이 root-> user를 사용하여 사용자에서 루트로 전환 su - my_user_name합니다. 어느 시스템이 해당 사용자에 대해 사용한다 알고 나타냅니다,하지만 ...하지 않습니다
다니엘

2

당신의 init 스크립트 변경할 수 neo4j을 수행하는 ulimit -n 40000실행하기 전에를 neo4j.

그러나 나는 당신이 잘못된 나무를 짖고 있다고 느낄 수밖에 없습니다. neo4j합법적으로 10,000 개 이상의 열린 파일 설명자가 필요 합니까 ? 이것은 버그 neo4j또는 사용하는 방식 과 매우 흡사 합니다. 나는 그것을 해결하려고 노력할 것입니다.


나는 시작 neo4j사용 neo4j start. init 스크립트는 어디에서 찾을 수 있습니까?
theharshest

입력을 시도 ulimit -n 40000하기 전에neo4j start
abligh

2

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

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

sudo sysctl -w fs.inotify.max_user_watches=100000

편집하다

다른 stackexchange 사이트에서도 다른 사용자가 이것을 보았습니다 (둘 다 작동하지만이 버전 은 일시적이 아니라 영구적으로 시스템 설정을 업데이트합니다).

echo fs.inotify.max_user_watches=100000 | sudo tee -a /etc/sysctl.conf; 
sudo sysctl -p

2

이 명령을 실행하면 *_limits.conf아래 에 파일 이 생성 됩니다./etc/security/limits.d

echo "* soft nofile 102400" > /etc/security/limits.d/*_limits.conf && echo "* hard nofile 102400" >> /etc/security/limits.d/*_limits.conf

터미널을 종료하고 다시 로그인 ulimit -n하여 * 사용자에 대해 설정 되는지 확인하십시오.


쉽고 유용한 답변입니다.
sumanth

2

tl; dr은 소프트 및 하드 제한을 모두 설정합니다.

의도 한대로 작동한다고 확신하지만 혹시라도 여기에 추가하겠습니다. 완전성을 위해 제한은 여기에 설정되어 있습니다 (구문은 아래 참조). /etc/security/limits.conf

some_user       soft    nofile          60000
some_user       hard    nofile          60000

/etc/pam.d/common-session에서 다음과 같이 활성화됩니다.

session required pam_limits.so

하드 제한 만 설정하면 ulimit -a 하면 기본값 (1024)이 표시됩니다. 소프트 만 설정하면 제한 ulimit -a가 표시됩니다 (4096).

둘 다 설정 ulimit -a하면 소프트 제한이 표시됩니다 (물론 하드 제한까지).



1

ULIMIT 구성 :

  1. 루트로 로그인
  2. vi security / limits.conf
  3. 아래 항목 만들기

    웹 사이트 사용자를 위한 Ulimit 구성 시작

    website   soft   nofile    8192
    website   hard   nofile    8192
    website   soft   nproc    4096
    website   hard   nproc    8192
    website   soft   core    unlimited
    website   hard   core    unlimited
    
  4. 모든 사용자에 대해 아래 항목 만들기

    모든 사용자를위한 Ulimit 구성

    *   soft   nofile    8192
    *   hard   nofile    8192
    *   soft   nproc    4096
    *   hard   nproc    8192
    *   soft   core    unlimited
    *   hard   core    unlimited
    
  5. 파일을 수정 한 후 사용자는 새 값을 보려면 로그 오프했다가 다시 로그인해야합니다.

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