Tomcat 监控的几种方法
Tomcat 监控方法
方法1:.使用tomcat自带的status页
具体方法:
步骤1:修改%tomcat安装路径%\conf \tomcat-users文件,配置admin设置权限。在<tomcat-users>中增加部分内容。具体如下:
<role rolename="manager-gui"/>
<user username=“manager" password=“1234" roles="manager-gui"/>
注:用户名:manager,密码:1234
步骤2:完成后,启动tomcat,输入:http://localhost:8080 --(IP,端口号,可远程访问)
点击status,输入账号,密码(manager,1234),进入status,时时刷新页面,查看当前tomcat状态。 或者直接访问:http://localhost:8080/manager/status页面。
备注1:若希望整个服务器的性能数据以一个单行的xml文件形式表示,则进入如下界面:http://localhost:8080/manager/status?XML=true
备注2:若服务器中存在几个项目,单独对某个项目进行监控,则需要另行增加代码。
步骤3:上面得到的只是当前情况下的性能数据,要获得一个阶段的性能数据,必须设定采样频率,定时读取,将数据汇总并分析。
步骤4:对得到的数据得出图表。参考以下示例:
通过Linux自带的Bash来实现,绘制图表采用的是Gnuplot。下列代码生成html的报表只是监控整个服务器的,并未实现对每个测试建立单独目录的功能。
#!/bin/bash
#
========================Default Settings===============================
# address of status page
STATUS_ADDR="http://localhost:8080/manager/status?XML=true"
USER="manager"
PASS="1234"
# sample rate, default: 5seconds
SAMPLE_RATE=5
# if press "Ctrl+c",
stop monitor
EXIT_SIGNAL=2
# connector to monitor
CONNECTOR="http-8080"
# result directory to store data
RESULT_DIR="/tmp"
# perf data file
PERF_DATA="perf_data"
# jvm data file
JVM_DATA="jvm_data"
# connector data file
CONNECTOR_DATA="connector_data"
# thread data file
THREAD_DATA="thread_data"
# request data file
REQUEST_DATA="request_data"
#
===========================Output Error Message========================
# Show Error Message and exit,
get one parameter
errorMsg()
{
if [[ $# -eq 1 ]]; then
echo "Runtime Error:
$1"
exit 1
else
echo "Function Error:
errorMsg"
exit 127
fi
}
# =========================Get
Data Function=============================
# Get performance data, no
parameter wanted
getPerfData()
{
cd $RESULT_DIR
wget --http-user="$USER"
--http-password="$PASS" "$STATUS_ADDR" -O
"$PERF_DATA" || errorMsg "Failed to get data, please check the
connection"
# JVM data
sed 's/.*<jvm>//g;s/<\/jvm>.*//g'
$PERF_DATA | awk -F \' '{ print $2, $4, $6 }' >> $JVM_DATA
# 'Connector data
sed
's/.*'$CONNECTOR'.>//g;s/<\/connector>.*//g' $PERF_DATA >>
$CONNECTOR_DATA
# Thread data
sed 's/.*<threadInfo//g;s/\/>.*//g'
$CONNECTOR_DATA | awk -F \" '{ print $2, $4, $6 }' >> $THREAD_DATA
# " Request data
sed
's/.*<requestInfo//g;s/\/>.*//g' $CONNECTOR_DATA | awk -F \" '{
print $2, $4, $6, $8, $10, $12 }' >> $REQUEST_DATA
}
# ========================Build
Chart Function==========================
# "according the data,
build the chart (use gnuplot)
buildChart()
{
TITLE=""
OUTPUT=""
PLOT=""
YRANGE="[0:]"
case "$1" in
"jvm" )
TITLE="JVM"
OUTPUT="jvm_graph.png"
PLOT="plot 'jvm_data'
using 1 title 'free' w linespoints, \
'jvm_data' using 2 title
'total' w linespoints,\
'jvm_data' using 3 title 'max'
w linespoints"
;;
"thread" )
TITLE="Thread"
OUTPUT="thread_graph.png"
PLOT="plot 'thread_data'
using 1 title 'max threads' w linespoints,\
'thread_data' using 2 title
'current thread count' w linespoints,\
'thread_data' using 3 title
'current thread busy' w linespoints"
;;
"request" )
TITLE="Request"
YRANGE="[-1:]"
OUTPUT="request_graph.png"
PLOT="plot 'request_data'
using 1 title 'max time' w linespoints,\
'request_data' using 2 title
'processing time' w linespoints,\
'request_data' using 3 title
'request count' w linespoints,\
'request_data' using 4 title
'error count' w linespoints,\
'request_data' using 5 title
'bytes received' w linespoints,\
'request_data' using 6 title 'bytes
sent' w linespoints"
;;
esac
# build graph
gnuplot <<EOF
set terminal png small size 480,360
set title "$TITLE"
set yrange $YRANGE
set grid
set xlabel "timeline (s)"
set output "$OUTPUT"
$PLOT
EOF
}
# ========================Build
Report Function=========================
# include data and chart, give a
readable html report
buildReport()
{
# build graph jvm, request,thread
buildChart "jvm" || errorMsg
"Function Error: build jvm graph"
buildChart "thread" ||
errorMsg "Function Error: build thread graph"
buildChart "request" ||
errorMsg "Function Error: build request graph"
# build html report
}
# ========================Stop
Monitor Function
# call buildReport function
stopMonitor()
{
echo "Monitor stopped, and we are
building the report ..."
buildReport || errorMsg "Function
Error: buildReport"
exit
}
#
=============================Main Function=============================
trap "stopMonitor"
$EXIT_SIGNAL
while :
do
getPerfData || errorMsg "Failed to
get performance data"
sleep $SAMPLE_RATE
done
方法2:使用JDK自带工具,Jconsole
具体方法:
步骤1:.编辑%tomcat安装路径%\bin\catalina.bat文件。添加下列内容:
set
JAVA_OPTS= -Dcom.sun.management.jmxremote
-Dcom.sun.management.jmxremote.port=10004
-Dcom.sun.management.jmxremote.ssl=false
-Dcom.sun.management.jmxremote.authenticate=false
步骤2:启动tomcat,进入JDK安装路径\jdk1.5.0_22\bin 下双击打开Jconsole文件,显示Jconsole连接页面。选择进程点击连接即可。
方法3:使用SiteScope(可与lR结合)
具体方法:
步骤1:安装SiteScope,(LR安装文件夹下有安装文件:在Additional Components文件夹内)。安装后需重启,重启后还会有SiteScope后续的安装操作。
步骤2:自动打开SiteScope页面,需输入注册码注册:
步骤3:修改%tomcat安装路径%\conf \tomcat-users文件 (见方法1)。添加部分代码如下:
<tomcat-users>
<user password="1234" roles="manager"
username="admin"/>
</tomcat-users>
通过http://localhost:8080/Status可访问。
步骤4:编辑%tomcat安装路径%\bin下catalina.bat文件;
加入:
set JAVA_OPTS= -Dcom.sun.management.jmxremote
-Dcom.sun.management.jmxremote.port=10004
-Dcom.sun.management.jmxremote.ssl=false
-Dcom.sun.management.jmxremote.authenticate=false
保证进入JDK安装路径\jdk1.5.0_22\bin 下双击打开Jconsole文件,显示Jconsole连接页面。显示可连接的进程。
步骤5:tomcat配置完成后,重启。
步骤6:输入SiteScope地址,显示SiteScope配置页面:
http://IP:端口号/SiteScope
Add Group--Add Montior--选择JMX
需注意:JMX URL 为 :service:jmx:rmi:///jndi/rmi://10.110.100.128:10004/jmxrmi
username 和password与tomcat-users文件中设置一致,此处分别为:manager,1234
点击Get Counters添加计数器。此时会显示tomcat可监控的计数器。
例如:
java.lang/Memory/HeapMemoryUsage/used
java.lang/Memory/HeapMemoryUsage/max
Catalina/ThreadPool/jk-8010/currentThreadCount
Catalina/ThreadPool/jk-8010/maxSpareThreads
Catalina/ThreadPool/jk-8010/minSpareThreads
其它项根据自己情况自己填写即可。完成后点击OK。
步骤8:进入LR Controller中,选择:Available Graphs\System Resouce Graphs 中的SiteScope,添加计数器即可。
步骤9:修改LR脚本:
在录制好的LR脚本中添加如下代码:
double
atof(const char *string);
float FreeMemory,TotalMemory,MaxMemory;
//定义tomcat内存使用情况的监视器事务;
lr_start_transaction("monitor tomcat");
//保存3个参数;
web_reg_save_param("JVMFreeMemory",
"LB=Free memory: ",
"RB= MB",
"Ord=1",
LAST);
web_reg_save_param("JVMTotalMemory",
"LB=Total memory: ",
"RB= MB",
"Ord=1",
LAST);
web_reg_save_param("JVMMaxMemory",
"LB=Max memory: ",
"RB= MB",
"Ord=1",
LAST);
//通过LR去访问tomcat监控页
web_set_user("admin","1234","localhost:8080");
web_url("status",
"URL=http://localhost:8080/manager/status",
"Resource=0",
"RecContentType=text/html",
"Referer=",
"Snapshot=t1.inf",
"Mode=HTTP",
LAST);
FreeMemory=atof(lr_eval_string("{JVMFreeMemory}"));
TotalMemory=atof(lr_eval_string("{JVMTotalMemory}"));
MaxMemory=atof(lr_eval_string("{JVMMaxMemory}"));
lr_output_message("%.2f %.2f
%.2f",FreeMemory,TotalMemory,MaxMemory);
// Tomcat JVM metrics 使用lr_user_data_point()添加数据到图表中去
lr_user_data_point("Tomcat JVM Free memory",
FreeMemory);
lr_user_data_point("Tomcat JVM Total memory",
TotalMemory);
lr_user_data_point("Tomcat JVM Max memory",
MaxMemory);
lr_end_transaction("monitor tomcat", LR_AUTO);
return 0;
在设置过程中可能会存在问题:
- 每次启动tomcat后,SiteScope都不能访问;
怀疑端口冲突:将tomcat为默认的设置:8005 8080 8009
查看SiteScope的配置如下:SiteScope安装路径\Tomcat\conf下server文件:
8005 58999 8009 后更改SiteScope中的8005 8009端口,重启后问题解决。
tomcat与SiteScope可同时启动。
- SiteScope中添加计数器时,username与password要和tomcat中的tomcat-users中配置一致。
- SiteScope中添加计数器时,JMX URL 中的端口要与tomcat中catalina.bat文件jmxremote.port 端口一致。
- SiteScope中不能得到计数器时,查看各项配置是否有误,http://localhost:8080/Status能否访问与Jconsole中有无进程可连接。保证配置无误。
- SiteScope重启服务可以在我的电脑--右击--管理--服务中去找。
- SiteScope安装在被监测的应用服务器或数据库服务器上。(自已没试远程。)
- 通过修改LR脚本监控tomcat时,如果使用atof函数,需先声明。否则会影响输出结果。
Tomcat 监控的几种方法的更多相关文章
- redis 简易监控的几种方法
简介 针对Redis 实现性能监控的几种方法 一.使用info命令 命令说明 127.0.0.1:6380> info # Server redis_version:3.2.11 redis_g ...
- 将Web应用发布到tomcat中的三种方法
坑啊,为什么网易的博客不能搬过来!!!我一个一个复制过来容易嘛!!!!原文地址:http://buffalo-l.blog.163.com/blog/static/244954022201539111 ...
- Myeclipse发布第一个jsp页面及web project部署到tomcat上的几种方法
菜鸟日记: 1:new web project: 2:fix the visiting path of the tomcat,打开在安装目录下conf目录中的server.xml,在</Hos ...
- 将Java web应用部署到Tomcat 及部署到Tomcat根目录 的三种方式
Tomcat作为Servlet/JSP容器(服务器)挺不错的,开源免费,需要知道的是Tomcat是一个Web服务器,其符合Servlet/JSP规范,但是却没有实现所有JavaEE规范,所以我们还是应 ...
- apache与tomcat负载集群的3种方法
花了两天时间学习apache与tomcat的集成方法,现在把学习成果记录下来. apache与tomcat负载集群集成方法有3种jk.jk_proxy.http_proxy 本次集成使用的软件版本: ...
- Tomcat中部署WEB项目的四种方法
对Tomcat部署web应用的方式总结,常见的有以下四种: 1.[使用控制台部署] 访问Http://localhost:8080,并通过Tomcat Manager登录,进入部署界面即可. 2.[利 ...
- 关于 tomcat 集群中 session 共享的三种方法
前两种均需要使用 memcached 或redis 存储 session ,最后一种使用 terracotta 服务器共享. 建议使用 redis,不仅仅因为它可以将缓存的内容持久化,还因为它支持的单 ...
- Tomcat部署发布JSP应用程序的三种方法 (转)
Tomcat部署发布JSP应用程序的三种方法 1.直接放到Webapps目录下 Tomcat的Webapps目录是Tomcat默认的应用目录,当服务器启动时,会加载所有这个目录下的应 ...
- Java Web开发: Tomcat中部署项目的三种方法
web开发,在tomcat中部署项目的方法: 可以参考http://m.blog.csdn.net/blog/u012516903/15741727 定义$CATALINA_HOME指的是Tomcat ...
随机推荐
- Web应用扫描测试工具Vega
Web应用扫描测试工具Vega Vega是Kali Linux提供的图形化的Web应用扫描和测试平台工具.该工具提供代理和扫描两种模式.在代理模式中,安全人员可以分析Web应用的会话信息.通过工具 ...
- 【BZOJ 3175】 3175: [Tjoi2013]攻击装置(二分图匹配)
3175: [Tjoi2013]攻击装置 Description 给定一个01矩阵,其中你可以在0的位置放置攻击装置.每一个攻击装置(x,y)都可以按照“日”字攻击其周围的 8个位置(x-1,y-2) ...
- run()和start()的区别
run没有启新的线程,start方法才会调用Thread的native的start0方法,start0会调用run方法,开启新的线程,博主这么做,不是多线程顺序执行,而是把业务阻塞在主线程里.请打印: ...
- BZOJ 1633 [Usaco2007 Feb]The Cow Lexicon 牛的词典(单调DP)
[题目链接] http://www.lydsy.com/JudgeOnline/problem.php?id=1633 [题目大意] 给出一个字符串和一个字符串集, 问要删去多少个字符该字符串才可以被 ...
- 【组合计数】UVA - 11538 - Chess Queen
考虑把皇后放在同一横排或者统一纵列,答案为nm(m-1)和nm(n-1),显然. 考虑同一对角线的情况不妨设,n<=m,对角线从左到右依次为1,2,3,...,n-1,n,n,n,...,n(m ...
- 【最大流/费用流】BZOJ1834-[ZJOI2010]network 网络扩容
[题目大意] 给定一张有向图,每条边都有一个容量C和一个扩容费用W.这里扩容费用是指将容量扩大1所需的费用.求: 1. 在不扩容的情况下,1到N的最大流: 2. 将1到N的最大流增加K所需的最小扩容费 ...
- [转]详解spring 每个jar的作用
spring.jar 是包含有完整发布模块的单个jar 包.但是不包括mock.jar, aspects.jar, spring-portlet.jar, and spring-hibernate2. ...
- Android显示GIF动画 GifView
android中显示gif动画原生态一般支持的不是很好,故找了一个开源的项目,现简单介绍如下: GifView 是一个为了解决android中现在没有直接显示gif的view,只能通过mediapla ...
- 【mybatis】分别按照 天 月 年 统计查询
页面统计想通过 天 月 年 分别来展示统计效果, 那么查询SQL拼接如下: select *, <if test="groupType == 1"> DATE_FORM ...
- 《Go语言实战》笔记之第三章 ----包
原文地址: http://www.niu12.com/article/10 ####包 所有的.go 文件,除了空行和注释,都应该在第一行声明自己所属的包. 每个包都在一个单独的目录里. 不能把多个包 ...