Pytanie Jak zwiększyć maksymalny limit otwarcia pliku (ulimit) Neo4j w Ubuntu?


Obecnie ulimit -n przedstawia 10000. Chcę go zwiększyć 40000. Edytowałem "/etc/sysctl.conf" i dodałem fs.file-max=40000. Ja również edytowałem /etc/security/limits.conf i zaktualizowane wartości twarde i miękkie. Ale nadal pokazuje ulimit 10000. Po wprowadzeniu wszystkich tych zmian zrestartowałem mój laptop. Mam dostęp do hasła roota.

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

Dodano następujące linie w /etc/security/limits.conf -

*     soft    nofile          40000
*     hard    nofile          40000

Dodałem także następujący wiersz w /etc/pam.d/su-

session    required   pam_limits.so

Próbowałem w każdy możliwy sposób, jak podano na innych forach, ale mogę osiągnąć maksymalny limit 10000nie tylko. Jaki może być problem?

Wprowadzam tę zmianę, ponieważ neo4j zgłasza maksymalny limit przekroczonych limitów plików.


76
2018-02-02 19:58


pochodzenie


Zrobiłeś to dobrze, po prostu zrestartuj system i wszystkie będą działać: sudo ulimit -n 40000 - 0x90
@ 0x90 Ponownie uruchomiłem system. Ale nawet wtedy to się nie zmienia. - theharshest
Będąc specyficznym dla Ubuntu, prawdopodobnie należy do askubuntu.com; podobne pytanie jest tutaj: askubuntu.com/questions/162229/... - Lambart
serverfault.com/questions/610130/... - Ciro Santilli 新疆改造中心 六四事件 法轮功
po dodaniu do pliku /etc/security/limits.conf, która usługa ma zostać ponownie uruchomiona, aby wprowadzić zmiany? - Ashish Karpe


Odpowiedzi:


Używam Debiana, ale to rozwiązanie powinno dobrze działać z Ubuntu.
Musisz dodać linię w usługa neo4j scenariusz.
Oto co zrobiłem:

nano /etc/init.d/neo4j-service
Dodaj " ulimit -n 40000 »Tuż przed linia start-stop-daemon w sekcja do_start

Zauważ, że używam wersji Enterprise 2.0. Mam nadzieję, że to ci pomoże.


8
2018-02-03 19:31



FWIW nie ma takiego skryptu na Ubuntu Server 14.04. Moje rozwiązanie zostało znalezione w tym pytaniu (i odpowiedź lornixa): askubuntu.com/questions/162229/... - krótko mówiąc, musisz edytować /etc/security/limits.conf i /etc/pam.d/common-session* - Lambart
Widzę, że oryginalny pytający wspomniał o mimochodzie neo4j. Wygląda na to, że może należy to do tematu pytania, ponieważ nie ma on nic wspólnego z Ubuntu. - Lambart
W Ubuntu 14.04 istnieje naprawdę /etc/init.d/neo4j-service plik i Martin Larivière ma rację, wstawiając uname -n 40000 rozwiązuje problem. Nie znam różnic między Ubuntu Server i Ubuntu, więc może i masz rację, dodaję to tylko po to, by wyjaśnić, że to, co napisał Martin, rozwiązuje problem z prostym Ubuntu 14.04. - Grégoire C
@Lambart, w przypadku usługi neo4j, common-session-* sztuczka nie zadziała, ponieważ opiera się na usłudze neo4j start-stop-daemon i start-stop-daemon w ogóle nie wykorzystuje PAM. Jedynym rozwiązaniem jest dodanie wyraźnego ulimit -n xxx wywołaj skrypt init. - David Ammouial
To nie jest rozwiązanie, to jest bandaid. - Tim Wachter


To, co robisz, nie będzie działać dla użytkownika root. Może używasz swoich usług jako root i dlatego nie widzisz zmiany.

Aby zwiększyć ulimit dla użytkownika root, powinieneś zamienić * przez root. * nie dotyczy użytkownika root. Odpoczynek jest taki sam jak Ty. Podam ją tutaj ponownie.

