为了解决内存溢出的问题,会用到一些监视内存的工具,jconsole这个工具在jdk1.7自带了。这个工具可以查看系统的堆,非堆,线程,等等的一些整体的情况,从而可以判断出系统的一个大概的性能情况。

catalina.sh或者新增setenv.sh来设置(下面是新增tomcat/bin/setenv.sh文件方法)

  1. CATALINA_OPTS='-Djava.rmi.server.hostname=192.168.1.110 \
  2. -Dcom.sun.management.jmxremote -Dcom.sun.management.jmxremote.port=8081 \
  3. -Dcom.sun.management.jmxremote.ssl=false -Dcom.sun.management.jmxremote.authenticate=false'

特别注意:

  1. 如果你的linux系统下hostname -i显示为127.0.0.1,则jconsole将连接不上远程服务器
    方法一可以修改/etc/hosts文件,将其第一行的"127.0.0.1 localhost.localdomain localhost",修改为:"192.168.1.110 localhost.localdomain localhost",其中,"192.168.1.110"为实际的服务器的IP地址。hosename -i输出结果为192.168.1.110,JConsole图形界面才能显示出来,但是用此方法可能会有问题,如sendmail;推荐使用方法二,在JAVA_OPTS加上'-Djava.rmi.server.hostname=192.168.1.110'
  2. -Dcom.sun.management.jmxremote.port=8081,这个端点是jconsole专用的,不要和你的系统的端口冲突。再启动你的应用
  3. 看了网上很多文章都是在catalina.sh文件中加JAVA_OPTS,这样是有问题的,关闭tomcat会报该端口已经被占用,因为关闭tomcat时候,还会读取catalina.sh,所有最好在startup.sh文件中添加JAVA_OPTS那一段
  4. 最后双击本机jdk1.6/bin/jconsole.exe,启动Jconsole监控界面,在远程连接处输入:192.168.1.110:8081,不需要输入用户名和密码,连接即可,-Dcom.sun.management.jmxremote.authenticate=false,设置成了false,所以如果不知道Linux机器的用户名和密码,也可以不输入,直接连接。

由于tomcat jmx监听端口是随机分配的,所以这种方式必须关闭iptables。下面来看看怎么指定端口分配并加上密码验证:

  1. cd /usr/local/tomcat/conf
  2. cp /usr/java/jdk1.7.0_71/jre/lib/management/jmxremote.access ./
  3. cp /usr/java/jdk1.7.0_71/jre/lib/management/jmxremote.password.template ./jmxremote.password
  4. chmod 600 jmxremote.access jmxremote.password

jmxremote.access 一般保持原始内容不变即可。

对于jmxremote.password,将其中的:

  1. monitorRole  linuxeye
  2. controlRole  linuxeye

井号注释取消掉。其中monitorRole为只拥有只读权限的角色,controlRole有更高权限:读写等等。

新增tomcat/bin/setenv.sh

  1. CATALINA_OPTS="-Djava.rmi.server.hostname=192.168.1.110
  2. -Dcom.sun.management.jmxremote.password.file=$CATALINA_BASE/conf/jmxremote.password
  3. -Dcom.sun.management.jmxremote.access.file=$CATALINA_BASE/conf/jmxremote.access
  4. -Dcom.sun.management.jmxremote.ssl=false"

下载catalina-jmx-remote.jar,放到tomcat/lib目录下

  1. cd tomcat/lib
  2. wget http://archive.apache.org/dist/tomcat/tomcat-7/v7.0.57/bin/extras/catalina-jmx-remote.jar

编辑server.xml:

  1. <?xml version='1.0' encoding='utf-8'?>
  2. <Server port="8005" shutdown="SHUTDOWN">
  3. ....
  4. <Listener className="org.apache.catalina.mbeans.JmxRemoteLifecycleListener" rmiRegistryPortPlatform="8081" rmiServerPortPlatform="8082" />

最后将固定的端口加入防火墙信任列表

  1. iptables -I INPUT 5 -p tcp -m state --state NEW -m tcp --dport 8081 -j ACCEPT
  2. iptables -I INPUT 6 -p tcp -m state --state NEW -m tcp --dport 8082 -j ACCEPT

重启tomcat

可以使用netstat -an | grep -E '8081|8082'命令查看端口是否正常启动。
打开windows java安装路径Java\jdk1.7.0_71\bin\jconsole.exe,输入服务器端相关信息:

点击"连接",进入监控页面:

