Process p = Runtime.getRuntime().exec("ps -al");
BufferedReader stdInput = new BufferedReader(new InputStreamReader(p.getInputSt ream()));
//然後讀取InputStream做分析…
這是通解,不過這有個很大的問題。事實上, Runtime.getRuntime().exec在Linu x實作上似乎是採取fork()的方式。眾所皆知的是,fork 的實作方法是duplicate parent PID的資源。這在小規模下其實不成問題,問題在於…當java memory佔用量很大的時候…
比方說,以我們這個case,2G。所以每call一次syst em call都會造成系統嚴重occupied。
目前我們是採用jni的方式,把system call轉移到c的部分去做。因為它是一個獨立的pid,所以不 會因此而產生巨大的paging(這拷貝動作的paging實在 很驚人)。這算是在java底下system call的小小(?)陷阱...
//然後讀取InputStream做分析…
這是通解,不過這有個很大的問題。事實上, Runtime.getRuntime().exec在Linu
比方說,以我們這個case,2G。所以每call一次syst
目前我們是採用jni的方式,把system call轉移到c的部分去做。因為它是一個獨立的pid,所以不
No comments:
Post a Comment