jstack.jsp 3.15 KB
<%@ page language="java" contentType="text/html; charset=GBK" %>
<%@ include file="/systeminfo/init_wev8.jsp" %>
<%@ taglib uri="/WEB-INF/weaver.tld" prefix="wea"%>
<%@ page import="java.lang.management.ManagementFactory" %>
<%@ page import="java.lang.management.ThreadInfo" %>
<%@ page import="java.lang.management.ThreadMXBean" %>
<%@ page import="weaver.general.TimeUtil" %>
<%@ page import="java.util.Properties" %>
<%@ page import="java.io.*" %>
<%@ page import="weaver.general.GCONST" %>
<%@ page import="weaver.general.BaseBean" %>

<%
String cookievalue = "";
Cookie[] cookies = request.getCookies();
if(cookies == null) {
new BaseBean().writeLog("没有Cookie信息");
return;
} else {
 for(int i=0; i<cookies.length; i++) {
	// 获得具体的Cookie
	Cookie cookie = cookies[i];
	// 获得Cookie的名称
	String name = cookie.getName();
	if(name.equals("profilerCookie")){
		cookievalue = cookie.getValue();
		break;
	}
 }
} 
if(cookievalue!=null && cookievalue.indexOf("..")!=-1){
	return;
}
String first = request.getParameter("first");
StringBuffer sb = new StringBuffer();

ThreadMXBean tb = ManagementFactory.getThreadMXBean();
final String fileName = new String(TimeUtil.getOnlyCurrentTimeString().replaceAll(":", ""));
Properties props = System.getProperties();
long[] tids = tb.getAllThreadIds();
for (int i = 0; i < tids.length; i++)
{
  long cputime = tb.getThreadCpuTime(tids[i]);
  ThreadInfo info = tb.getThreadInfo(tids[i], 2147483647);
  if (info != null)
  {
	Thread.State state = info.getThreadState();
	StackTraceElement[] stacks = info.getStackTrace();
	if (stacks != null) {
	  StringBuffer current = new StringBuffer();
	  boolean appendFlag = false;
	  for (StackTraceElement stack : stacks) {
		  //包含关键字的线程 才输出到文件中 避免文件太大
		  if(stack.toString().indexOf("weaver")!=-1||stack.toString().indexOf("__jsp")!=-1){
				appendFlag = true;
		  }
		  current.append(info.getThreadName()+"||"+state.name()+"||"+stack.toString()+"\n");
	  }
	  if(appendFlag){
		sb.append(current);
	  }
	}
  }
}
FileWriter fw = null;
try
{
  if(first.equals("1")){
	File file = new File(GCONST.getRootPath()+"/profiler/threadlog/"+cookievalue);
	if(!file.exists())file.mkdirs();
	String[] tempList = file.list();
	File temp = null;
    for (int i = 0; i < tempList.length; i++) {
		temp = new File(GCONST.getRootPath()+"/profiler/threadlog/"+cookievalue + File.separator + tempList[i]);
		 if (temp.isFile()) {
             temp.delete();
          }
	}
  }
  File oldFile = new File(GCONST.getRootPath()+"/profiler/threadlog/"+cookievalue+"/"+fileName);
  if(oldFile.exists())oldFile.delete();
  fw = new FileWriter(GCONST.getRootPath()+"/profiler/threadlog/"+cookievalue+"/"+fileName, false);
  
  fw.write(sb.toString());
  fw.write(System.getProperty("line.separator"));
  
  fw.flush();
  

  fw.close();
}
catch (IOException ew)
{
  System.out.println("关闭文件流出错!");
  System.out.println(ew);
  try
  {
	if (fw != null) {
	  fw.close();
	}
  }
  catch (Exception e)
  {
	System.out.println("关闭文件流出错!");
	System.out.println(e);
  }
}
finally
{
  try
  {
	if (fw != null) {
	  fw.close();
	}
  }
  catch (Exception e)
  {
	System.out.println("关闭文件流出错!");
	System.out.println(e);
  }
}
%>