Newsgroup: it.comp.os.linux.sys
Titolo: Ulimit e open file

Ciao a tutti, sono alle prese con alcuni problemi legati a "Too many files
open" su una macchina dove gira apache, tomcat, j2sdk, mysql. In un primo
momento ulimit -n restituiva il valore 1024, innalzato a 4096 alcuni
problemi sembrano risolti e il servizio fornito dalla macchina è più
continuativo. Ora però mi ritrovo ancora alcuni messaggi riportanti
l'errore di cui sopra e vorrei monitorare la situazione prima di alzare
ulteriormente il valore con ulimit.
La domanda è: come faccio a sapere il numero **attuale** di file aperti?
In rete si parla molto di file-nr, file-max et simili ma nessuno di questi
riporta valori che possano sembrare veritieri...
Grazie
Daniel
-- 
questo articolo e` stato inviato via web dal servizio gratuito 
http://www.newsland.it/news
 segnala gli abusi ad 
ab...@newsland.it

 riporta valori che possano sembrare veritieri...
mumble mumble... cosa ti faccio installare.
masadamo@opsweb ~ $ esearch lsof
[ Results for search key : lsof ]
[ Applications found : 2 ]
*  sys-process/lsof
      Latest version available: 4.75
      Latest version installed: [ Not Installed ]
      Size of downloaded files: 955 kB
      Homepage:    
ftp://vic.cc.purdue.edu/pub/tools/unix/lsof/README
      Description: Lists open files for running Unix processes
      License:     GPL-2
-- 
Massimiliano

 La domanda è: come faccio a sapere il numero **attuale** di file aperti?
man lsof
-- 
Chaos A.D.		|	Raging crowd
Tanks on the streets	|	Burning cars
Confronting police	|	Bloodshed starts
Bleeding the Plebs	|	Who'll be alive?

 masadamo@opsweb ~ $ esearch lsof
Grazie per l'interessamento ma già uso lsof in pipe con wc per sapere ciò
che riguarda un particolare processo lsof -p pid | wc -l oppure per sapere
in generale lsof | wc -l. Il problema è che se controllo il valore di
tutti i processi (lsof | wc -l) ottengo una cifra come 11500 circa (per
avere l'idea dell'ordine di grandezza), però con ulimit ho impostato 4096.
Allora questo limite è per OGNI processo oppure globale? Perchè se fosse
così la macchina dovrebbe essere già in trans...oppure il dato ottenuto
con lsof non correlato a quello che cerco io.


 riporta valori che possano sembrare veritieri...
Perché il valore in file-nr non ti sembra veritiero?
Ciao,
-- 
  Daniele Orlandi

 PerchÃ© il valore in file-nr non ti sembra veritiero?
Perchè non trovo un riscontro...
www:~ # cat /proc/sys/fs/file-nr 
3660    0       209698
www:~ # lsof | wc -l
10839
Ciao


be il terzo valore di 'file-nr' (che sarebbe lo stesso numero presente 
in file-max che però puoi cambiare) cosa dice?
Da quanto ho capito (mi è successo parecchie volte tempo fa):
'ulimit -n' imposta il numero massimo di file aperti da un singolo processo
mentre
/proc/sys/fs/file-max imposta il numero massimo di file aperti da tutto 
il sistema.
Questo spiega perchè 'lsof | wc -l' è molto maggiore di 'ulimit -n'
'lsof | wc -l' dovrebbe darti sempre un numero minore di file-max..
Se te lo da uguale riceverai presto (o già ricevi) l'errore too many 
open files.
Al momento io ho in file-max
(che modifichi con un 'echo XXX > /proc/sys/fs/file-max')
209702
e 'lsof | wc -l' mi da 123821
mentre ulimit -n è impostato a 1024 (come default)
ed ho risolto tutti i problemi.
Comunque se fai
cat /proc/sys/fs/file-nr guarda il secondo valore (file aperti) ed il 
terzo valore (numero massimo di file apribili) e regola di conseguenza 
file-max


 file-max
Il problema è che riporta zero...(vedi sopra).


 Il problema è che riporta zero...(vedi sopra).
Ed in questo momento ti da l'errore dei file aperti?
Comunque credo sia impossibile che tu abbia 0 file aperti.
Il problema è da un altra parte.
Il primo valore è il numero massimo di file che sono stati allocati 
(magari in un momento di picco il kernel ti ha allocato 3660 file).
Aspettiamo che qualche guru nel forum ci dia una dritta anche perchè lo 
stesso problema capita anche a me a volte.

 stesso problema capita anche a me a volte.
Ok.


 10839
file-nr è il numero di *file descriptors* in uso, è un'informazione diversa
da quella di lsof. Per esempio, la directory corrente è un file aperto ma
non ha un file descriptor in uso.
A prescindere da ciò, i limiti che ti interessando sono file-max che è
applicato a file-nr e ulimit che è applicato al processo. Per il secondo
dovresti poter contare i fd aperti con "ls /proc/<pid>/fd | wc"
Ciao,
-- 
  Daniele Orlandi