JConsole监控远程Tomcat服务器的更多相关文章

  1. JConsole监控远程Tomcat服务器 遇到的坑

    1. 报错 JConsole  java net socketException: Connection reset 解决: 先查看linux服务器开放了哪些端口 netstat -ntpl 选中了一 ...

  2. jprofiler_监控远程linux服务器的JVM进程(实践)

    几天前写了一篇文章,jprofiler_监控远程linux服务器的tomcat进程(实践),介绍了使用jprofiler怎样监控远程linux的tomcat进程,这两天想了想,除了可以监控tomcat ...

  3. jprofiler_监控远程linux服务器的JVM进程(转 非常棒)

    几天前写了一篇文章,jprofiler_监控远程linux服务器的tomcat进程(实践),介绍了使用jprofiler怎样监控远程linux的tomcat进程,这两天想了想,除了可以监控tomcat ...

  4. 使用jconsole监控远程JVM

    使用jconsole监控远程JVM 学习了:https://www.linuxidc.com/Linux/2015-02/113420.htm https://www.cnblogs.com/thin ...

  5. jconsole监控远程linux tomcat运行情况的配置 (转)

    来自:http://zhumeng8337797.blog.163.com/blog/static/100768914201242494649455/ 步骤如下: 1.编辑tomcat/bin/cat ...

  6. 本地win下JConsole监控远程linux下的JVM

    环境:服务器端: Linux + jdk1.7.0_75 + tomcat 7本地: Win + jdk1.7.0_55 一.修改/etc/hosts文件 hostname -i 如果显示127.0. ...

  7. 使用本地JConsole监控远程JVM(最权威的总结)

    问题背景   Tomcat经常崩溃crash,想看看JVM内存使用情况,就想到了用Jconsole监控,以前只是监控本地的JVM,这次要监控远程的,遇到了不少问题.   经过几个小时的努力,参考了众多 ...

  8. 使用本地JConsole监控远程JVM (转)

    问题背景   Tomcat经常崩溃crash,想看看JVM内存使用情况,就想到了用Jconsole监控,以前只是监控本地的JVM,这次要监控远程的,遇到了不少问题.   经过几个小时的努力,参考了众多 ...

  9. Confluence 6 使用 JConsole 监控远程 Confluence

    针对生产系统中,我们推荐你使用远程监控,这个将不会消耗你远程 Confluence 服务器的资源. 启动远程监控: 添加下面的属性到 setenv.sh / setenv.bat 文件中,端口你可以定 ...

随机推荐

  1. org.springframework.beans.MutablePropertyValues.add

    最近在项目中,通过maven引入其他包时,启动报错如下: [ERROR][2016-10-08 14:01:20.716]Context initialization failed[org.sprin ...

  2. ios--进程/多线程/同步任务/异步任务/串行队列/并行队列(对比分析)

    现在先说两个基本的概念,啥是进程,啥是线程,啥又是多线程;先把这两个总是给弄清再讲下面的 进程:正在进行的程序,我们就叫它进程. 线程:线程就是进程中的一个独立的执行路径.这句话怎么理解呢! 一个程序 ...

  3. Freemarker工具类

    Freemarker文件模板工具类 提供了解析生成文件.解析生成字符串的两个方法! package org.lunatic.util; import java.io.File; import java ...

  4. Python中文问题(转)

    在本文中,以'哈'来解释作示例解释所有的问题,“哈”的各种编码如下: 1. UNICODE (UTF8-16),C854: 2. UTF-8,E59388: 3. GBK,B9FE. 一.python ...

  5. java java.lang.NoClassDefFoundError 的解决办法

    以简单而经典的 "HelloWorld.java" 为例 不含包层次的HelloWorld.Java public class HelloWorld { public static ...

  6. C#队列

    队列(Queue)是插入操作限定在表的尾部而其它操作限定在表的头部进行的线性表.把进行插入操作的表尾称为队尾(Rear),把进行其它操作的头部称为队头(Front).当对列中没有数据元素时称为空对列( ...

  7. C# ListView 自定义ToolTip 显示

    using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; usin ...

  8. C#求任意范围内的质数

    class Program { public static List<int> list; static void Main(string[] args) { Console.WriteL ...

  9. C#中隐藏(new)、方法重写(override)、重载(overload)的区别

    转自:http://www.cnblogs.com/glife/archive/2009/12/28/1633947.html 重载.重写和隐藏的定义: 重载:public string ToStri ...

  10. ssh整合--struts

    一 struts(jar+web.xml+struts.xml+Action) 1import min_jars-------struts-2.3.20.3-all(struts2-blank.war ...