监控运行中jar包的jvm信息

开启jar包 运行端口 修改java -jar命令  加入如下命令参数(端口可以任意,但不要与其他应用端口冲突)

-Dcom.sun.management.jmxremote.port=8996
-Dcom.sun.management.jmxremote.authenticate=false 
-Dcom.sun.management.jmxremote.ssl=false

下面脚本是启动jar的脚本 功能在于启动jar 并且把属性传入到main函数中 初始化作用 仅供参考

#MonCenter start shell
#set fileformat=unix
ps -ef | grep mon.jar | grep -v grep | awk '{print $2}' | xargs kill -9
pros()
{
propties=''
arr=()
i=0
while read line; do
    arr[i++]=$line
done < $1

for data in ${arr[@]}
do 
    propties="$propties""$data""\r"
done
}

pros /soc/etc/jmxremote.properties
jmxremote=$propties
echo "======jmxremote.properties========="
echo $jmxremote
#start MonCenter
nohup java -Xmx200m -XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=/soc/var/ -Djava.library.path=/soc/lib/sigar/ -Dcom.sun.management.jmxremote.port=8996 -Dcom.sun.management.jmxremote.authenticate=false -Dcom.sun.management.jmxremote.ssl=false  -jar /soc/lib/mon.jar $jmxremote >/soc/var/nli/monstart.file 2>&1 &
tail -100f /soc/var/nli/monstart.file


获取jmx连接方法 url格式例如  String jmxUrl = "service:jmx:rmi:///jndi/rmi://" + ip + ":" + port+ "/jmxrmi";

 /**
     * 获得MBeanServer 的连接
     * 
     * @param jmxUrl
     * @return
     * @throws IOException
     */
    public static JMXConnector getMBeanServerConnection(String jmxUrl)
        throws IOException {
        JMXServiceURL url = new JMXServiceURL(jmxUrl);
        JMXConnector jmxc = null;
        try{
            jmxc = JMXConnectorFactory.connect(url, null);
        }catch (Exception e) {
            logger.error("getMBeanServerConnection JMXConnector Exception ");
            return null;
        }
        
        return jmxc;
    }

获取连接

MBeanServerConnection mbsc = jmxConnection.getMBeanServerConnection();

获取线程信息例子

    /**
     * 获得jvm 线程信息
     */
        public  void getThreadInfo(JvmInfoBean jib,MBeanServerConnection jmxConnection){
        ThreadMXBean op;
        try {
            op = ManagementFactory.newPlatformMXBeanProxy(jmxConnection, "java.lang:type=Threading", ThreadMXBean.class);
            System.out.println("ObjectName="+op.getObjectName());  
            System.out.println("仍活动的线程总数="+op.getThreadCount());  
            System.out.println("峰值="+op.getPeakThreadCount());  
            System.out.println("线程总数(被创建并执行过的线程总数)="+op.getTotalStartedThreadCount());  
            System.out.println("当初仍活动的守护线程(daemonThread)总数="+op.getDaemonThreadCount());  
            
//            long[] deadlockedIds = op.findDeadlockedThreads();
//            if(deadlockedIds != null && deadlockedIds.length > 0){  
//                ThreadInfo[] deadlockInfos = op.getThreadInfo(deadlockedIds);  
//                System.out.println("死锁线程信息:");  
//                System.out.println("\t\t线程名称\t\t状态\t\t");  
//                for(ThreadInfo deadlockInfo : deadlockInfos){  
//                    System.out.println("\t\t"+deadlockInfo.getThreadName()+"\t\t"+deadlockInfo.getThreadState()  
//                            +"\t\t"+deadlockInfo.getBlockedTime()+"\t\t"+deadlockInfo.getWaitedTime()  
//                            +"\t\t"+deadlockInfo.getStackTrace().toString());  
//                }  
//            }  
        } catch (IOException e) {
            e.printStackTrace();
        }
    }

其他参数可以通过 jconsole进行获取



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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值