Tomcat系列

一,Tomcat的目录结构

webapp: 代码工程部署放在这个目录下

bin:一些启动文件(*.bat(windows下启动)    *.sh(linux下启动或者关闭)    catalina.sh (配置JVM))

常用的命令:

  sh startup.sh  启动tomcat服务

  sh shutdown.sh   停止tomcat服务

  kill -9 + pid(进程号)   强制停止服务

  netstat -ntlp:查看网络

  jps: 查看Java的进程

  lsof -f :展现文件地址启动的服务

  tail -f :可以实时的查看文件的内容

 

logs:存放一些日志文件,比如:catalina的日志,hostmanage日志,localhost_access_log记录用户的请求日志,manager日志。

lib:  tomcat使用到的jar包  如:dbcp.jar,  jdbc.jar。

conf:配置文件(server.xml    tomcat-user.xml)

 

 二,tomcat的配置

2.1 server.xml配置(占用了三端口:8005,8009,8080)

8005端口:shutdown端口

8080端口:对接用户的请求

8009端口:暂时还不请求

 maxThreads:tomcat启动的最大线程数量默认值是200,每1个线程处理1个并发请求。

acceptCount:同时并发的请求数达到maxThreads时,还可接受排队的请求个数,超过此数直接拒绝,默认值是100

connectTimeout:当并发请求和8080服务器建立连接开始,等待服务器放回响应结果的时间(单位是ms)

enableLookups:是否允许反向解析访客的IP地址,默认值为true。

如图所示:

2.2 工作原理

情况1:

  当 同时进来并发请求数< 200 时,tomcat启动的线程数没有达到maxThreads数

  当tomcat服务8080接收1个请求,tomcat会启动一个线程来处理此请求;过程即Jmeter--A --C

情况2:

  当同时进来并发请求数>200时,tomcat启动的线程数即达到maxThreads数

  当tomcat服务8080接收1个请求,tomcat会把此请求放入等待队列,等待空闲线程。

情况3:

  当同时进来并发请求数>200时,acceptCount排队数>100

  当tomacat服务8080接收1个请求,此时tomcat会直接拒绝此请求,返回connection refused。

 2.3 常见问题

Q1:maxThreads数满或不断上升的原因:

答:1,并发量大

  2,代码有瓶颈造成maxThreads配置的线程不能释放掉

Q2:acceptCount 数满或不断上升原因:

答:1,并发量大,maxThreads数达到最大值

  2,代码有瓶颈,造成maxThreads配置的线程不能释放掉

Q3:connectTimeOut超时原因:

答:1,当Jmeter或者浏览器给tomcat的8080端口发送请求,建立连接的时间超过connectTimeOut设置的时间就会连接超时

  什么时候会超过connectTimeout的时间呢?

  1,当网络慢,卡顿,丢包严重会引起

  2,当Jmeter到tomcat再到webapps,后webapps到tomact再返回给Jmeter,这四段的总时间超过connectTImeOUt时间。

 

  3,当acceptCount中的等待请求超过connectTimeOut设置的时间没有请求,则请求超时

 

Q4,connectRefused原因:

答:并发请求量大于maxThreads + acceptCount总和

三,Tomcat的监控

3.1 监控tomcat(jvm,线程等)

1,在conf目录下配置tomcat-user.xml文件后重启。

 

 2,在前端登录manager webapp

进入到serverStatus

 

3.2,监控tomcat每秒并发

查看localhost_access_log.2020-08-23.txt

 

 通过监控localhost_access_log.2020-08-23.txt日志,来监控tomcat每秒并发

方式1:awk '{print $4}' localhost_access_log.2020-08-23.txt   (统计每一行的第四列)

 

 

 awk '{print $4}' localhost_access_log.2020-08-23.txt  | sort -r   (sort -r 将排序反转) | uniq -c (统计重复行)  | head -10   (只看前10条数据)

 

 

 统计接口数
awk {print $7}   localhost_access_log.2020-08-23.txt    # 统计每一行的第7列的接口地址

awk {print $7}   localhost_access_log.2020-08-23.txt  | sort -n  | uniq -c 

sort -n 做排序   uniq -c  去重统计次数  sort -nr 升序排序再反转

 

awk {print $7}   localhost_access_log.2020-08-23.txt  | sort -n  | uniq -c | sort -nr

sort -nr 升序排序再反转

 

 

 awk {print $7}   localhost_access_log.2020-08-23.txt  | sort -n  | uniq -c | sort -nr | head -10 

sort -nr 升序排序再反转  ,head -10 看前10的

 

awk {print $1}   localhost_access_log.2020-08-23.txt  | sort -n  | uniq -c | sort -nr | head -10    统计ip地址的访问次数

 

 方式2,通过Jmeter并发请求数

 四,Tomcat总结

4.1 压测总结

 A :Jmeter请求数 > maxThreads

        jmeterq请求数> (maxThreads+acceptCount)

  若响应时间逐步增大时,说明tomcat长时间不返回响应数据,即tomacat线程不能释放,故此时tomcat就要不断用新线程对接请求,主要原因是:

    linux硬件配置低,tomcat最大线程数配置低,代码瓶颈

  若响应时间<1s时,tomacat底层出少部分线程对接

B:Jmeter请求数<maxThreads

  Jmeter 请求数<(maxThreads+acceptCount)

  若响应时间逐步增大时,说明tomcat长时间不返回响应数据,即tomcat线程不能释放,故此时tomcat就要不断用新线程对接请求,主要原因:

    linux硬件配置低,tomcat最大线程数配置低,代码瓶颈

 

5.2,tomcat线程配置规则

规则:tomcat 部署的相关代码无瓶颈 + 压测关注linux服务器资源使用情况(cpu 75%,mem75%)

 案例总结:响应时间逐步变大,说明服务器处理能力下降,据监控linux负载低,tomcat线程用的少,且tomcat不参与代码计算

,只是起承上启下的作用,故此问题就是代码瓶颈,此时tomcat配置就毫无意义,当前应优先解决代码瓶颈问题。

 

 经验:

1,响应时间越大,并发请求数一定会低,tomacat启动线程数一定越来越多。

2,响应时间越小,并发请求数一定会高,tomcat启动线程数一定是很少的。

 

posted @ 2021-10-30 22:31  勇敢面对difficult  阅读(64)  评论(0)    收藏  举报