项目中内存溢出,故关注程序内存使用情况 写了个打印内存使用情况的脚本: import java.io.BufferedReader; import java.io.BufferedWriter; import java.io.File; import java.io.FileWriter; import java.io.IOException; import java.io.InputStream; import java.io.InputStreamReader; public class CdMemoryReader { BufferedWriter writer; /** * * @Description: TODO * @param @param args args[0] : process name args[1]: execute time (int) args[2]: sleep time (long) * @return void * @throws @param args * @date:2010/06/19 * author: */ public static void main(String args[]) { final String brower= "brower"; final String mms= "mms"; long sleeptime = 2000; int times = 1000 ; String procName = heco ; // CdMemoryReader cdMemoryReader = new CdMemoryReader() ; System.out.println(); switch (args.length){ default : System.out.println("the args more than 3 is useless !"); System.out.println(); case 3 : try{ long sleepT = Long.parseLong(args[2]); sleeptime = sleepT < 1000 ? 1000 : sleepT ; }catch(NumberFormatException e){ System.out.println("the args: " +args[2] + "is not a number ."); System.exit(0); } case 2 : try{ int exectime = Integer.parseInt(args[1]); times = exectime <= 0 ? 1 : exectime ; }catch(NumberFormatException e){ System.out.println("the args: " +args[1] + "is not a number ."); System.exit(0); } case 1 : String name = args[0]; //这里可以不做判断 直接使用传入的参数 我们是特定打印 if (name.contains(brower)) { procName = brower; }else if (name.contains(mms)){ procName = mms; }else { System.out.println("the process name is wrong !!"); System.exit(0); } case 0 : System.out.println("proce name: " + procName); System.out.println(); System.out.println("execute times: " + times); System.out.println(); System.out.println("sleep time: " + sleeptime); System.out.println(); new CdMemoryReader().cdAccess(sleeptime,times,20,procName); break ; } } private void cdAccess(long time, int times, int lines,String procName) { Runtime rt = Runtime.getRuntime(); StringBuffer buffer = new StringBuffer(); String title = " PID Vss Rss Pss Uss cmdline" ; System.out.println(title); try { writer = new BufferedWriter(new FileWriter(new File("D:/log.txt"))); writer.write(title + "/n"); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } int printTime = 1 ; for (int i = 0; i < times; i++) { try { String cmd = "adb shell procrank"; buffer.delete(0, buffer.length()); Process proc = rt.exec(cmd); InputStream stderr = proc.getInputStream(); InputStreamReader isr = new InputStreamReader(stderr); BufferedReader br = new BufferedReader(isr); String line = null; int j = 0; while ((line = br.readLine()) != null) { if (j < lines) { if (line.contains(procName)){ System.out.println(line + " PrintTime : " + printTime+++ " execute time : " + (i+1)); buffer.append(line + "/n"); break ; } } j++; } // buffer.append("/n"); // buffer.append("/n"); writer.write(buffer.toString()); writer.flush(); // System.out.println("buffer.toString()" + buffer.toString()); } catch (Throwable t) { t.printStackTrace(); } try { Thread.sleep(time); } catch (InterruptedException ie) { ie.printStackTrace(); } } try { writer.close(); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } } } 日志文件默认放在D盘 将uss 的数据获取 放在excel 中可以生成以下的图,更直观些