Dodaj następujące linie do pliku: /etc/security/limits.conf

root soft  nofile 40000

root hard  nofile 40000

A następnie dodaj następujący wiersz w pliku: /etc/pam.d/common-session

session required pam_limits.so

Spowoduje to aktualizację ulimit dla użytkownika root. Jak wspomniano w komentarzach, może nie być konieczne ponowne uruchomienie komputera, aby zobaczyć zmianę.


82
2018-06-21 08:32



W rzeczywistości nie trzeba restartować, aby nowy limit został zastosowany. Celem edycji pliku /etc/pam.d/common-session jest utworzenie nowej sesji, która spowoduje przetworzenie plików z limitami. - Christopher Smith
Ta procedura działa. Nie jest wymagane ponowne uruchomienie. Po prostu wyloguj się i zaloguj ponownie, aby zobaczyć wynik. - Bill Butler
to nie działało dla mnie dla ubunutu 14.04 - Dejell
W przypadku usługi neo4j lub innej usługi korzystającej z start-stop-daemon, common-session-* podstęp nie zadziała, ponieważ start-stop-daemon w ogóle nie wykorzystuje PAM. Nie ma innego sposobu niż dodanie wyraźnego ulimit -n xxx wywołanie gdzieś w skrypcie init przed uruchomieniem usługi. - David Ammouial
Pracował pięknie na Ubuntu 16.04.1 LTS - Andrew T Finnell


1) Sprawdź sysctl file-max limit:

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

Jeśli limit jest niższy od wymaganej wartości, otwórz sysctl.conf i dodaj tę linię na końcu pliku:

fs.file-max = 65536

Wreszcie, zgłoś się sysctl ograniczenia:

$ sysctl -p 

2) Edytuj /etc/security/limits.conf i dodaj poniżej wspomniane

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

Limity te nie będą obowiązywać root użytkownik, jeśli chcesz zmienić root ograniczenia musisz to zrobić jawnie:

root soft     nofile         65535   
root hard     nofile         65535
...

3) Zrestartuj system lub dodaj następującą linię na końcu /etc/pam.d/common-session:

session required pam_limits.so

Wyloguj się i zaloguj ponownie.

4) Sprawdź miękkie limity:

$ ulimit -a

i twarde limity:

$ ulimit -Ha
....

open files                      (-n) 65535

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


62
2017-07-17 06:37



Upewnij się, że wylogowałeś się i wróciłeś, aby mógł odzwierciedlać twoje zmiany, jeśli nie sprawdzasz go z użytkownikiem root, dla ubuntu możesz to zrobić gnome-session-quit - Mayank Saxena
/ proc / sys / fs / file-max NIE JEST MAX nofile dozwolonym przez system !!! Na przykład na moim systemie domyślnie jest ustawiony na 1528702. Ustawienie tej wartości dla miękkich / twardych limitów w limits.conf nie pozwala użytkownikowi na zwiększenie limitów z 1024 w ogóle. Musiałem ustawić limits.conf na coś znacznie bardziej konserwatywnego, np. 256 * 1024 = 262144, a na końcu ulimit -a pokazuje to samo dla zwykłego użytkownika. - sabujp


Miałem ten sam problem i działało, dodając wpisy do /etc/security/limits.d/90-somefile.conf. Zauważ, że aby zobaczyć ograniczenia, musiałem się całkowicie wylogować z sesji ssh, a następnie zalogować się ponownie.

Chciałem ustawić limit dla konkretnego użytkownika, który uruchamia usługę, ale wydaje mi się, że otrzymałem limit ustawiony dla zalogowanego użytkownika. Oto przykład pokazujący, jak ustawić ulimit na podstawie uwierzytelnionego użytkownika, a nie efektywnego użytkownika:

$ 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.

