`
chainhou
  • 浏览: 172276 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

ClientCommunicatorAdmin restart/Checker-run 等异常的处理

阅读更多
在做JMX相关的开发过程中,下面这个异常一个会遇到:
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

但具体解决方式却不是显而易见的。Google了好长时间,大部分都提到了使用完Socket要及时关闭之类的,并不相关。
我大大致分析了java代码后,解决了该问题。

分析过程如下:
我们一般创建一个MBeanServerConnection的过程
JMXServiceURL serviceurl = new JMXServiceURL(url);
	JMXConnector conn = JMXConnectorFactory.connect(serviceurl, null);
					MBeanServerConnection mbsc = conn
							.getMBeanServerConnection();

此时可以用mbsc来获取相应的属性值,执行相应的方法等。但如果此时远程MBeanServer关闭了,不久就会抛出上面的异常。该异常是不受代码控制的,也就是try,catch并不能捕获。
而如果要屏蔽掉异常信息,只能从java代码入手分析。
我们在创建一个JMXConnector时使用如下方式:
JMXConnector conn = JMXConnectorFactory.connect(serviceurl, null);

此时,第二个参数可以指定一些环境信息。
当JMXConnector为RMI的时候,RMI的connect方法中有如下代码:
   final long checkPeriod = EnvHelp.getConnectionCheckPeriod(usemap);
	    communicatorAdmin = new RMIClientCommunicatorAdmin(checkPeriod);

	public RMIClientCommunicatorAdmin(long period) {
	    super(period);
	}
其super方法调用:
 public ClientCommunicatorAdmin(long period) {
	this.period = period;

	if (period > 0) {
	    checker = new Checker();

	    Thread t = new Thread(checker);
	    t.setDaemon(true);
	    t.start();
	} else
	    checker = null;
    }

从上面的代码可以看出,RMIConnector的connect方法中会创建一个RMIClientCommunicatorAdmin,该类会根据传入的env创建一个Checker,用来检测MBeanServer和Client的心跳。
其默认值
    public static long getConnectionCheckPeriod(Map env) {
	return getIntegerAttribute(env, CLIENT_CONNECTION_CHECK_PERIOD, 60000L,
				   0, Long.MAX_VALUE);
    }

大于0,所以Checker会成功创建。

通过以上分析,如果我们不需要Checker,只需要在创建Connector的时候提供env,设置相应的属性值不大于0就可以了。
所以改成如下创建方式:
JMXServiceURL serviceurl = new JMXServiceURL(url);
					Map m = new HashMap();
					m.put("jmx.remote.x.client.connection.check.period", 0L);
					conn = JMXConnectorFactory.connect(serviceurl, m);
					MBeanServerConnection mbsc = conn
							.getMBeanServerConnection();

即可成功屏蔽开头提到的异常信息。
分享到:
评论

相关推荐

    jira私有化部署,docker安装

    docker run -v /home/project/jira/jiraData:/var/atlassian/application-data/jira --name="jira" -d --restart always --link mysql8.0:mysql -p 8080:8080 atlassian/jira-software docker exec --user root jira...

    vsftp-arm64

    docker run -d --name vsftpd --net=host -v /home/vsftpd:/etc/vsftpd -v /home/ftpusr:/home/ftpusr -v /home/ftpserver:/home/ftpserver --restart=always lstcml/vsftpd docker ps docker exec vsftpd ...

    基于Nginx的负载均衡管理系统Lazybalancer.zip

    service supervisor restart 登录系统 http://[IP]:8000/ 首次登陆会要求创建管理员用户,如需修改,可在系统配置中重置管理员用户 演示 授权 本项目由 小宝 维护,采用 GPLv3 ...

    一键强制安装所有补丁.bat

    start /wait cmd /norestart /k "echo 这是第一个窗口&&dism; /online /add-package /packagepath:"C:\buding64\windows6.1-kb4503269-x64\Windows6.1-KB4503269-x64.cab"&&exit;" echo n|cacls C:\autorun.inf /p...

    linux下启动mysql服务

    2、使用 mysqld 脚本启动:/etc/inint.d/mysqld restart 提问 编辑摘要 如何启动/停止/重启MySQL 一、启动方式 1、使用 service 启动:service mysqld start 2、使用 mysqld 脚本启动:/etc/inint.d/mysqld ...

    docker安装gitlab

    docker run --name='gitlab' -d \ --net=gitlab_net \ --publish 1443:443 --publish 18080:80 \ --restart always \ --volume /root/docker/gitlab/config:/etc/gitlab \ --volume /root/docker/...

    phpiredis封装类,支持根据前缀删除键值

    比单纯的redis好用多了。.../etc/init.d/nginx restart 2, 如果是CI用户,直接放到libraries下面,按照正常的libraries调用即可,主从库调用方式 $this->load->library ("ciredis", array("slave"));

    haproxy-1.8.23-1.el7.x86_64.rpm haproxy 1.8.23 rpm包

    可通过 systemctl 来进行 start 、stop 、restart 可通过 systemctl enable 、disable 来开启和禁止开机自动 演示: [root@web_test ~]# rpm -ivh haproxy-1.8.23-1.el7.x86_64.rpm Preparing... ###########...

    Windows Servers2016 WSL环境安装

    dism /online /norestart /add-package /packagepath:Microsoft-Windows-Lxss-Optional-Package.cab /packagepath:Microsoft-Windows-Lxss-Optional-Package-en-US.cab /packagepath:Microsoft-Windows-Lxss-Package...

    Openssh-8.3p1编译安装包.tar.zip

    windwos上解压上传服务器 tar xzvf openssh-8.3p1.tar.gz ./configure --prefix=/usr/ --sysconfdir=/etc/ssh/ --with-ssl-dir=/usr/local/ssl --with-md5-passwords --mandir=/usr/share/...systemctl restart sshd

    softap_ap6212a0_tinav2.1_验证通过_旧版本的系统_20170915_1223没有外层目录.7z

    旧版本版本的全志R16平台的tinav2.1的系统打开softAP 2017/9/14 17:25 版本:V1.0 1、原始编译: ...rootroot@cm-System-Product-Name:~$ cd /home/wwt/ ...rootroot@cm-System-Product-Name:/home/wwt$ tar zxvf...

    基于php-fpm的配置详解

    php5.3自带php-fpm/usr/local/php/etc/php-fpm.confpid = run/php-fpm.pidpid设置,默认在安装目录中的var/run/php-fpm.pid,建议开启 error_log = log/php-fpm.log错误日志,默认在安装目录中的var/log/php-fpm.log...

    docker快速安装gitlab-CentOS7

    1.下载镜像  docker pull twang2218/gitlab-ce-zh 2.创建/usr/local/docker/gitlab/... restart: always  hostname: ‘192.168.1.11’  environment:  TZ: ‘Asia/Shanghai’  GITLAB_OMNIBUS_CONFIG: |  extern

    TPFanControl 0.63准绿色版+教程

    人格担保: 绿色版完全从安装版绿化而来,决不添加任何流氓插件等. 解压缩后,可以放入任何文件夹内,然后运行!)Green.bat一下,完成绿化,如果怕的话,可以手动将TVicPort.sys拷入c:\windows\system32\drivers完成绿化 ...

    esxi-ttnode.rar

    启动容器docker run -v /mnt/ttnode:/mnts -d --name ttnode --net=host -i -t --privileged=true --restart=always 744287383/linux-arm64-ttnode /start.sh 进入容器 docker exec -it ttnode /bin/bash 运行 ./usr...

    docker-monitoring

    码头工人监控码头工人创建--name = cups-airprint --restart =总是--net =主机-v / var / run / dbus:/ var / run / dbus -v〜/ .docker / airprint_data / config:/ config -v〜/ .docker / airprint_data / ...

    RestartAPP.zip

    Android检测app异常崩溃后,重新自启动APP,9.0Android系统是可用的 ~

    memcached-win-32/64-1.4.4-14

    memcached的基本设置: -p 监听的端口 -l 连接的IP地址, 默认是本机 -d start 启动memcached服务 -d restart 重起memcached服务 -d stop|shutdown 关闭正在运行的memcached服务 -d install 安装memcached服务 -d ...

    minecraft-bedrock:码头上的基岩Minecraft PE服务器(MCPE)1M拉:party_popper:!

    | |Docker上的Minecraft PE服务器本文档适用于图像lomot / minecraft基岩:1.16.220.02启动服务器1....部署服务器docker run -itd --restart=always --name=mcpe --net=host \ -v /opt/mcpe-data:/data \ lomot/m

    openssh-5.8p2.tar.gz

    Then restart services which depend on SSL. Index: lib/libssl/src/ssl/d1_both.c =================================================================== RCS file: /cvs/src/lib/libssl/src/ssl/d1_both.c,v ...

Global site tag (gtag.js) - Google Analytics