Nếu bạn muốn lấy số ls /proc/my_pid/fd | wc -l
bằng java, bạn có thể sử dụng JMX.
Khi bạn có MBeanServerConnection
, bạn có thể nhận thuộc tính "OpenFileDescriptorCount
". điều này sẽ cho bạn kết quả tương tự như trên ls..|wc -l
.
cũng có một thuộc tính khác "MaxFileDescriptorCount
", cho biết số lượng tối đa cho phép.
Nếu bạn chỉ muốn biết giá trị nhưng không nhận được mã trong mã, bạn có thể thực hiện theo cách ls..|wc -l
hoặc đọc từ jconsole
(bằng GUI).
LƯU Ý
ls /proc/my_pid/fd | wc -l
con số này chỉ ra có bao nhiêu fd mở bởi quá trình của bạn (java ứng dụng). ví dụ. các tệp doanh nghiệp của bạn được tính, cũng là các tệp đó, các tệp thư viện cũng được tính. Nếu bạn chỉ muốn có được số lượng các tập tin kinh doanh của bạn, bạn phải thực hiện một truy cập của chính mình. Hoặc, nói rằng bạn muốn làm điều đó với shellscript, grep
một cái gì đó ra sau đó wc -l
EDIT
add mã ví dụ, nhưng nó chỉ là một ví dụ. không được viết bằng IDE, không được thử nghiệm với trình biên dịch. :)
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());
}
Can not bạn chỉ tăng số lượng bất cứ khi nào bạn mở một tệp ... và giảm nó bất cứ khi nào bạn đóng một tệp? – NominSim
Tôi cho rằng đó là một cách để làm điều đó .. Có giải pháp sạch hơn không? – JAM
Bạn có thể thực hiện lệnh đó trong java. Hãy xem: http://docs.oracle.com/javase/6/docs/api/java/lang/Runtime.html Tôi không thể tưởng tượng rằng java ghi nhớ cái nào và số lượng tệp bạn đã mở. – mmirwaldt