Jeśli chcesz uzyskać numer ls /proc/my_pid/fd | wc -l
w języku Java, możesz użyć JMX.
Gdy masz MBeanServerConnection
, możesz uzyskać atrybut "OpenFileDescriptorCount
". da to taki sam wynik jak powyższy ls..|wc -l
.
też istnieje inny atrybut „MaxFileDescriptorCount
”, który opowiada swoją maksymalna liczba dozwolona.
Jeśli chcesz tylko poznać wartość, ale nie możesz jej wprowadzić w swoim kodzie, możesz zrobić to na swój numer ls..|wc -l
lub odczytać z jconsole
(z GUI).
UWAGA
ls /proc/my_pid/fd | wc -l
liczba ta wskazuje, ile fd otwierane przez proces (aplikacja Java). na przykład Twoje pliki biznesowe są zliczane, również te słoiki, pliki bibliotek są liczone. Jeśli chcesz tylko zliczyć pliki biznesowe, musisz sam zaimplementować licznik. Albo, że chcesz to zrobić z shellscript, grep
coś się wówczas, wc -l
EDIT
code Dodaj przykład, ale jest to tylko przykład. nie napisane w IDE, nie testowane przy użyciu kompilatora. :)
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());
}
nie potrafisz po prostu zwiększasz liczbę za każdym razem, gdy otwierasz plik ... i zmniejszasz go, ilekroć go zamykasz? – NominSim
Przypuszczam, że to jeden ze sposobów robienia tego .. Czy istnieje czystsze rozwiązanie? – JAM
Można wykonać to polecenie w języku Java. Zobacz: http://docs.oracle.com/javase/6/docs/api/java/lang/Runtime.html Nie mogę sobie wyobrazić, że java zapamiętuje, które i ile otwartych plików. – mmirwaldt