今天遇到一个问题:

执行bat,关闭jmx的时候,由于程序关闭之后又去连接了一次,cmd窗口报错,类似:

2013-7-11 15:58:05 ClientCommunicatorAdmin restart
警告: Failed to restart: java.io.IOException: Failed to get a RMI stub: javax.naming.ServiceUnavailableException [Root exception is java.rmi.ConnectException: Connection refused to host: 10.10.4.18; nested exception is:
 java.net.ConnectException: Connection refused: connect]
2013-7-11 15:58:06 RMIConnector RMIClientCommunicatorAdmin-doStop
警告: Failed to call the method close():java.rmi.ConnectException: Connection refused to host: 10.10.4.18; nested exception is:
 java.net.ConnectException: Connection refused: connect
2013-7-11 15:58:06 ClientCommunicatorAdmin Checker-run
警告: Failed to check connection: java.net.ConnectException: Connection refused: connect
2013-7-11 15:58:06 ClientCommunicatorAdmin Checker-run

这个是非常奇怪的现象,也不知道底层jdk是怎么实现的:

一个线程A从某处p开启了另外的线程B,B抛出的异常,A在p处可以B的异常捕获吗???

什么情况下可以,什么情况下不可以呢? 跟操作系统多核单核相关吗?

搜索了很多个网站 ,最后在http://chainhou.iteye.com/blog/1906688 找到答案。(看来还是要花时间深入jdk源码进去才行啊, 不要有害怕心理,不要一不懂就问,有时候答案是自己稍微深究就出来的了!)

尽管如此,也是非常不顺利的,因为项目代码中有多处使用了JMXConnectorFactory.connect(serviceurl, m); 这样的操作,而且分散开来了。 我开始只改了一个地方,导致问题一直没解决。一下子也非常难得确定到底哪次调用引起的, 因为有好几个后台进程, 而且远程调试非常不方便所以没用,每次都是打印日志来调试,很耗时间。。。

主管检查后发现说, 这样:m.put("jmx.remote.x.client.connection.check.period", 0L);  不好,不能这么搞! 这个是心跳请求,每一分钟检查jmx是否还有连接,设置为0L之后呢就没有了检查, 可能导致前台状态显示不正确,风险,,,,。。 会吗, 我认为不是这样的,不是每次都会重新连接jmx查询的吗,, 可是。。。 我晕, ,

另外一种方法是设置logging.properties文件(因为jmx用的是jdk的logging),把level改成severe,这样就可以屏蔽所有的warn,类似

logger.warning("RMIClientCommunicatorAdmin-doStop",
                        "Failed to call the method close():" + ioe);

, 不过他又说不能更改第三方的文件。。。 (大公司做事如此的麻烦谨慎。。。)

重新修改原先代码逻辑?麻烦。。。

重定向 system。out 。。?

奇怪的是win7就不报错,但是2008就会有这个,怎么搞就搞不定, 也不知道底层什么原因。—— 莫非就是cpu单核多核引起的多线程问题?

。。。

后来有怀疑是jdk升级引起的, 从jdk1.7.0.1_17到了jdk1.7.0.1_45(最新版好像是47), oracle确实有对rmi/jmx相关参数做修改,把 -Djava.rmi.server.useCodebaseOnly从默认true设置了false

http://www.oracle.com/technetwork/java/javase/downloads/index.html

http://www.oracle.com/technetwork/java/javase/7u-relnotes-515228.htm转l

http://www.oracle.com/technetwork/java/javase/7u21-relnotes-1932873.html

http://www.oracle.com/technetwork/java/javase/7u21-relnotes-1932873.html#rmichanges

http://docs.oracle.com/javase/7/docs/technotes/guides/rmi/enhancements-7.html

以为这个会有影响。

后来还是证明我的想法是错的,跟jre版本无关,而是 win7下的版本和2008上的版本并不相同引起的。

新版本中执行shutdown的时候

1 先关闭jvm1(异步)、

2 然后关闭jvm2(异步),

3 关闭jvm2的时候先尝试获取jvm上的jmx连接资源connector,

4 jvm1真正关闭,connector抛出异常!

就是这个原因!

