mirror of
https://github.com/xuhuisheng/lemon.git
synced 2026-10-26 11:39:09 +08:00
211 lines
5.4 KiB
Plaintext
211 lines
5.4 KiB
Plaintext
<%@page contentType="text/html;charset=UTF-8"%>
|
|
<%@page import="java.lang.management.*"%>
|
|
<%@page import="java.net.*"%>
|
|
<%@page import="java.util.*"%>
|
|
<%@page import="javax.management.*"%>
|
|
<%@page import="javax.management.openmbean.CompositeData"%>
|
|
<%@page import="javax.management.openmbean.TabularData"%>
|
|
<%!
|
|
public static class EntryBean {
|
|
private Object key;
|
|
private Object value;
|
|
public EntryBean(Object key, Object value) {
|
|
this.key = key;
|
|
this.value = value;
|
|
}
|
|
public Object getKey() {
|
|
return key;
|
|
}
|
|
public Object getValue() {
|
|
return value;
|
|
}
|
|
}
|
|
|
|
Object getJmxObject(String objectNameString, String attributeNameString) throws Exception {
|
|
ObjectName objectName = ObjectName.getInstance(objectNameString);
|
|
Object value = ManagementFactory.getPlatformMBeanServer().getAttribute(objectName, attributeNameString);
|
|
return value;
|
|
}
|
|
|
|
Object getJmxDate(String objectNameString, String attributeNameString) throws Exception {
|
|
Object value = getJmxObject(objectNameString, attributeNameString);
|
|
Date startTime = new Date((Long) value);
|
|
return startTime;
|
|
}
|
|
|
|
Object getJmxComposite(String objectNameString, String attributeNameString) throws Exception {
|
|
Object value = getJmxObject(objectNameString, attributeNameString);
|
|
CompositeData compositeData = (CompositeData) value;
|
|
StringBuffer buff = new StringBuffer();
|
|
for (String key : compositeData.getCompositeType().keySet()) {
|
|
buff.append(key)
|
|
.append("=")
|
|
.append(compositeData.get(key))
|
|
.append(",");
|
|
}
|
|
return buff.toString();
|
|
}
|
|
%>
|
|
<html>
|
|
<head>
|
|
<meta charset="utf-8">
|
|
<title>system info</title>
|
|
<style type="text/css">
|
|
tbody tr:nth-child(odd) td,
|
|
tbody tr:nth-child(odd) th {
|
|
background-color: #f9f9f9;
|
|
}
|
|
|
|
td {
|
|
font-size: 12px;
|
|
}
|
|
</style>
|
|
</head>
|
|
<body>
|
|
<h1>server</h1>
|
|
|
|
<table border="1" width="100%">
|
|
<tbody>
|
|
<tr>
|
|
<td>host name</td>
|
|
<td><%=InetAddress.getLocalHost().getHostName()%></td>
|
|
</tr>
|
|
<tr>
|
|
<td>host address</td>
|
|
<td><%=InetAddress.getLocalHost().getHostAddress()%></td>
|
|
</tr>
|
|
<tr>
|
|
<td>os</td>
|
|
<td><%=(System.getProperty("os.name") + " " + System.getProperty("os.version"))%></td>
|
|
</tr>
|
|
<tr>
|
|
<td>java</td>
|
|
<td><%=System.getProperty("java.version")%></td>
|
|
</tr>
|
|
</tbody>
|
|
</table>
|
|
|
|
<!-- ====================================================================== -->
|
|
<br>
|
|
<!-- ====================================================================== -->
|
|
|
|
<h1>jvm statistics</h1>
|
|
|
|
<table border="1" width="100%">
|
|
<tbody>
|
|
<%
|
|
{
|
|
%>
|
|
<tr>
|
|
<td>Start Time</td>
|
|
<td><%=getJmxDate("java.lang:type=Runtime", "StartTime")%></td>
|
|
</tr>
|
|
<tr>
|
|
<td>Memory(total / free)</td>
|
|
<td>
|
|
<%=getJmxObject("java.lang:type=OperatingSystem", "TotalPhysicalMemorySize")%> /
|
|
<%=getJmxObject("java.lang:type=OperatingSystem", "FreePhysicalMemorySize")%>
|
|
</td>
|
|
</tr>
|
|
<tr>
|
|
<td>Heap Memory</td>
|
|
<td><%=getJmxComposite("java.lang:type=Memory", "HeapMemoryUsage")%></td>
|
|
</tr>
|
|
<tr>
|
|
<td>Non Heap Memory</td>
|
|
<td><%=getJmxComposite("java.lang:type=Memory", "NonHeapMemoryUsage")%></td>
|
|
</tr>
|
|
<tr>
|
|
<td>System Load Average</td>
|
|
<td><%=getJmxObject("java.lang:type=OperatingSystem", "SystemLoadAverage")%></td>
|
|
</tr>
|
|
<tr>
|
|
<td>Loaded Classes (currently / total / unloaded)</td>
|
|
<td>
|
|
<%=getJmxObject("java.lang:type=ClassLoading", "LoadedClassCount")%> /
|
|
<%=getJmxObject("java.lang:type=ClassLoading", "TotalLoadedClassCount")%> /
|
|
<%=getJmxObject("java.lang:type=ClassLoading", "UnloadedClassCount")%>
|
|
</td>
|
|
</tr>
|
|
<tr>
|
|
<td>Threads (total / peak / daemon)</td>
|
|
<td>
|
|
<%=getJmxObject("java.lang:type=Threading", "TotalStartedThreadCount")%> /
|
|
<%=getJmxObject("java.lang:type=Threading", "PeakThreadCount")%> /
|
|
<%=getJmxObject("java.lang:type=Threading", "DaemonThreadCount")%>
|
|
</td>
|
|
</tr>
|
|
<%
|
|
}
|
|
%>
|
|
</tbody>
|
|
</table>
|
|
|
|
<!-- ====================================================================== -->
|
|
<br>
|
|
<!-- ====================================================================== -->
|
|
|
|
<h1>system info</h1>
|
|
|
|
<table border="1" width="100%">
|
|
<tbody>
|
|
<%
|
|
{
|
|
Map<Object, Object> sortedMap = new TreeMap<Object, Object>(System.getProperties());
|
|
for (Map.Entry<Object, Object> entry : sortedMap.entrySet()) {
|
|
pageContext.setAttribute("entry", entry);
|
|
if ("line.separator".equals(entry.getKey())) {
|
|
Object key = entry.getKey();
|
|
Object value = entry.getValue();
|
|
value = value.toString()
|
|
.replace("\n", "\\n")
|
|
.replace("\r", "\\r");
|
|
pageContext.setAttribute("entry", new EntryBean(key, value));
|
|
}
|
|
%>
|
|
<tr>
|
|
<td>${entry.key}</td>
|
|
<td>${entry.value}</td>
|
|
</tr>
|
|
<%
|
|
}
|
|
}
|
|
%>
|
|
</tbody>
|
|
</table>
|
|
|
|
<!-- ====================================================================== -->
|
|
<br>
|
|
<!-- ====================================================================== -->
|
|
|
|
<h1>env info</h1>
|
|
|
|
<table border="1" width="100%">
|
|
<tbody>
|
|
<%
|
|
{
|
|
Map<Object, Object> sortedMap = new TreeMap<Object, Object>(System.getenv());
|
|
for (Map.Entry<Object, Object> entry : sortedMap.entrySet()) {
|
|
pageContext.setAttribute("entry", entry);
|
|
if ("line.separator".equals(entry.getKey())) {
|
|
Object key = entry.getKey();
|
|
Object value = entry.getValue();
|
|
value = value.toString()
|
|
.replace("\n", "\\n")
|
|
.replace("\r", "\\r");
|
|
pageContext.setAttribute("entry", new EntryBean(key, value));
|
|
}
|
|
%>
|
|
<tr>
|
|
<td>${entry.key}</td>
|
|
<td>${entry.value}</td>
|
|
</tr>
|
|
<%
|
|
}
|
|
}
|
|
%>
|
|
</tbody>
|
|
</table>
|
|
</body>
|
|
</html>
|