0
点赞
收藏
分享

微信扫一扫

二、tomcat介绍&日志&监控&配置


目录

​​一、tomcat作用​​

​​二、tomcat目录结构​​

​​二、tomcat日志​​

​​2.1 tomcat日志配置文件​​

​​2.2 tomcat日志文件​​

​​三、tomcat配置​​

​​3.1 tomcat线程池配置​​

​​3.2 tomcat压缩配置​​

​​四、tomcat 监控入口设置​​

​​4.1. 设置账号密码​​

​​4.2  设置远程访问权限​​

​​五、tomcat 监控​​

上一章:


一、tomcat作用

每一次HTTP请求到达Web服务,tomcat都会创建一个线程来处理该请求。(emm,我也没想好怎么描述emmm)

二、tomcat目录结构

------bin

bin一般存放的是可执行文件。

主要有两大类,一类是以.sh结尾的linux可执行文件,另一类是以.bat结尾的windows可执行文件。

很多环境变量的设置都在此处,例如可以设置JDK路径、tomcat路径;

startup.sh (startup.bat) tomcat启动文件
shutdown.sh (shutdown.bat) tomcat关闭文件

catalina.sh(catalina.bat) 可以设置tomcat的内存。

------conf
conf主要是用来存放配置文件。

server.xml 可以设置端口号、设置域名或IP、默认加载的项目、请求编码;
web.xml 可以设置tomcat支持的文件类型;
context.xml 可以用来配置数据源之类的信息;
tomcat-users.xml 用来配置管理tomcat的用户与权限;
Catalina 目录下可以设置默认加载的项目。

-------lib
lib目录主要用来存放tomcat运行需要加载的jar包。
例如,像连接数据库的jdbc的包我们可以加入到lib目录中来。

-------logs
该目录主要用来存放tomcat在运行过程中产生的日志文件,非常重要的是在控制台输出的日志,清空不会对tomcat运行带来影响。
在windows环境中,控制台的输出日志在catalina.xxxx-xx-xx.log文件中;
在linux环境中,控制台的输出日志在catalina.out文件中。

-------temp
temp主要是给用户存放tomcat在运行过程中产生的临时文件。(清空不会对tomcat运行带来影响)

-------webapps
webapps主要是用来存放应用程序,当tomcat启动时会去加载webapps目录下的应用程序。可以以文件夹、war包、jar包的形式发布应用。

-------work
work目录主要是用来存放tomcat在运行时编译后的文件,例如JSP编译后的文件。
清空work目录,然后重启tomcat,可以达到清除缓存的作用。

二、tomcat日志

日志文件存放在tomcat/logs目录下。

2.1 tomcat日志配置文件

tomcat对应日志的配置文件:

tomcat目录下的/conf/logging.properties

tomcat的日志等级有:

SEVERE (最高级别) > WARNING > INFO > CONFIG > FINE > FINER(精心) > FINEST (所有内容,最低级别)

2.2 tomcat日志文件

tomcat有五类日志:catalina、localhost、manager、admin、host-manager

常用日志文件:

 catalina.out/实时运行日志

即标准输出和标准出错,所有输出到这两个位置的都会进入catalina.out,这里包含tomcat运行自己输出的日志以及应用里向console输出的日志。默认这个日志文件是不会进行自动切割的,我们需要借助其他工具进行切割(注意:catalina.out文件如果过大会影响)

查询日志:

tail -f catalina.out 

 我们在启动tomcat时,一般是需要启动同时观察日志输出的

sh startup.sh & tail -f ../logs/catalina.out

日常工作过程中,我们通过查看日志来定位问题。

tail -f catalina.out | grep 关键字

catalina.yy-mm-dd.log/tomcat运行日志

catalina.{yyyy-MM-dd}.log是tomcat自己运行的一些日志,这些日志还会输出到catalina.out,但是应用向console输出的日志不会输出到catalina.{yyyy-MM-dd}.log,它是tomcat的启动和暂停时的运行日志,注意,它和catalina.out是里面的内容是不一样的。

三、tomcat配置

查看conf/server.xml文件

默认配置:

二、tomcat介绍&日志&监控&配置_linux

   <Connector port="8080" protocol="HTTP/1.1"
connectionTimeout="20000"
redirectPort="8443" />

通过8080端口,对外响应HTTP/1.1协议。

connectionTimeout="20000",(单位毫秒),连接的超时时间20s

redirectPort="8443",https协议的请求,访问8080端口,会重定向到8443端口。

修改配置

<Connector port="8080" protocol="HTTP/1.1"
maxThreads="600"
minSpareThreads="100"
maxSpareThreads="500"
acceptCount="700"
enableLookups="false"
compression="on"
compressionMinSize="2048"
connectionTimeout="20000"
redirectPort="8443" />

3.1 tomcat线程池配置

maxThreads(最大线程数):