jmx : ClientCommunicatorAdmin Checker-run的更多相关文章

  1. Jmeter-Maven-Plugin高级应用:Selecting Tests To Run

    地址:https://github.com/jmeter-maven-plugin/jmeter-maven-plugin/wiki/Advanced-Configuration Selecting ...

  2. 【jmeter】non-gui模式运行

    operty文件,默认是使用JMETER_HOME/bin目录下的jmeter.properties,如果用户自定义有其它的配置,在这里加上 #用法如下: -p user.properties -q, ...

  3. undo损坏故障恢复(二)ORA-01092,ORA-00604,ORA-01110

    undo 故障诊断与恢复(二) 今天是2013-09-01,目前困扰我将近一周的问题,终于解决了,我非常感谢帮助我的朋友,也非常感谢管我要钱然后替我解决问题的朋友(我没采用).这更激发了我一定要解决这 ...

  4. Jmeter命令行运行实例讲解

    1. 简介 使用非 GUI 模式,即命令行模式运行 JMeter 测试脚本能够大大缩减所需要的系统资 本文介绍windows下以命令行模式运行的方法. 1.1. 命令介绍 jmeter -n -t & ...

  5. 转:Jmeter以non-gui模式进行分布式测试

    由于Jmeter是一个纯JAVA的应用,用GUI模式运行压力测试时,对客户端的资源消耗是相当惊人的,所以在进行正式的压测时一定要使用non-gui模式运行,如果并发数很高或者客户端的硬件资源比较一般的 ...

  6. Jmeter之http性能测试实战 NON-GUI模式 进行分布式压力测试——干货(十二)

    Apache JMeter Distributed Testing Step-by-step This short tutorial explains how to use multiple syst ...

  7. Jmeter之http性能测试实战 非GUI模式压测 NON-GUI模式 结果解析TPS——干货(十一)

    性能测试计划 性能测试用例 录制脚本 性能测试结果 性能测试报告 性能测试监控报告 准备工作 从脚本已录制成功之后开始进行压测 安装Jmeter拓展插件 查看 Transactions per Sec ...

  8. 使用命令行执行jmeter的方法

    1. 简介 使用非 GUI 模式,即命令行模式运行 JMeter 测试脚本能够大大缩减所需要的系统资 本文介绍windows下以命令行模式运行的方法. 1.1. 命令介绍 jmeter -n -t & ...

  9. 转://Oracle 数据备份与恢复微实践

    1.模拟控制文件丢失后的数据库恢复(完全恢复) 今天的主题是备份与恢复,目的就是保护数据的安全性,众所周知Oracle之所以在市场上占据了50%的份额,与它提供了强大的数据保护措施是分不开的,下面我们 ...

随机推荐

  1. iOS多线程 NSOperation的用法

    上一篇写了 GCD 的使用,接下来就了解一下 NSOperation ,NSOperation是苹果对 GCD 的 OC 版的一个封装,但是相对于GCD来说可控性更强,并且可以加入操作依赖. NSOp ...

  2. 深入理解JavaScript中的==运算符

    原文章地址 在详细介绍图1中的每个部分前,我们来复习一下JS中关于类型的知识: JS中的值有两种类型:基本类型.对象类型. 基本类型包括:Undefined.Null.Boolean.Number和S ...

  3. angular中ng-include失效的原因

    使得angular的ng-include指令失效的原因有两个: 例如:在demo.html中的代码<div ng-include = "'demo1.html'">&l ...

  4. ubuntu搜不到wifi信号

    很多人刚刚装完ubuntu发现搜不到wifi信号,输入命令查看配置发现没有无线网卡驱动, 其实ubuntu是可以自动识别无线网卡自动安装驱动的,此时只需输入命令更新一下即可, 连上有线网,在终端输入此 ...

  5. nginx搭建高性能流媒体技术

    一. 系统环境 系统版本: CentOS 5.8x86_64 Nginx版本: Nginx-1.4.2.tar.gz Yamdi版本:Yamdi-1.9.tar.gz 二. 自动化安装 #!/bin/ ...

  6. JS-offsetParent定位父节点

    offsetParent:离当前元素最激动呢一个有定位的父节点 如果没有定位父级,默认是body IE7以下如果当前元素没有定位默认是body,如果有定位就是html IE7以下,如果当前元素的某个父 ...

  7. javaWeb实现文件上传与下载 (转)

    文件上传概述 实现web开发中的文件上传功能,需完成如下二步操作: 在web页面中添加上传输入项 在servlet中读取上传文件的数据,并保存到本地硬盘中. 如何在web页面中添加上传输入项? < ...

  8. 黑马程序员_Java基础:反射机制(Reflection)总结

    ------- android培训.java培训.期待与您交流! ---------- 反射在java中有非常重大的意义,它是一种动态的相关机制,可以于运行时加载.探知.使用编译期间完全未知的clas ...

  9. RabbitMQ 记录

    RabbitMQ 中文文档 : http://rabbitmq.mr-ping.com/description.html 官方教程译文: 一 http://blog.csdn.net/xiaoxian ...

  10. linux时钟基本概念、CST与UTC、以及NTP简单设置

    1,安装linux的时候在设置时间的时候有一个选项:system clock uses UTC,那么这个UTC是什么意思呢? 世界协调时间(Universal Time Coordinated,UTC ...