https://www.cnblogs.com/f-ck-need-u/p/8120008.html#1-web- 《龙帅的tomcat》
一、tomcat工作模式 (bio,bio,apr)
更改工作模式也是调优的一部分,这里可配合Jmeter看来调整后的参数(吞吐量等)
可以在http://192.168.26.138:8080/manager/status看出当前用的是什么模式。
也可在catalina.out 日志最后启动完成后处也能看出用的是什么模式。
1.1 修改server.xml更改工作模式 (待写)
8.5版本默认nio模式
protocol="HTTP/1.1"
调整为 nio2模式 ,修改protocol的值
<Connector port="8080" protocol="org.apache.coyote.http11.Http11Nio2Protocol"
connectionTimeout="20000"
redirectPort="8443" />
调整为apr模式
#安装apr环境 。 注意centos8没有tomcat-native源,需要编译安装
yum -y install apr apr-devel tomcat-native
<Connector port="8080" protocol="org.apache.coyote.http11.Http11AprProtocol"
connectionTimeout="20000"
redirectPort="8443" />
二、tomcat多实例
同一台服务器上运行多个tomcat ,实现过程如下:
tar -xf apache-tomcat-8.5.63.tar.gz
cp -r apache-tomcat-8.5.63/ tomcat_8081
cp -r apache-tomcat-8.5.63 tomcat_8082
sed -i.bak 's#8080#8081#g' tomcat_8081/conf/server.xml
sed -i.bak 's#8005#8006#g' tomcat_8081/conf/server.xml
sed -i.bak 's#8009#8010#g' tomcat_8081/conf/server.xml
sed -i.bak 's#8080#8082#g' tomcat_8082/conf/server.xml
sed -i.bak 's#8005#8007#g' tomcat_8082/conf/server.xml
sed -i.bak 's#8009#8011#g' tomcat_8082/conf/server.xml
mv tomcat_808* /application/
#分别启动另外两个实例8081和8082:
/application/tomcat_8081/bin/startup.sh
/application/tomcat_8082/bin/startup.sh
ss -naltp | grep java
echo "tomcat_8081" > /application/tomcat_8081/webapps/ROOT/index.jsp
echo "tomcat_8082 ..." > /application/tomcat_8082/webapps/ROOT/index.jsp
三个tomcat :
三、tomcat故障案例 —负载高(*)
初版本:
3.1 vmstat 找出CPU或磁盘导致负载高
看左边的procs下面的 r 和 b 。
r 数字较大意味着系统的cpu使用率较高
b 数字较大意味着磁盘io较高
[root@lvs1-138 conf]# vmstat 1 5
procs -----------memory---------- ---swap-- -----io---- -system-- ------cpu-----
r b swpd free buff cache si so bi bo in cs us sy id wa st
1 0 1024 330348 20 803316 0 0 1 6 62 63 0 1 99 0 0
0 0 1024 330308 20 803316 0 0 0 0 272 292 0 1 99 0 0
0 0 1024 330168 20 803316 0 0 0 0 248 280 0 1 99 0 0
0 0 1024 329920 20 803316 0 0 0 0 260 270 0 1 99 0 0
0 0 1024 330084 20 803316 0 0 0 0 284 269 0 2 98 0 0
3.2 ps aux , htop 具体看那个进程pid所导致
3.3 iotop 显示每个进程的io情况 pid
iotop -o #只显示在进行读写的进程
3.4 jps 配合 top -p 看java进程
pstree -p 的:
130923是进程, 后面那一堆是线程
jps -lvm
pstree -p
#这个pid是java进程的pid
top -p 130923 # 只有进程显示 -p指定pid , -H 显示进程对应线程的信息
top -Hp 130923 #进程 线程都显示 ,然后看具体是那个线程出了问题,占用CPU啥的
3.5 将有问题的线程id 转为16进制 。
130923是进程 。 130924是线程。
echo 'obase=16;130924' | bc
1FF6C
3.6 jstack java进程id
jstack java进程id 过滤 java线程 的16进制id , 与开发沟通
jstack 130923 | grep -i 1FF6C -A 10
分割线= 上面是前4步的 ,下面说 5 6 7步
3.7 jmap (显示java jvm信息)
jmap(显示java jvm信息) jmap -heap java进程id显示jvm的内存使用情况
与jvm相关的 jmap 导出或显示jvm信息
显示:显示jvm使用情况一共多少 ,使用多少,剩余多少。
导出: jvm内存信息数据等等导出到磁盘
jmap -dump 导出jvm内存内容
#jmap -heap javaPid
jps -lvm
#java jvm使用率,后面用来做自定义监控
jmap -heap 130923
上图主要是看那些百分数, 67% used ,17 % used ,
3.8 jvm内存内容导出
# jmap 导出jvm内存的内容
jmap -dump:format=b,file=/root/tmpFile/tomcat.bin 130923
然后将其下载到window,使用java mat进行分析
3.8 通过java mat分析 (熟悉) 研发协助
https://www.cnblogs.com/liuchuanfeng/p/8484641.html《利用内存分析工具(Memory Analyzer Tool,MAT)分析java项目内存泄露》
END
四、tomcat配置域名后,域名访问正常,ip访问404
修改了Tomcat的server.xml 的属性 。
hosts文件已做解析:192.168.26.138 blog.jpress.org
目前的问题是域名访问正常,用IP访问就404 。 最初localhost的时候,用IP访问是正常的。
解答:想再用ip,就再添加一个<Host name>值为ip的站点
<Host name="blog.jpress.org" appBase="webapps"
unpackWARs="true" autoDeploy="true">
<Valve className="org.apache.catalina.valves.AccessLogValve" directory="logs"
prefix="localhost_access_log" suffix=".txt"
pattern="%h %l %u %t "%r" %s %b" />
</Host>
<Host name="192.168.26.138" appBase="webapps"
unpackWARs="true" autoDeploy="true">
<Valve className="org.apache.catalina.valves.AccessLogValve" directory="logs"
prefix="localhost_access_log" suffix=".txt"
pattern="%h %l %u %t "%r" %s %b" />
</Host>
五、tomcat监控功能(略写)
jps -lvm
https://blog.csdn.net/daiming573/article/details/106813931/
《show-busy-java-threads脚本内容及使用过程》
pstree -p
pstree -a
5.1 监控tomcat (在大概113行左右写即可)
(8.5版本如果启动报错的话,则要将下面的内容写成一行, 或者用 \ 号来分来)
jmxremote tomcat远程监控 有一个固定端口+2个随机端口
5.2 jconsole (略)
5.3 jvisualVM (略)
以及jmap , jstack