Vraag Hoe verhoog ik de open bestandslimiet voor een niet-root gebruiker?


Dit gebeurt op Ubuntu Release 12.04 (precieze) 64-bit Kernel Linux 3.2.0-25-virtual

Ik probeer het aantal toegestane open bestanden voor een gebruiker te vergroten. Dit is voor mijn eclipse java-applicatie waarbij de huidige limiet van 1024 niet voldoende is.

Volgens de berichten die ik tot nu toe heb gevonden, zou ik regels moeten kunnen plaatsen

/etc/security/limits.conf vindt dit leuk:

soft nofile 4096
hard nofile 4096

om het aantal toegestane open bestanden voor alle gebruikers te verhogen.

Maar dat werkt niet voor mij en ik denk dat het probleem niet gerelateerd is aan dat bestand.

Voor alle gebruikers is de standaardlimiet 1024, ongeacht wat zich in /etc/security/limits.conf bevindt (opnieuw opgestart na het wijzigen van dat bestand)

$ ulimit -n
1024

Nu, ondanks de invoer in /etc/security/limits.conf kan ik dat niet verhogen:

$ ulimit -n 2048

-bash: ulimit: open bestanden: kan limiet niet wijzigen: bewerking niet toegestaan Het vreemde is dat ik de limiet kan veranderen naar beneden, maar kan dit niet naar boven wijzigen - zelfs om terug te gaan naar een getal dat lager is dan de oorspronkelijke limiet:

$ ulimit -n 800
$ ulimit -n
800

$ ulimit -n 900

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

Als root kan ik die limiet wijzigen naar wat ik wil, omhoog of omlaag. Het lijkt niet eens te lijken op de zogenaamd systeembrede limiet in / proc / sys / fs / file-max

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

# ulimit -n 188898
# ulimit -n 
188898

Maar zelfs als ik de eclips krijg om als root te draaien, crasht mijn applicatie nog steeds vanwege de uitzondering "Too Many Open File"!

Tot dusver heb ik geen manier gevonden om de limiet voor open bestanden voor een niet-rootgebruiker te verhogen.

Hoe moet ik dit op de juiste manier doen? Ik heb verschillende andere berichten bekeken maar geen geluk!


121
2017-07-11 02:06


oorsprong


Merk ook op dat nadat je hebt bewerkt /etc/security/limits.conf, moet u mogelijk uitloggen en weer teruggaan voordat u de nieuwe maximumlimiet kunt gebruiken. Ik deed dit en was verbijsterd door ulimit -Hs nog steeds met 1000 toen ik het net had verhoogd naar 1000000! Toen logte ik uit en weer in, en ulimit toonde het nieuwe bedrag. - Cerin
Voor een GUI-sessie is het misschien ook belangrijk (Ubuntu 16+) deze draad. - Waldemar Wosiński


antwoorden:


De ulimit commando standaard wijzigt de HARD-limieten, die u (een gebruiker) kunt verlagen, maar niet kunt verhogen.

Gebruik de -S optie om de te veranderen ZACHT limiet, die kan variëren van 0- {HARD}.

Ik heb aliased ulimit naar ulimit -S, dus het is standaard ingesteld op de zachte limieten de hele tijd.

alias ulimit='ulimit -S'

Wat betreft uw probleem, u mist een kolom in uw vermeldingen in /etc/security/limits.conf.

Er moeten VIER kolommen zijn, maar de eerste ontbreekt in uw voorbeeld.

* soft nofile 4096
* hard nofile 4096

De eerste kolom beschrijft WIE de limiet is om aan te vragen. '*' is een jokerteken, dus alle gebruikers. Om de limieten voor te verhogen wortel, je moet expliciet 'root' invoeren in plaats van '*'.

Je moet ook bewerken /etc/pam.d/common-session* en voeg de volgende regel toe aan het einde:

session required pam_limits.so

120
2017-07-11 02:16



Hoe verander ik de harde limiet voor het maximale aantal geopende bestandsbeschrijvingen? Mijn probleem is dat ik mijn Eclipse-applicatie zoveel bestanden moet laten openen als hij wil, maar de limiet van 4096 is niet genoeg en ik wil deze zo hoog mogelijk instellen op misschien 500000. Mijn instelling in de limits.conf is zoals je met de ster hebt genoemd en toch blijft de harde limiet niet bewegen. - iCode
heb je deze keer uitlogt / opnieuw opgestart? ulimit -a zal je alle limieten tonen, zodat je kunt vergelijken om te zien of ze zijn veranderd. - lornix
Nou, je ontdekte dat de waarde van / proc / sys / fs / file-max 188.897 was ... Dus ik zou zeggen dat je bovenlimiet tussen 188.000 (toegestaan) en 500.000 (niet toegestaan) is. Boggles de geest dat je iets hebt dat gelijktijdig meer dan 65000 open bestanden nodig heeft. Wauw. Meestal wordt dat op groot ijzer gedaan. Ik zou wantrouwig staan ​​tegenover een programmeerfout, een misvatting. (Met alle respect, alstublieft) - lornix
dat was het: sessie vereist pam_limits.so, bedankt! - lethalman
In eerste instantie miste ik de wildcard aan het einde van /etc/pam.d/common-session* en zojuist bewerkt common-session, en zelfs na een herstart werkte het niet. Maar na het toevoegen van dezelfde regel (voor pam_limits.so) naar common-session-noninteractive, ulimit -n heeft de nieuwe waarde weergegeven na een nieuwe aanmelding (niet opnieuw opstarten vereist). FWIW Ik probeerde de limiet voor root (alleen) te wijzigen. - Lambart


Als u zachte en harde limieten per gebruiker gebruikt, kunt u zoiets als gebruiken:

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

om te controleren of uw instellingen werken voor die specifieke gebruiker of niet.


15
2017-09-12 10:34





Ik heb veel problemen om dit te laten werken.

Door het volgende te gebruiken, kunt u het bijwerken, ongeacht uw gebruikerstoestemming.

sudo sysctl -w fs.inotify.max_user_watches=100000

4
2017-07-10 15:41



Ik probeerde dit omdat ik hetzelfde probleem had, maar het werkte niet $ sudo sysctl -w fs.inotify.max_user_watches=100000 fs.inotify.max_user_watches = 100000 $ ulimit -n 1024 - grepmaster