每一次HTTP请求到达Web服务,tomcat都会创建一个线程来处理该请求,那么最大线程数决定了Web服务可以同时处理多少个请求,默认200个线程。

minSpareThreads(最小空闲线程数):

最小空闲线程数,无论如何都会存活的最小线程数(Tomcat初始化时创建的线程数)

maxSpareTHreads (最大空闲线程数)

acceptCount(最大等待数):

当调用Web服务的HTTP请求数达到tomcat的最大线程数时,还有新的HTTP请求到来,这时tomcat会将该请求放在等待队列中,这个acceptCount就是指能够接受的最大等待数,默认100.如果等待队列也被放满了,这个时候再来新的请求就会被tomcat拒绝(connection refused)。

enableLookups=“false”:是否开启​​域名​​反查,一般设置为false来提高处理能力,它的取值还有true,一般很少使用。

maxConnections(最大连接数):

这个参数是指在同一时间,tomcat能够接受的最大连接数。一般这个值要大于maxThreads+acceptCount。

场景:

tomcat默认线程数量,当发起并发请求数 <= tomcat最大线程数200,可以看到200个请求,响应结果正常。
并发数(201) >tomcat最大线程数200.可以看到,因为tomcat最大的线程数为200,201的并发请求量,超出了并发处理的数量200,多出来的1个请求,需要等待某个处理中的请求处理完成
请求数超过最大连接数300,可以看到有大量的没有正常响应的http请求,原因很简单,因为超过了tomcat设置的最大连接数,服务器拒绝了该次请求的连接

增加线程是有成本的,JVM中默认情况下在创建新线程时会分配大小为1M的线程栈,所以更多的线程异味着更多的内存;
更多的线程会带来更多的线程上下文切换成本。

springboot中Tomcat配置建议:
最大工作线程数 ,默认200(4核8G内存,线程数经验值为800,操作系统之间做线程之间切换调度是有开销的,不是越多越好),最大连接数默认是10000,等待长度默认为100,最小工作空闲线程默认10

线程数的经验值为:1核2G内存, 线程数经验值为200,;4核8G内存,线程数经验值为800

3.2 tomcat压缩配置

场景:

    当网站从服器端请求的数据较大时,在有限的带宽下就会造成浏览器加载缓慢,有时候会造成页面没有响应,使用户体验变得很差,tomcat为我们提供了有效的解决了办法,就是使用压缩来解决传输问题。

  tomcat使用HTTP/1.1 GZIP 来压缩,以减少带宽压力。

        HTTP协议上的GZIP编码是一种用来改进WEB应用程序性能的技术。大流量的WEB站点常常使用GZIP压缩技术来让用户感受更快的速度。这一般是指WWW服务器中安装的一个功能,当有人来访问这个服务器中的网站时,服务器中的这个功能就将网页内容压缩后传输到来访的电脑浏览器中显示出来.一般对纯文本内容可压缩到原大小的40%.这样传输就快了,效果就是你点击网址后会很快的显示出来.当然这也会增加服务器的负载. 一般服务器中都安装有这个功能模块的.

tomcat配置:
 

<Connector port="8088" protocol="HTTP/1.1" 
connectionTimeout="20000"
redirectPort="8443"
compression="on"
compressionMinSize1="2048"
noCompressionUserAgents="gozilla, traviata"
compressableMimeType="text/html,text/xml,text/javascript,text/css,text/plain"/>

   compression="on" 

是否启用压缩 on为启用(文本数据压缩) off为不启用, force 压缩所有数据

compressionMinSize1="2048" 

当超过最小数据大小才进行压缩

 noCompressionUserAgents="gozilla, traviata" 

哪些客户端发出的请求不压缩,默认是不限制

compressableMimeType="text/html,text/xml,text/javascript,text/css,text/plain"

配置想压缩的数据类型,默认是 ​​text/html,text/xml,text/plain​

3.3 tomcat io配置

tomcat 8

   <Connector port="8080" protocol="HTTP/1.1"
connectionTimeout="20000"
redirectPort="8443" />

tomcat8的protocol=“HTTP/1.1" 默认就是nio模式(异步io)

tomcat 7 

tomcat7 默认bio(同步io)模式,效率肯定不如nio模式(异步io),所以tomcat7 我们需要手动改成bio模式。

在Connector节点配置

protocol="org.apache.coyote.http11.Http11NioProtocol"

Http11NioProtocol协议下默认最大连接数是10000,也可以重新修改maxConnections的值,同时我们可以设置最大线程数maxThreads,这里设置的最大线程数就是Excutor的线程池的大小。在BIO模式下实际上是没有maxConnections,即使配置也不会生效,BIO模式下的maxConnections是保持跟maxThreads大小一致,因为它是一请求一线程模式。

3.4 共享线程池配置

多个Connector共享一个线程池的配置,(可以自己去百度一下)

