ulimit PICKLE: "Operazione non consentita" e "Comando non trovato"


15

Sto cercando di aumentare il numero massimo di file aperti per l'utente corrente

> ulimit -n
1024

Tento di aumentare e fallire come segue

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

Quindi faccio la cosa naturale e provo a correre con il permesso temporaneo, ma fallisco

> sudo ulimit -n 4096
sudo: ulimit: command not found

Domande

  1. Come aumentare ulimit?
  2. Perché sta succedendo?

Usare Fedora 14


Risposta al commento eliminato: ulimit 4096non funziona. Penso che -nsia corretto. Come prova del concetto funziona se io per primo sudo su - root(ma cambia solo per root).
Paislee,


Risposte:


17

ulimitè una shell integrata, non un comando esterno. Deve essere integrato perché agisce sul processo stesso della shell, come cd: i limiti, come la directory corrente, sono una proprietà di quel particolare processo.

sudo bash -c 'ulimit -n 4096'funzionerebbe, ma cambierebbe il limite solo per il processo bash invocato sudo, il che non ti aiuterebbe.

Esistono due valori per ciascun limite: il limite rigido e il limite flessibile. Solo root può aumentare il limite massimo; chiunque può abbassare il limite rigido e il limite morbido può essere modificato in entrambe le direzioni con l'unico vincolo che non può essere superiore al limite rigido. Il limite soft è il valore effettivo che conta.

Pertanto è necessario disporre che tutti i processi abbiano un limite rigido per i file aperti di almeno 4096. È possibile mantenere il limite software a 1024. Prima di avviare quel processo che richiede molti file, aumentare il limite soft. In /etc/security/limits.conf, aggiungi le linee

paislee hard nofile 4096
paislee soft nofile 1024

dove paisleeè il nome dell'utente che si desidera eseguire il processo come. Nella shell che avvia il processo per il quale si desidera un limite superiore, eseguire

ulimit -Sn unlimited

per aumentare il limite soft al limite hard.


1
Le alternative a sudo bash -csono sudo -iche avvia una shell di accesso e sudo -sche avvia una shell. Si applicano le stesse limitazioni ma ciò potrebbe essere utile in altre circostanze.
Bram,

Grazie. Posso fare alcune domande correlate? L'altra risposta e post stackoverflow.com/a/17483998/156458 e unix.stackexchange.com/a/238413/674 e unix.stackexchange.com/a/169035/674 tutti raccomandati usando sudo sh -c "ulimit -c 1024 && exec su $LOGNAME". Ma entrambi ulimit -c 1024e exec su $LOGNAME" colpisce solo il guscio creato da sudo, quindi qual è lo scopo del comando? exec su $LOGNAME"inoltre non fa nulla di significativo per utilizzare il limite modificato. Sono molto confuso e mi chiedo se mi manca qualcosa.
Tim

Si noti che ulimit -Sn unlimitednon funziona sulla maggior parte delle shell. Il metodo giusto è chiamare ulimit -ae quindi chiamare ulimit -n <number>dove <numero è il limite rigido (la colonna di destra).
schily

3

aprire il file /etc/security/limits.confe aggiungere la riga <user> soft nofile <value>. per usare ulimitchange to root user e provare lo stesso.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.