Chinaunix首页 | 论坛 | 博客
  • 博客访问: 123250
  • 博文数量: 43
  • 博客积分: 0
  • 博客等级: 民兵
  • 技术积分: 400
  • 用 户 组: 普通用户
  • 注册时间: 2016-10-14 10:31
文章分类

分类: 信息化

2017-01-04 15:14:36

前言

       因为最近一个项目部署在客户那边运行一个月左右就会出现内存溢出的问题,为了时时监控java内存的情况需要,需要远程查看服务器上java内存的一些情况。在公司模拟部署了远程监视下项目运行的情况。

 

一、简单介绍两个jdk1.6自带的可视化监视工具
    Jconsole:6.x采用JMX方式提供了一系列监视和管理虚拟机的API,随SDK一起发布的JConsole则是采用这些API实现监控虚拟机的使用工具。 JConsole能够提供被监控虚拟机的内存、线程、类的加载以及MBean等信息,从而能够对服务器的运行情况进行实时监控。

   JVisualVM: 是Netbeans的profile子项目,已在JDK6.0 update 7 中自带(java启动时不需要特定参数,监控工具在bin/jvisualvm.exe),能够监控线程,内存情况,查看方法的CPU时间和内存中的对 象,已被GC的对象,反向查看分配的堆栈(如100个String对象分别由哪几个对象分配出来的)。

 

二,如果是win系列的电脑查看本机的内存情况,直接找到jdk的安装路径双击上面提到的可视化监视工具即可

 

三,如果是想监视远程的java内存的情况可要做一些相应的配置

  1.   运行环境
                  服务器:Redhat6.0 + JDK 1.6+ Jboss 5.1 
                  ip地址:192.168.1.250
                  客户机:Windows + JDK 1.6

 

        2.   不带用户名密码的参数配置(很简单),只需要修改jboss中bin下的run.sh。在该句下边添加上红色字迹的部分即可

                JAVA_OPTS="-Dprogram.name=$PROGNAME $JAVA_OPTS"
                JAVA_OPTS="$JAVA_OPTS   -Dcom.sun.management.jmxremote.port=9999"   
                JAVA_OPTS="$JAVA_OPTS   -Dcom.sun.management.jmxremote.authenticate=false"   
                JAVA_OPTS="$JAVA_OPTS   -Dcom.sun.management.jmxremote.ssl=false"   
                JAVA_OPTS="$JAVA_OPTS   -Djava.rmi.server.hostname=192.168.1.250"

 

                 注意:
              
   1、9999表示监控的端口号,确保指定的端口不被占用;
                 2、可以采用netstat -an来查看已经占用的端口;
                 3、配合lsof -i:portnum 来查看占用端口的具体应用程序;
                 4、另外如果开启了防火墙服务,请确保端口能够透过防火墙访问;

                 5、192.168.1.250为当前服务器的IP;

 

       3.   启动JBoss服务器


               ./run.sh -b 192.168.1.250  & 必须通过-b参数指定Jboss服务器绑定的地址;
               允许所有用户连接 则为 -b 0.0.0.0

 

        4,    连接远程虚拟机

               启动本机%JAVA_HOME%\bin目录下的JConsole,
               在弹出对话框的“远程进程:”一栏中,输入192.168.1.250:9999,然后点击“连接”,如下图所示:

               

 

               附加:带用户名密码的参数配置 

                     一,修改jboss中bin下的run.sh。在该句下边添加上红色字迹的部分

                         JAVA_OPTS="-Dprogram.name=$PROGNAME $JAVA_OPTS"
                         JAVA_OPTS="$JAVA_OPTS   -Dcom.sun.management.jmxremote.port=9999"  
                         JAVA_OPTS="$JAVA_OPTS   -Dcom.sun.management.jmxremote.authenticate=true"  
                         JAVA_OPTS="$JAVA_OPTS   -Dcom.sun.management.jmxremote.ssl=false"   
                         JAVA_OPTS="$JAVA_OPTS   -Djava.rmi.server.hostname=192.168.1.250"
                         JAVA_OPTS="$JAVA_OPTS   -Dcom.sun.management.jmxremote.password.file=/usr/java/jdk1.6/jre/lib/management/jmxremote.password"

                       

                          注意 $JAVA_HOME/jre/lib/management/jmxremote.password  中 jmxremote.password是由原来的jmxremote.password.template复制一份得到,

                         去掉 monitorRole  QED前面的#   如果不做修改  登入的用户名:monitorRole 密码:QED   (可根据需要修改用户名密码,但是如果做修改也要同

                          是修改jmxremote.access中的相对应名字的权限

                     二,如果启动过程中出现这个问题或者错误

                        

                       则是因为jmxremote.password 的权限问题   在该文件路径下执行:chmod  600 jmxremote.password 

                      重新按照3启动项目即可。

 

 四,对于JVisualVM而言在  树结构的  Remote中添加远程ip,然后右键该ip添加JMX链接添加上端口号和用户名密码即可链接成功,如图所示:

               


 


 

                         

阅读(7527) | 评论(0) | 转发(1) |
给主人留下些什么吧!~~