jstack.jsp
3.15 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
<%@ 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);
}
}
%>