Możesz użyć * określić wzrost dla wszystkich użytkowników. Jeśli ponownie uruchomię usługę jako użytkownik, z którym się zalogowałem i dodaję ulimit -n do skryptu startowego, widzę, że początkowe limity użytkownika są na miejscu. Nie miałem okazji sprawdzić, które limity użytkownika są używane podczas startu systemu lub określić, jaki jest faktyczny limit nofile dla usługi, która jest uruchomiona (która jest uruchamiana przez start-stop-daemon).

Są dwa podejścia, które działają teraz:

  1. dodaj korektę ulimit do skryptu init, tuż przed start-stop-daemon.
  2. wieloznaczne lub bardziej szczegółowe ustawienia ulimit w pliku bezpieczeństwa.

3
2017-10-03 09:03



kiedy robię to, co zrobiłeś (zaczynając od whoami) Najpierw otrzymuję 1024, następnie 65536 (dla root), a następnie 65536 dla użytkownika. Ale pierwszy był tym samym użytkownikiem. Czy masz wyjaśnienie tego, jestem zaskoczony - Danielson
Brzmi to dziwacznie. Jak przejść z użytkownika na root i wrócić do użytkownika? Czy wylogowałeś się całkowicie po ustawieniu pliku? możesz być początkowo w sesji buforowanej, a następnie przy użyciu nowej sesji, w zależności od tego, jak wrócić do użytkownika. - Brett
Wciąż się restartuję, żeby mieć pewność. Próbowano również ustawienia /etc/sysctl.conf -> fs.file-max = 1000000 powinien naprawić go globalnie dla wszystkich użytkowników, również bez rezultatu. To tak, jakby proces mnie ignorował. Przełączam się z użytkownika na root'a na użytkownika, tak jak to opisałeś, od root'a -> user using su - my_user_name. Co oznacza, że ​​system wie, czego powinien używać dla tego użytkownika, ale nie ... - Danielson


Możesz zmienić skrypt init dla neo4j zrobić ulimit -n 40000 przed uruchomieniem neo4j.

Jednak nie mogę pomóc, ale czuję, że szczekasz złe drzewo. Robi neo4j zgodnie z prawem potrzebujesz ponad 10 000 otwartych deskryptorów plików? To brzmi bardzo jak błąd neo4j lub sposób, w jaki go używasz. Próbowałbym rozwiązać ten problem.


2
2018-02-02 23:31



zaczynam neo4j za pomocą neo4j start. Gdzie mogę znaleźć skrypt init? - theharshest
spróbuj pisać ulimit -n 40000 przed neo4j start - abligh


Mam wiele problemów z tym, żeby to zadziałało.

Poniższe umożliwia aktualizację bez względu na uprawnienia użytkownika.

sudo sysctl -w fs.inotify.max_user_watches=100000

Edytować

Właśnie zobaczyłem to od innego użytkownika również na innej witrynie stackexchange (zarówno pracy, ale tej wersji na stałe aktualizuje ustawienie systemu, zamiast tymczasowo):

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

2
2017-07-10 15:41





Spróbuj uruchomić to polecenie, aby utworzyć *_limits.conf plik pod /etc/security/limits.d

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

Po prostu wyjdź z terminalu i zaloguj się ponownie i sprawdź w ulimit -n ustawi się na * użytkowników


2
2017-07-29 07:36



Łatwa i pomocna odpowiedź. - sumanth
Dzięki @sumanth, chętnie Ci pomożemy. - Mahattam


tl; dr ustawi zarówno miękkie, jak i twarde limity

Jestem pewien, że działa zgodnie z zamierzeniami, ale dodam to tutaj na wszelki wypadek. Dla kompletności limit jest tutaj ustawiony (składnia poniżej): /etc/security/limits.conf

some_user       soft    nofile          60000
some_user       hard    nofile          60000

i aktywowane w następujący sposób w /etc/pam.d/common-session:

session required pam_limits.so

Jeśli ustawisz tylko twardy limit, ulimit -a wyświetli domyślną (1024): Jeśli ustawisz tylko miękkość, limit ulimit -a pokaże (4096)

Jeśli ustawisz oba ulimit -a pokaże miękki limit (do twardego limitu oczywiście)


2
2017-09-12 00:51