tomcat8 的下载安装请自行百度,直接进入正文。
注:以下假设建立在你并没有深入了解过 tomcat 的基础上。
注:我使用的 tomcat 版本为 8.5.54,使用的 maven 版本为 3.6.1。
注:此文参考于:https://blog.51cto.com/14230003/2420282
当你在游览器上输入 127.0.0.1:8080 后,出现的是 tomcat 的首页,而查看 tomcat 相关信息的入口便是在首页的头部右边,当你点击之后会出现弹窗要求你输入账号和密码。
你会想到之前只是用 tomcat 作为服务器,部署一个应用上去,然后开启,并没有设置什么账号和用户名。那么此时你要做的便是为你的 tomcat 后台设置一个账号。
打开 conf/tomcat-user.xml 文件,在 < tomcat-users >< /tomcat-users > 标签内添加如下内容:
<role rolename="manager"/>
<role rolename="manager-gui"/>
<role rolename="admin"/>
<role rolename="admin-gui"/>
<user username="admin" password="admin" roles="manager,manager-gui,admin,admin-gui"/>
注意:上面 4 个 role 一个都不能少。
打开 webapps/manager/META-INF/context.xml 文件,将 < Valve /> 的内容注释:
<Context antiResourceLocking="false" privileged="true" >
<Manager sessionAttributeValueClassNameFilter="java\.lang\.(?:Boolean|Integer|Long|Number|String)|org\.apache\.catalina\.filters\.CsrfPreventionFilter\$LruCache(?:\$1)?|java\.util\.(?:Linked)?HashMap"/>
Context>
注意:如果你没有将其注释的话,那么访问页面就会显示 403,即你没有权限访问网站,因为服务器拒绝了你的地址请求。
将以上两个文件修改好后,便可以在游览器的弹窗输入你设置的账号和密码,确定之后就会出现以下界面:
其中的属性可能因为个人表述或者版本出现偏差,所以开头先记录如何查看 conf/server.xml 各标签的各属性。
当进入 tomcat 官网 时,可以看到它的导航栏是在左边的,左边有一个 Documentation 标签,可以选择对应的 tomcat 版本的文档,比如 tomcat8.5。进去之后在它左边导航栏有一个 Reference 标签,其中有查看配置的链接:Configuration。里面就是各种标签的配置了。
AJP(Apache JServer Protocol)是定向包协议。WEB 服务器通过 TCP 连接和 servlet容器连接。为了减少进程生成s ocket 的消耗,WEB 服务器和 servlet 之间尝试保持持久性的 TCP 连接,对多个请求/回复循环重用一个连接。一旦连接分配给一个特定的请求,在请求处理循环结束之前不会在分配。
如果是采用 Nginx + tomcat(进行负载均衡)的结构,那么就用不到 AJP 协议,一般将它禁掉。
注意:在 tomcat 中,默认是关闭 AJP 的,如果要使用将注释去掉就可以了。如下面代码:
在tomcat 中,每一个用户请求都是一个线程,所以可以使用线程池提高性能。
修改 conf/server.xml 文件:
<Executor name="tomcatThreadPool" namePrefix="catalina-exec-" prestartminSpareThreads="true"
maxThreads="500" minSpareThreads="50" maxQueueSize="100"/>
<Connector port="8080" protocol="HTTP/1.1"
connectionTimeout="20000"
executor="tomcatThreadPool"
redirectPort="8443" />
注意:修改后再次启动 tomcat,会看到最大线程数变为 -1,这种情况是正常的,仅仅是显示如此,但是真实的线程数仍然是你设置的值。
tomcat 有 4 中运行模式
tomcat 默认使用的是 nio。
<Connector port="8080" protocol="org.apache.coyote.http11.Http11Nio2Protocol"
connectionTimeout="20000"
executor="tomcatThreadPool"
redirectPort="8443" />
注意:http11 是两个数字 1,不是小写的 l 或者大写的 I。
对于 Connector 标签来说,可以进行以下优化:
有人可能会被 Connector 和 Executor 属性搞蒙,为什么 Connector 有个属性为 acceptorCount,Executor 又有个根据和它差不多的属性 maxQueueSize,其实它们并不是一样的,也不会有覆盖问题。关于 Connector 和 Executor 的关系可以查看阅读这一篇博客:https://blog.csdn.net/u011649691/article/details/79040953
在这里不得不吐槽一下,网上面一些所谓的博客真的是直接复制粘贴,试都不试一下,我参考的这个帖子起码被转了 14 次(怎么得出来的?直接在百度搜索 “PringtGCTomeStamps” ,凡是出现的都是这个内容,真的是要吐了,这个名字是错了的,实际上应该是 PrintGCTimeStamps,我也是醉了……,查了我半个多小时,后面直接查 JVM 命令,突发奇想觉得这个可能是拼错了,要不然查命令都要用老久……)。
直接上参数了,在 bin/startup/sh 的 setlocal
下面一行添加:
set JAVA_OPTS=%JAVA_OPTS% -server -Xms64m -Xmx512m -XX:+PrintGCDetails -XX:+PrintGCTimeStamps -XX:+PrintGCDateStamps -XX:+PrintHeapAtGC -Xloggc:../logs/gc.log
都是一些 JVM 参数,详细内容可参考 JVM 官方文档。
我用的是 GCView,一个离线的 GC 日志可视化工具。先简单说明一下它的下载吧。
首先从 git 上 clone 它的项目下来,地址是:https://github.com/chewiebug/GCViewer。
然后在它的 pom.xml 文件的 plugins 里加上一个组件:
<plugin>
<groupId>org.apache.maven.pluginsgroupId>
<artifactId>maven-surefire-pluginartifactId>
<configuration>
<testFailureIgnore>truetestFailureIgnore>
configuration>
plugin>
接着在它的 pom.xml 文件所在的位置打开 cmd,输入 mvn clean package -DskipTests
,基本上就显示打包成功了。
注意:我是进行以上两步才打包成功的,如果你只是添加了组件,但是在命令行里只是简单地输入
mvn clean install
,那么可能会打包失败。如果你按我上面的做了,还是打包失败,那我只能建议你去找其它的可视化工具。
双击打开 GCView jar 包,导入 tomcat 创建的 GC 文件,我们可以看到以下(GCView 线条图解:https://blog.csdn.net/chy2z/article/details/88651810):
这没啥说的,只要服务运行地够快,bug 就追不上我。。。尽量做到:
通过 jmeter 对 tomcat 进行测试。具体操作 查看 "1.3、使用Apache JMeter进行测试 "