jconsole监控远程linux tomcat运行情况的配置

2024-01-08 08:32

本文主要是介绍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 Files\Java\jdk1.6.0_10\bin\jconsole.exe,输入服务器端相关信息:


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


 

 


linux下tomcat优化,设置最大连接数,内存,Jconsole监控


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 

 

这篇关于jconsole监控远程linux tomcat运行情况的配置的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/582877

相关文章

mybatis映射器配置小结

《mybatis映射器配置小结》本文详解MyBatis映射器配置,重点讲解字段映射的三种解决方案(别名、自动驼峰映射、resultMap),文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定... 目录select中字段的映射问题使用SQL语句中的别名功能使用mapUnderscoreToCame

防止Linux rm命令误操作的多场景防护方案与实践

《防止Linuxrm命令误操作的多场景防护方案与实践》在Linux系统中,rm命令是删除文件和目录的高效工具,但一旦误操作,如执行rm-rf/或rm-rf/*,极易导致系统数据灾难,本文针对不同场景... 目录引言理解 rm 命令及误操作风险rm 命令基础常见误操作案例防护方案使用 rm编程 别名及安全删除

Linux下MySQL数据库定时备份脚本与Crontab配置教学

《Linux下MySQL数据库定时备份脚本与Crontab配置教学》在生产环境中,数据库是核心资产之一,定期备份数据库可以有效防止意外数据丢失,本文将分享一份MySQL定时备份脚本,并讲解如何通过cr... 目录备份脚本详解脚本功能说明授权与可执行权限使用 Crontab 定时执行编辑 Crontab添加定

Java使用jar命令配置服务器端口的完整指南

《Java使用jar命令配置服务器端口的完整指南》本文将详细介绍如何使用java-jar命令启动应用,并重点讲解如何配置服务器端口,同时提供一个实用的Web工具来简化这一过程,希望对大家有所帮助... 目录1. Java Jar文件简介1.1 什么是Jar文件1.2 创建可执行Jar文件2. 使用java

SpringBoot 多环境开发实战(从配置、管理与控制)

《SpringBoot多环境开发实战(从配置、管理与控制)》本文详解SpringBoot多环境配置,涵盖单文件YAML、多文件模式、MavenProfile分组及激活策略,通过优先级控制灵活切换环境... 目录一、多环境开发基础(单文件 YAML 版)(一)配置原理与优势(二)实操示例二、多环境开发多文件版

Vite 打包目录结构自定义配置小结

《Vite打包目录结构自定义配置小结》在Vite工程开发中,默认打包后的dist目录资源常集中在asset目录下,不利于资源管理,本文基于Rollup配置原理,本文就来介绍一下通过Vite配置自定义... 目录一、实现原理二、具体配置步骤1. 基础配置文件2. 配置说明(1)js 资源分离(2)非 JS 资

使用docker搭建嵌入式Linux开发环境

《使用docker搭建嵌入式Linux开发环境》本文主要介绍了使用docker搭建嵌入式Linux开发环境,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面... 目录1、前言2、安装docker3、编写容器管理脚本4、创建容器1、前言在日常开发全志、rk等不同

Java实现远程执行Shell指令

《Java实现远程执行Shell指令》文章介绍使用JSch在SpringBoot项目中实现远程Shell操作,涵盖环境配置、依赖引入及工具类编写,详解分号和双与号执行多指令的区别... 目录软硬件环境说明编写执行Shell指令的工具类总结jsch(Java Secure Channel)是SSH2的一个纯J

MySQL8 密码强度评估与配置详解

《MySQL8密码强度评估与配置详解》MySQL8默认启用密码强度插件,实施MEDIUM策略(长度8、含数字/字母/特殊字符),支持动态调整与配置文件设置,推荐使用STRONG策略并定期更新密码以提... 目录一、mysql 8 密码强度评估机制1.核心插件:validate_password2.密码策略级

ShardingProxy读写分离之原理、配置与实践过程

《ShardingProxy读写分离之原理、配置与实践过程》ShardingProxy是ApacheShardingSphere的数据库中间件,通过三层架构实现读写分离,解决高并发场景下数据库性能瓶... 目录一、ShardingProxy技术定位与读写分离核心价值1.1 技术定位1.2 读写分离核心价值二