一、目录结构:
1、webAPP:代码工程部署目录(war包是对外提供服务,jar一般是内部使用的)
2、bin *.bat(Windows) *.sh(Linux) catalina.sh(jvm)
3、logs日志文件 运行日志:catalina.out;用户访问日志:localhost_access_log.201x-12-10.txt
4、lib:tomcat使用的jar
5、conf:配置文件(server.xml tomcat-user.xml-可以看到总线程数、当前启动的线程数、繁忙的线程数)
6、四种查看tomcat方法:jps;netstat;lsof;
二、监控:
1、监控tomcat(jvm、线程、排队等)
1.1、tomcat_user.xml配置:
1.2步骤:
1 .2.1进入/tomcat7/conf/tomcat-users.xml,配置如下内容
<role rolename="manager-gui"/>
<role rolename="manager-jmx"/>
<role rolename="manager-status"/>
<user username="admin" password="admin" roles="manager-gui,manager-jmx,manager-status"/>
1.2.2、重启tomcat:
1.2.2.1、先进入bin目录,关闭tomcat:sh shutdown.sh
1.2.2.2、启动tomcat:sh startup.sh
1.2.3、输入http://ip:8080/manager/html
2、监控tomcat每秒并发(做压测就看前10S 20S的就行)
awk是专门对文件内容进行统计的
awk -f "=" '{}' locahost_access_log.2019-02-23.txt
(说明:-f后边双引号引起来的意思是,用什么进行分割,空格的话,就什么都不用写,包括双引号)
①、awk '{print $4}' localhoust_access_log.201x-12-10.txt | sort -r | uniq -c | head -20 (统计每秒的并发)
sotr -r 反转未排序 uniq -c按照顺序去重统计 head -10 看当前的10S数据
②、awk '{print $1}' localhost_access_log.201x-05-06.txt |sort -n |uniq -c |sort -nr| head -30(万能统计)
三、关于日志信息:
1、catalina.out(是Catalina总日志文件,是Java代码的运行日志)
2、locallhost是用户访问日志
3、查看日志 日志打印出来的,否则无效:sed -n '/2014-12-17 16:17:20/,/2014-12-17 16:17:36/p'test.log
4、比如我要查找上面的从 2019-10-24 22:16:21
到 2019-10-24 22:16:59
这个时间段的日志
sed -n ‘/2019-10-24 22:16:21/,/2019-10-24 22:16:59/p’ all.log(时间后面的/p不能漏掉了)
5、模糊查询,比如查询时间段2019-10-24 22:14 到 2019-10-24 22:16
sed -n ‘/2019-10-24 22:14:*/,/2019-10-24 22:16:*/p’ all.log
6、也可以按小时模糊查询
sed -n ‘/2019-10-24 21*/,/2019-10-24 22*/p’ all.log
7、sed 也可以结合 grep 使用,比如我查询上面日志某个时间段的带有 POST
的日志行
sed -n ‘/2019-10-24 22:16:21/,/2019-10-21 20:16:58/p’ all.log | grep POST
8、查询某个时间段的日志,导出到本地
sed -n ‘/2019-10-24 22:16:21/,/2019-10-21 20:16:58/p’ all.log > laoyang.log
四、工作原理:
工作图:
工作原理1:
前提:tomcat启动的线程数没有达到maxThreads
当tomcat服务8080接受一个请求,tomcat会启动一个线程来处理此请求,过程即jmeter--A--C
工作原理2:
前提:当同时进来并发请求>200时,tomcat启动的线程数即maxTheads
当tomcat服务8080接受一个请求,tomcat会把此请求放入等待队列,等待空闲线程
工作原理3:
前提:当同时进来并发请求>200时,acceptCount排队>100
当tomcat服务8080接收一个请求,此时tomcat会直接拒绝此请求,返回connection refused
工作原理整体总结:
注意:
1、maxThreads数满或不断上升原因:
①、并发量大
②、代码有瓶颈造成maxThreads配置的线程不能释放掉
2、acceptCount数满或不断上升原因:
①、并发量大maxThreads配置的线程不能释放掉
②、代码有瓶颈造成maxThreads配置的线程不能释放掉
connectTimeOut超时原因:
connection refused原因:并发量大于maxThreads+acceptCount总和
代码有瓶颈,tomcat不能返回结果,当tomcat和请求连接超时报错后,代码线程和tomcat线程都会还在CPU中,只有代码瓶颈解决后,代码线程和tomcat线程才会从CPU中释放。
五、压测总结
1、jmeter请求数>maxThreads
jmeter请求数>(maxThreads + acceptCount)
若响应时间<1s时,tomcat底层出少部分线程对接
2、jmeter请求数>maxThreads
jmeter请求数>(maxThreads + acceptCount)
若响应时间>1s时,说明tomcat长时间不返回响应数据,即tomcat不能释放,故此时tomcat就要不断用新线程对接请求(根本原因:代码瓶颈)
3、jmeter请求数<maxThreads
jmeter请求数<(maxThreads + acceptCount)
1.99%响应时间是105ms,可知服务器代码没瓶颈,tomcat也没有瓶颈,因它不参加代码计算,且tomcat只启动12个线程对接
tomcat线程配置规则:
规则:tomcat部署的相关代码无瓶颈 + 压测关注Linux服务器资源使用情况(cpu 75% , mem 75%)