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


    步骤如下:

    1.编辑tomcat/bin/catalina.sh

    Bash代码 
    1. vi catalina.sh   

     在其中“

    # ----- Execute The Requested Command -----------------------------------------”

    之前插入新的一行(中间没有换行),内容如下:

    Vi catalina.sh代码 
    1. CATALINA_OPTS="$CATALINA_OPTS -Djava.rmi.server.hostname=jdzz10.ucjoy.com -Dcom.sun.management.jmxremote -Dcom.sun.management.jmxrem  
    2. ote.port=12345 -Dcom.sun.management.jmxremote.ssl=false -Dcom.sun.management.jmxremote.authenticate=true"  

     插入后,应该如图:



     (其中的选中部分为新增内容)

    2.编辑jmxremote.access和jmxremote.password

    Bash代码 
    1. cd /usr/java/jdk1.6.0_18/jre/lib/management  
    2. mv jmxremote.password.template jmxremote.password   
    3. chmod 600 jmxremote.access jmxremote.password  
    4. vi jmxremote.password   

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

    对于jmxremote.password,将 其中的:

    # monitorRole  mzxwswj
    # controlRole  mzxwswj

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

    3.

    a.最后将端口加入防火墙信任列表

    Bash代码 
    1. vi /etc/sysconfig/iptables  

    编辑iptables,加入新一行内容:-A RH-Firewall-1-INPUT -p tcp -m state --state NEW -m tcp --dport 12345 -j ACCEPT

    如图(选中内容为新增的):

     
    b.启动tomcat

    Bash代码 
    1. /usr/local/tomcat/bin/startup.sh   

    而我们在上面配置的jmx代理就会随tomcat一起启动。

    可以使用netstat -an | grep 12345命令查看端口是否正常启动。

    至此,服务器端配置完毕。

    4.使用windows客户机上的jconsole连接服务器端 进行监控。

    打开C:Program FilesJavajdk1.6.0_10injconsole.exe,输入服务器端相关信息:


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


     

    1. 添加tomcat管理员帐户
    添加管理员账户tomcat-users.xml
    < ?xml version='1.0' encoding='utf-8'?>

    2. TOMCAT内存
    基 本原理:JAVA程序启动时都会JVM 都会分配一个初始内存和最大内存给这个应用程序。这个初始内存和最大内存在一定程度都会影响程序的性能。比如说在应用程序用到最大内存的时候,JVM是要 先去做垃圾回收的动作,释放被占用的一些内存。 所以想调整Tomcat的启动时初始内存和最大内存就需要向JVM声明,一般的JAVA程序在运行都可以通过中-Xms -Xmx来调整应用程序的初始内存和最大内存: 如:java -Xms64m -Xmx128m application.jar.

    方法1:如果是使用的tomcat_home/bin/catalina.sh(linux)或catalina.bat(win)启动的:
    修改相应文件,加上下面这句:
    JAVA_OPTS='$JAVA_OPTS -server -Xmx800m -Xms512m -XX:MaxNewSize=256m -XX:MaxPermSize=256m -Djava.awt.headless=true'--ms是最小内存,mx是最大内存。这里设置最小内存为512M,最大内存为 800M。$JAVA_OPTS是保留先前设置。 CATALINA_OPTS似乎可以与JAVA_OPTS不加区别的使用。[对于catalina.bat则是如此设置: set JAVA_OPTS=-Xms1024m -Xmx1024m]

    方法2:如果使用的winnt服务启动:
    在 命令行键入regedit,找到 HKEY_LOCAL_MACHINE-->SOFTWARE-->Apache Software Foundation-->Procrun 2.0-->Tomcat5-->Parameters的Java,
    修改Options的值,新添加属性:
    -Xms64m
    -Xmx128m 或者直接修改JvmMx(最大内存)和JvmMs(最小内存)。

    有人建议Xms和Xmx的值取成一样比较好,说是可以加快内存回收速度。
    修改完之后,可以访问http://127.0.0.1:8080/manager/status查看内存大小。

    也可以编写下面测试tomcat内存大小的jsp页面:
    < %
    Runtime lRuntime = Runtime.getRuntime();
    out.println("*** BEGIN MEMORY STATISTICS ***
    ");
    out.println("Free Memory: "+lRuntime.freeMemory()+"
    ");
    out.println("Max Memory: "+lRuntime.maxMemory()+"
    ");
    out.println("Total Memory: "+lRuntime.totalMemory()+"
    ");
    out.println("Available Processors : "+lRuntime.availableProcessors()+"
    ");
    out.println("*** END MEMORY STATISTICS ***");
    %>

    3. 增加tomcat连接数
    在tomcat配置文件server.xml中的配置中,和连接数相关的参数有:
    minProcessors:最小空闲连接线程数,用于提高系统处理性能,默认值为10
    maxProcessors:最大连接线程数,即:并发处理的最大请求数,默认值为75
    acceptCount:允许的最大连接数,应大于等于maxProcessors,默认值为100
    enableLookups:是否反查域名,取值为:true或false。为了提高处理能力,应设置为false
    connectionTimeout: 网络连接超时,单位:毫秒。设置为0表示永不超时,这样设置有隐患的。通常可设置为30000毫秒。 其中和最大连接数相关的参数为maxProcessors和acceptCount。如果要加大并发连接数,应同时加大这两个参数。 web server允许的最大连接数还受制于操作系统的内核参数设置,通常Windows是2000个左右,Linux是1000个左右。
    如:

    maxThreads="150"
    minSpareThreads="25"
    maxSpareThreads="75"
    acceptCount="100"
    />
    maxThreads="150" 表示最多同时处理150个连接
    minSpareThreads="25" 表示即使没有人使用也开这么多空线程等待
    maxSpareThreads="75" 表示如果最多可以空75个线程,例如某时刻有80人访问,之后没有人访问了,则tomcat不会保留80个空线程,而是关闭5个空的。

    acceptCount="100" 当同时连接的人数达到maxThreads时,还可以接收排队的连接,超过这个连接的则直接返回拒绝连接。

    4.使用Jconsole监控
    在需要监控的tomcat_home/bin/catalina.sh(linux)文件中添加下面语句:JAVA_OPTS="$JAVA_OPTS -Dcom.sun.management.jmxremote.port=8089
    -Dcom.sun.management.jmxremote.ssl=false
    -Dcom.sun.management.jmxremote.authenticate=false"
    设置一个新的端口号。然后在本机dos下输入Jconsole命令,弹出“JAVA 监视和管理控制台”,如果是远程监视,就输入:, 这个port就上上面配置的8089,然后再输入远程主机的用户名跟口令,就可以监控啦。 传说这里面还可以加一句话"-Djava.rmi.server.hostname=192.168.1.80" 没有试过 ⊙﹏⊙b汗 先拷贝上一句话,留作记忆: 再找找远程tomcat的jmx配置,多了个参数-Djava.rmi.server.hostname=ip_or_hostname。然后我就加上了 服务器的IP。然后再连接就可以了。对这样的情况有点不解,再官方又没有找任何这个参数的说明。回来后,再试用一下。在虚拟机的开一个linux,然后配 上jmx参数(没有java.rmi.server.hostname的)。结果可以连接。... 公司的为什么不能连接呢?为什么加了IP就行?怀疑多网卡。然后在虚拟机上再加一个网上,然后启动 tomcat ,恩,不能连接(没有server.hostname),然后再加上java.rmi.server.hostname启动 tomcat ,结果或以连接。原来java.rmi.server.hostname是这个作用。

     

    1.测试环境
    服 务器:RedHat Linux 3.4.3-9.EL4(内核版本 2.6.9-5.EL),Tomcat5.5.20,Sun JDK 1.5.0_09,JProfiler 4.3.2 for linux(安装包:jprofiler_linux_4_3_2.sh) 
    客户端:Windows XP,JProfiler 4.3.2 for windows(安装包:jprofiler_windows_4_3_2.exe)

    2.JProfiler软件下载地址 http://www.ej-technologies.com/

    3.客户端 JProfiler 安装 略

    4.服务器端 JProfiler 安装: 
    把 jprofiler_linux_4.3.2.sh 上传到到服务器,假设路径为 /opt/jprofiler

    # cd /opt/jprofiler
    # chmod +x *.sh 
    # ./jprofiler_linux_4.3.2.sh -c
    按照提示来安装,提示都很简单,不在多说。安装路径选择 /opt/jprofiler4

    注意,这里的 -c 意思是用字符方式来安装,如果机器上没有 X 则加上该参数.

    5.客户端连接配置
    1). 运行 JProfiler 。第一次打开会有向导,忽略它。 
    2). 选择 Session->Integration Wizard->New Remote Integratation 
    3). 选择 On a remote computer;Platform of remote computer 选择 Linux x86/AMD 64;Next 
    4). 输入服务器 IP ;Next 
    5). 输入服务器上的 jprofiler 的安装路径,如 /opt/jprofiler4 ;next 
    6). 选择服务器的 JDK 环境,这里是:Sun,1.5.0,hotspot;next 
    7). 输入端口:这里是默认值 8849;next 
    8). 选择启动模式:这里选第一种 wait for a connection from the jprofiler GUI;next 
    9). 这里会列出需要在服务器端做的配置:

    Integration type: [Generic application]
    Selected JVM: Sun 1.5.0 (hotspot)
    Startup mode: Wait for JProfiler GUI

    (1) Please insert

    -agentlib:jprofilerti=port=8849  -Xbootclasspath/a:/opt/jprofiler4/bin/agent.jar

    into the start command of your remote application right after the java command.

    (2) Please add

    /opt/jprofiler4/bin/linux-x86

    to the environment variable LD_LIBRARY_PATH.

    A remote session named Remote application on 192.168.40.15 will be created that connects to a running instance of the remote application that is started with the modified start command.


    6.服务器端的配置
    (1)修改系统环境配置文件 /etc/profile ,增加

    JPROFILER_HOME=/opt/jprofiler4/bin/linux-x86
    export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:$JPROFILER_HOME


    (2)修改TOMCAT启动文件catalina.sh,添加-agentlib:jprofilerti=port=8849  -Xbootclasspath/a:/opt/jprofiler4/bin/agent.jar 内容到CATALINA_OPTS中;
    “-agentlib:jprofilerti=port=8849  -Xbootclasspath/a:/opt/jprofiler4/bin/agent.jar ” 此内容由客户端软件生成

    CATALINA_OPTS="$CATALINA_OPTS -Xms128m -Xmx128m $JPDA_OPTS -agentlib:jprofilerti=port=8849  -Xbootclasspath/a:/opt/jprofiler4/bin/agent.jar"


    7.Reboot Linux and startup Tomcat using startup.sh;
       The log of tomcat which is $CATALINA_HOME/logs/catalina.out will show:

     JProfiler> Protocol version 23
     JProfiler> Using JVMTI
     JProfiler> 32-bit library
     JProfiler> Listening on port: 8849.
     JProfiler> Native library initialized
     JProfiler> Waiting for a connection from the  JProfiler GUI 

    8.启动客户端软件
       点击jprofiler菜单 session>start center>Open Session
       Available session configurations中列出了刚才配置的连接,选中使用就OK了!!

    9.The log of tomcat which is $CATALINA_HOME/logs/catalina.out will show:

     JProfiler> Using dynamic instrumentation
     JProfiler> Time measurement: elapsed time
     JProfiler> CPU profiling enabled
     JProfiler> Hotspot compiler enabled
     JProfiler> Starting org/apache/catalina/startup/Bootstrap 

    10.当中断JProfiler连接时
       The log of tomcat which is $CATALINA_HOME/logs/catalina.out will show:

     JProfiler> Disconnected. Waiting for reconnection.
     JProfiler> Listening on port: 8849.

      经过我的测试发现了有以上一些问题
    1、)并不是将-agentlib:jprofilerti=port=8849  -Xbootclasspath/a:/opt/jprofiler4/bin/agent.jar 加入到CATALINA_OPTS 中而是加入到 JAVA_OPTS中,加入格式如下所示:
    其余步同上

      JAVA_OPTS="$JAVA_OPTS "-agentlib:jprofilerti=port=8849 
      JAVA_OPTS="$JAVA_OPTS "-Xbootclasspath/a:/opt/jprofiler5/bin/agent.jar

    下面是我采用过的一个完整的配置

    if [ -r "$CATALINA_HOME"/bin/tomcat-juli.jar ]; then
      JAVA_OPTS="$JAVA_OPTS "-Xms128m 
      JAVA_OPTS="$JAVA_OPTS "-Xmx256m
      JAVA_OPTS="$JAVA_OPTS "-XX:PermSize=32m 
      JAVA_OPTS="$JAVA_OPTS "-XX:MaxNewSize=128m 
      JAVA_OPTS="$JAVA_OPTS "-XX:MaxPermSize=64m 
        JAVA_OPTS="$JAVA_OPTS "-Dcom.sun.management.jmxremote
      JAVA_OPTS="$JAVA_OPTS "-Dcom.sun.management.jmxremote.port=9009
      JAVA_OPTS="$JAVA_OPTS "-Dcom.sun.management.jmxremote.authenticate=false
      JAVA_OPTS="$JAVA_OPTS "-Dcom.sun.management.jmxremote.ssl=false
      JAVA_OPTS="$JAVA_OPTS "-agentlib:jprofilerti=port=8849  
      JAVA_OPTS="$JAVA_OPTS "-Xbootclasspath/a:/opt/jprofiler5/bin/agent.jar
      JAVA_OPTS="$JAVA_OPTS "-Djava.util.logging.manager=org.apache.juli.ClassLoaderLogManager" "-Djava.util.logging.config.file="$CATALINA_BASE/conf/logging.properties"
    fi

    当时遇到的问题是jconsole无法连接上远程Linux上的JVM,Google看到Sun官方bugdatabase有人讲是bug,就没再理。今天再次Google,在java.sun.com/j2se/1.5.0/docs/guide/management/faq.html#linux2看到

    Run "hostname -i" command. If it reports 127.0.0.1, JConsole would not be able to connect to the JVM running on that Linux machine. To fix this issue, edit /etc/hosts so that the hostname resolves to the host address.

    马上修改/etc/hosts,连接成功了。对于上面提到“在一个jsp中进行while (true);死循环”的测试,一个个线程查看,发现有一个Thread在_jspService方法上始终处于Runnable状态。看来Programmer还是得用Google 

    【Linux查看tomcat版本】

    【Linux查看tomcat版本】

    一、不同的tomcat查看版本可能不同,例如有的直接执行./version.sh就可以,其他就没有;一般来说,在tomcat启动时就会有版本信息,如:

    信息: Initializing Coyote HTTP/1.1 on http-8023
    2009-5-6 16:38:09 org.apache.catalina.startup.Catalina load
    信息: Initialization processed in 1673 ms
    2009-5-6 16:38:10 org.apache.catalina.core.StandardService start
    信息: Starting service Catalina
    2009-5-6 16:38:10 org.apache.catalina.core.StandardEngine start
    信息: Starting Servlet Engine: Apache Tomcat/6.0.16

    另外还可以在以下文件中找到,但据tomcat版本不一样,文件位置稍有差异:

    Tomcat5:tomcat_homeserverlibcatalina.jar orgapachecatalinautilServerInfo.properties

    Tomcat6:tomcat_home libcatalina.jar orgapachecatalinautilServerInfo.properties (这里的两个jar包可以下载下来用rar打开然后再查看。)

    # Licensed to the Apache Software Foundation (ASF) under one or more
    # contributor license agreements.  See the NOTICE file distributed with
    # this work for additional information regarding copyright ownership.
    # The ASF licenses this file to You under the Apache License, Version 2.0
    # (the "License"); you may not use this file except in compliance with
    # the License.  You may obtain a copy of the License at
    #
    #     http://www.apache.org/licenses/LICENSE-2.0
    #
    # Unless required by applicable law or agreed to in writing, software
    # distributed under the License is distributed on an "AS IS" BASIS,
    # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
    # See the License for the specific language governing permissions and
    # limitations under the License.

    server.info=Apache Tomcat/6.0.16
    server.number=6.0.16.0
    server.built=Jan 28 2008 11:35:29

  • 相关阅读:
    docker安装
    win8换win7的操作方法
    java数组实现队列
    springMVC源码学习之获取参数名
    SpringMVC源码学习之request处理流程
    LeetCode 231. Power of Two
    LeetCode 202. Happy Number
    LeetCode 171. Excel Sheet Column Number
    Eclipse 保存代码时,不自动换行设置
    LeetCode 141. Linked List Cycle
  • 原文地址:https://www.cnblogs.com/shininguang/p/5124915.html
Copyright © 2020-2023  润新知