Se si desidera ottenere il numero di ls /proc/my_pid/fd | wc -l
in java, è possibile utilizzare JMX.
Se si dispone di MBeanServerConnection
, è possibile ottenere l'attributo "OpenFileDescriptorCount
". questo ti darà lo stesso risultato del precedente ls..|wc -l
.
inoltre esiste un altro attributo "MaxFileDescriptorCount
", che indica il numero massimo consentito.
Se si desidera solo conoscere il valore, ma non inserirlo nel codice, è possibile utilizzare il metodo ls..|wc -l
o leggere da jconsole
(con interfaccia grafica).
NOTA
ls /proc/my_pid/fd | wc -l
Questo numero indica quanti FD aperta dal processo (applicazione java). per esempio. i file della tua azienda vengono contati, anche questi vasi, vengono contati anche i file delle librerie. Se vuoi solo ottenere il conteggio dei tuoi file aziendali, devi implementare un contatore da solo. Oppure, diciamo che si vuole fare con shellscript, grep
qualcosa fuori allora wc -l
EDIT
codice aggiuntivo esempio, ma è solo un esempio. non scritto in IDE, non testato con il compilatore. :)
ObjectName oName = new ObjectName("java.lang:type=OperatingSystem");
MBeanServerConnection conn ; // you should get the connection following the api, take a look the java api/ google some example
javax.management.AttributeList list = conn.getAttributes(oName, new String[]{"OpenFileDescriptorCount", "MaxFileDescriptorCount"});
for(Attribute attr: list.asList()){
System.out.println(attr.getName() + ": " + attr.getValue());
}
Impossibile basta incrementare un conteggio ogni volta che apri un file ... e lo decremento ogni volta che ne chiudi uno? – NominSim
Suppongo che sia un modo per farlo ... Esiste una soluzione più pulita? – JAM
È possibile eseguire tale comando in java. Dai uno sguardo: http://docs.oracle.com/javase/6/docs/api/java/lang/Runtime.html Non riesco a immaginare che java memorizzi quali e quanti file hai aperto. – mmirwaldt