项目中内存溢出,故关注程序内存使用情况
写了个打印内存使用情况的脚本:
- 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 中可以生成以下的图,更直观些
from: http://blog.csdn.net/zhanghw0917/archive/2010/06/19/5680229.aspx