3.5 工程路径配置&日志路径配置

conf/server.xml文件

二、tomcat介绍&日志&监控&配置_xml_02

<Host name="localhost"  appBase="webapps"
unpackWARs="true" autoDeploy="true">

<!-- SingleSignOn valve, share authentication between web applications
Documentation at: /docs/config/valve.html -->
<!--
<Valve className="org.apache.catalina.authenticator.SingleSignOn" />
-->

<!-- Access log processes all example.
Documentation at: /docs/config/valve.html
Note: The pattern used is equivalent to using pattern="common" -->
<Valve className="org.apache.catalina.valves.AccessLogValve" directory="logs"
prefix="localhost_access_log" suffix=".txt"
pattern="%h %l %u %t "%r" %s %b %D" />

默认需要把工程放到webapps下。

日志路径在logs文件夹下,localhost_access_log文件

二、tomcat介绍&日志&监控&配置_xml_03

日志配置文件

pattern="%h %l %u %t &quot;%r&quot; %s %b %D"

查看当前日志

tail -f localhost_access_log.2022-08-04.txt 

发起请求,查看日志

二、tomcat介绍&日志&监控&配置_tomcat_04

 %h 表示请求的host

%l 表示-

%u 表示请求的用户

%t 表示请求的时间

%s 状态码

%b 响应数据量的大小

%D 请求处理的时间,默认是没有配置的,需要自己手动添加配置,单位毫秒,(如上图,51毫秒),这个时间指tomcat拿到请求之后,整个处理的时间(这个值用户还挺大)

四、tomcat 监控入口设置

​​http://124.70.87.136:8080/​​

访问tomcat页面,点击Server Status 按钮。 

二、tomcat介绍&日志&监控&配置_linux_05

tomcat7 会有弹窗,点击取消。

tomcat8 会403。

4.1. 设置账号密码

 查看页面

二、tomcat介绍&日志&监控&配置_服务器_06

 提示配置权限。

<role rolename="manager-gui"/>
<user username="tomcat" password="s3cret" roles="manager-gui"/>

复制出来

我们 复制的系统提示的模版,我门需要把用户明和账号改成自己的,

<role rolename="manager-gui"/>
<user username="miaojiang" password="123456" roles="manager-gui"/>

然后去修改conf/tomcat-users.xml 文件。

二、tomcat介绍&日志&监控&配置_运维_07

 将我们复制的权限配置在<tomcat-users > 与 </tomcat-users> 之间就好了。

注意 <!-- ,代表注释,别把我们的代码放到注释里面。

其他:

二、tomcat介绍&日志&监控&配置_服务器_08

 我们上面添加的权限,其实在tomcat-users.xml 文件里是有的,只不过是被注释掉了。

------------------------

配置完成后,重启tomcat

sh shutdown.sh 

sh startup.sh 

访问tomcat页面

​​http://124.70.87.136:8080/​​

4.2  设置远程访问权限

tomcat7与tomcat8设置有区别。tomcat7好像直接就可以远程访问,tomcat8如下图,需要单独设置一下远程访问。具体的设置方法按照我下面的方法,如果与我的设置方法不一致,那就需要去百度一下了,每个版本的设置方法不一致。

二、tomcat介绍&日志&监控&配置_tomcat_09

默认情况下,Manager 只能从与 Tomcat 运行在同一台机器上的浏览器访问。如果您希望修改此限制,则需要编辑 Manager 的context.xml文件。

默认只允许本机访问了,如果要允许其他主机访问要去修改,看来这是8.5的新特性了,

如果想要进入/manager/html页面,则新建或编辑conf/Catalina/localhost/manager.xml

如果想要进入/host-manager/html页面,则新建或编辑conf/Catalina/localhost/host-manager.xml

以上文件内容如下:

<?xml version="1.0" encoding="UTF-8"?>
<Context privileged="true" antiResourceLocking="false"
docBase="${catalina.home}/webapps/manager">
<Valve className="org.apache.catalina.valves.RemoteAddrValve" allow="^.*$" />
</Context>

无须重启tomcat即可生效。此时重新访问 ​​http://124.70.87.136:8080/manager/status​​ 输入用户密码即可进入tomcat管理页面

二、tomcat介绍&日志&监控&配置_tomcat_10

五、tomcat 监控

查看监控页面

​​http://124.70.87.136:8080/manager/status​​

二、tomcat介绍&日志&监控&配置_运维_11

http-nio-8080

nio ,异步io;端口是8080

最大线程: 200 当前线程数: 10 当前线程繁忙: 1 存活套接字总数: 1

最大处理时间: 332 ms 处理时间: 13.99 s 请求总数: 124763 错误数: 124714 收到字节: 0.00 MB 发送.字节: 297.63 MB

我们关注线程数量,和是否排队的情况。


举报

相关推荐

0 条评论