java虚拟机性能监控

<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<%@page import="java.io.*,java.net.URL,java.net.URLClassLoader,java.lang.management.*,java.lang.reflect.*,sun.tools.attach.*"%>
<% 
  //需要将jdk安装lib目录下面的tools.jar放到项目里面
    final String virtualMachineClassName = "com.sun.tools.attach.VirtualMachine";
    //获取虚拟机控制权限
    Class<?> virtualMachineClass= Class.forName(virtualMachineClassName);
    final Method attachMethod = virtualMachineClass.getMethod("attach", String.class);
      
    //获取tomcat进程id
    final RuntimeMXBean runtime =ManagementFactory.getRuntimeMXBean();
    final String info = runtime.getName();
    final int index = info.indexOf("@");
    String pid="0000";
    if (index != -1) {
        pid = info.substring(0, index);
    }
    WindowsVirtualMachine jvmVirtualMachine=(WindowsVirtualMachine)attachMethod.invoke(virtualMachineClass, pid);

%>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
    <title>服务器线程信息</title>
    <script type="text/javascript" src="style/js/jquery-1.7.2.min.js"></script>
    <script type="text/javascript">
        $(document).ready(function(){
        });
        
        function fn_collectMemory(){
          <%
            Runtime.getRuntime().gc();
          %>
          window.location.reload();
        }
    </script>
    
</head>
<body>
<pre>
    <%
       Runtime lRuntime = Runtime.getRuntime();
       out.print("<br/>*** 内存统计开始 ***<br/>");
       out.print("虚拟机空闲内存: "+lRuntime.freeMemory()+"(B)="+lRuntime.freeMemory()/1024/1024+"(MB)<br/>");
       out.print("虚拟机最大内存: "+lRuntime.maxMemory()+"(B)="+lRuntime.maxMemory()/1024/1024+"(MB)<br/>");
       out.print("虚拟机内存总量: "+lRuntime.totalMemory()+"(B)="+lRuntime.totalMemory()/1024/1024+"(MB)<br/>");
       out.print("已用内存:"+(lRuntime.totalMemory()-lRuntime.freeMemory())+"(B)="+(lRuntime.totalMemory()-lRuntime.freeMemory())/1024/1024+"(MB)<br/>");
       out.print("可用处理器: "+lRuntime.availableProcessors()+"<br/>");
       out.print("*** 内存统计结束 ***<br/>");
    %>
     <input type="button" value="垃圾回收" οnclick="fn_collectMemory();"></input>
     
</pre>
 <pre>
    <!-- 统计虚拟机堆内存 -->
   <%
        out.println("***************************虚拟机堆内存快照***************************");
        InputStream in =(InputStream)jvmVirtualMachine.heapHisto(new Object[]{"-all"});
        BufferedReader    bufferReader= new BufferedReader(new InputStreamReader(in, "utf-8"));
        String s = null;
        
        while((s=bufferReader.readLine()) != null){
             out.println(s);
        }
        
        bufferReader.close();
    %>
</pre>
<pre>     
   <%
   out.println("***************************服务器线程统计***************************");
   int count=1,tomcatThread=0;;
   for(Map.Entry<Thread,StackTraceElement[]> statcTrace:Thread.getAllStackTraces().entrySet()){
       Thread thread =(Thread)statcTrace.getKey();
       StackTraceElement[] stack =(StackTraceElement[])statcTrace.getValue();
       if(thread.equals(Thread.currentThread())){
           continue;
       }
       String threadName =thread.getName();
       out.print("\n第"+( count++)+"条线程:"+threadName+"\n");
       if(threadName.contains("catalina-exec-")){//catalina-exec-为server.xml中的配置属性(默认为 http-端口号-)
           tomcatThread++;
       }
       for(StackTraceElement element:stack){
           out.print("\t"+element+"\n");
       }
       
   } 
    
    out.print("\r\n http线程数量:"+tomcatThread+"条\n");
 %>
</pre>
</body>
</html>



  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值