Come controllo ulimit per un altro utente e cambio file aperti?


18

Ho un processo in esecuzione come utente Gearman e voglio cambiare open filesper evitare questo brutto errore:

ERRORE 2014-09-12 17: 49: 14.000000 [main] accetta (Troppi file aperti) -> libgearman-server / gearmand.cc: 788

Come posso eseguire ulimit come un altro utente su Ubuntu e cambiare file aperti? Al momento non eseguo il login come gearman ma ho accesso root. Ho provato a fare questo:

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

come raccomandato qui ma nulla ottiene l'output:

$ su gearman --shell /bin/bash --command "ulimit -n"
Password: 
$

Risposte:


25

Rivisitato questo solo perché mi sono imbattuto in esso durante una ricerca su Google e ho trovato utile il commento di Tony : mentre è vero che i limiti sono posti a livello di processo, il modo in cui determineresti i limiti in atto per un determinato utente sarebbe trova i processi che hanno avviato e quindi controlla il proc/${id}/limits.

In particolare:

$ ps -u username  # look up processes owned by user
$ sudo grep 'open files' /proc/${id}/limits  # find "Max open files" line for process ID

2
Questa dovrebbe essere la risposta accettata, utilizzata per scoprire l'ulimit corrente per l'utente redis su Debian.
tholu,

6

Quando si esegue il ulimitcomando, influisce solo sul processo in esecuzione ulimit(shell) e su tutti i sottoprocessi. Quindi, quando esegui bash --command "ulimit -n", influenza solo il numero di file aperti per quell'istanza di bash, quindi bash esce, quindi i processi futuri non sono interessati.

Quindi, per ottenere ciò che desideri (per aumentare il limite di file aperto per il tuo processo reale), probabilmente ha più senso modificare limits.confper aumentare il limite di file aperto per il tuo specifico utente Gearman.

Vedi esempi di limits.conf altrove o qui .


Questo è anche quello che ho trovato, ma mi piacerebbe essere in grado di verificare se "ha avuto effetto". Non capisco più il problema che stavo avendo, quindi sono sicuro che lo abbia fatto
Tony

10
È così che controlli more /proc/<proc_id>/limits ... forse vale la pena aggiungere per rispondere
Tony,

5
Vale la pena menzionare anche la posizione di limits.conf:/etc/security/limits.conf
UpTheCreek

1

Prova a usare su - <USERNAME> -c ulimit' -Hn'. L'ho appena testato su CEntOS 7 e funziona.


1
Questo non funzionerà se <USERNAME>non è possibile accedere (ha la shell nologin).
dr01,
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.