Lines 18-25
Link Here
|
18 |
|
18 |
|
19 |
package org.apache.catalina.manager; |
19 |
package org.apache.catalina.manager; |
20 |
|
20 |
|
21 |
import java.io.IOException; |
|
|
22 |
import java.io.PrintWriter; |
21 |
import java.io.PrintWriter; |
|
|
22 |
import java.lang.management.ManagementFactory; |
23 |
import java.lang.management.MemoryPoolMXBean; |
24 |
import java.lang.management.MemoryUsage; |
23 |
import java.lang.reflect.Method; |
25 |
import java.lang.reflect.Method; |
24 |
import java.text.MessageFormat; |
26 |
import java.text.MessageFormat; |
25 |
import java.util.Date; |
27 |
import java.util.Date; |
Lines 26-37
Link Here
|
26 |
import java.util.Enumeration; |
28 |
import java.util.Enumeration; |
27 |
import java.util.Iterator; |
29 |
import java.util.Iterator; |
28 |
import java.util.Set; |
30 |
import java.util.Set; |
|
|
31 |
import java.util.SortedMap; |
32 |
import java.util.TreeMap; |
29 |
import java.util.Vector; |
33 |
import java.util.Vector; |
30 |
|
34 |
|
31 |
import javax.management.MBeanServer; |
35 |
import javax.management.MBeanServer; |
32 |
import javax.management.ObjectInstance; |
36 |
import javax.management.ObjectInstance; |
33 |
import javax.management.ObjectName; |
37 |
import javax.management.ObjectName; |
34 |
import javax.servlet.ServletException; |
|
|
35 |
import javax.servlet.http.HttpServletResponse; |
38 |
import javax.servlet.http.HttpServletResponse; |
36 |
|
39 |
|
37 |
import org.apache.catalina.util.RequestUtil; |
40 |
import org.apache.catalina.util.RequestUtil; |
Lines 191-196
Link Here
|
191 |
public static void writeVMState(PrintWriter writer, int mode) |
194 |
public static void writeVMState(PrintWriter writer, int mode) |
192 |
throws Exception { |
195 |
throws Exception { |
193 |
|
196 |
|
|
|
197 |
SortedMap<String, MemoryPoolMXBean> memoryPoolMBeans = |
198 |
new TreeMap<String, MemoryPoolMXBean>(); |
199 |
for (MemoryPoolMXBean mbean: ManagementFactory.getMemoryPoolMXBeans()) { |
200 |
String sortKey = mbean.getType() + ":" + mbean.getName(); |
201 |
memoryPoolMBeans.put(sortKey, mbean); |
202 |
} |
203 |
|
194 |
if (mode == 0){ |
204 |
if (mode == 0){ |
195 |
writer.print("<h1>JVM</h1>"); |
205 |
writer.print("<h1>JVM</h1>"); |
196 |
|
206 |
|
Lines 205-210
Link Here
|
205 |
writer.print(formatSize |
215 |
writer.print(formatSize |
206 |
(new Long(Runtime.getRuntime().maxMemory()), true)); |
216 |
(new Long(Runtime.getRuntime().maxMemory()), true)); |
207 |
writer.print("</p>"); |
217 |
writer.print("</p>"); |
|
|
218 |
|
219 |
writer.write("<table border=\"0\"><thead><tr><th>Memory Pool</th><th>Type</th><th>Initial</th><th>Total</th><th>Maximum</th><th>Used</th></tr></thead><tbody>"); |
220 |
for (MemoryPoolMXBean memoryPoolMBean : memoryPoolMBeans.values()) { |
221 |
MemoryUsage usage = memoryPoolMBean.getUsage(); |
222 |
writer.write("<tr><td>"); |
223 |
writer.print(memoryPoolMBean.getName()); |
224 |
writer.write("</td><td>"); |
225 |
writer.print(memoryPoolMBean.getType()); |
226 |
writer.write("</td><td>"); |
227 |
writer.print(formatSize(Long.valueOf(usage.getInit()), true)); |
228 |
writer.write("</td><td>"); |
229 |
writer.print(formatSize(Long.valueOf(usage.getCommitted()), true)); |
230 |
writer.write("</td><td>"); |
231 |
writer.print(formatSize(Long.valueOf(usage.getMax()), true)); |
232 |
writer.write("</td><td>"); |
233 |
writer.print(formatSize(Long.valueOf(usage.getUsed()), true)); |
234 |
if (usage.getMax() > 0) { |
235 |
writer.write(" (" |
236 |
+ (usage.getUsed() * 100 / usage.getMax()) + "%)"); |
237 |
} |
238 |
writer.write("</td></tr>"); |
239 |
} |
240 |
writer.write("</tbody></table>"); |
208 |
} else if (mode == 1){ |
241 |
} else if (mode == 1){ |
209 |
writer.write("<jvm>"); |
242 |
writer.write("<jvm>"); |
210 |
|
243 |
|
Lines 213-218
Link Here
|
213 |
writer.write(" total='" + Runtime.getRuntime().totalMemory() + "'"); |
246 |
writer.write(" total='" + Runtime.getRuntime().totalMemory() + "'"); |
214 |
writer.write(" max='" + Runtime.getRuntime().maxMemory() + "'/>"); |
247 |
writer.write(" max='" + Runtime.getRuntime().maxMemory() + "'/>"); |
215 |
|
248 |
|
|
|
249 |
for (MemoryPoolMXBean memoryPoolMBean : memoryPoolMBeans.values()) { |
250 |
MemoryUsage usage = memoryPoolMBean.getUsage(); |
251 |
writer.write("<memorypool"); |
252 |
writer.write(" name='" + memoryPoolMBean.getName() + "'"); |
253 |
writer.write(" type='" + memoryPoolMBean.getType() + "'"); |
254 |
writer.write(" usageInit='" + usage.getInit() + "'"); |
255 |
writer.write(" usageCommitted='" + usage.getCommitted() + "'"); |
256 |
writer.write(" usageMax='" + usage.getMax() + "'"); |
257 |
writer.write(" usageUsed='" + usage.getUsed() + "'/>"); |
258 |
} |
259 |
|
216 |
writer.write("</jvm>"); |
260 |
writer.write("</jvm>"); |
217 |
} |
261 |
} |
218 |
|
262 |
|
Lines 520-526
Link Here
|
520 |
} else { |
564 |
} else { |
521 |
writer.write(" requestProcessingTime=\"0\""); |
565 |
writer.write(" requestProcessingTime=\"0\""); |
522 |
writer.write(" requestBytesSent=\"0\""); |
566 |
writer.write(" requestBytesSent=\"0\""); |
523 |
writer.write(" requestBytesRecieved=\"0\""); |
567 |
writer.write(" requestBytesReceived=\"0\""); |
524 |
writer.write(" remoteAddr=\"?\""); |
568 |
writer.write(" remoteAddr=\"?\""); |
525 |
writer.write(" virtualHost=\"?\""); |
569 |
writer.write(" virtualHost=\"?\""); |
526 |
writer.write(" method=\"?\""); |
570 |
writer.write(" method=\"?\""); |