博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
tomcat7优化记录
阅读量:6658 次
发布时间:2019-06-25

本文共 3508 字,大约阅读时间需要 11 分钟。

hot3.png

​​​​1.修改用户名密码都为tomcat修改tomcat-users.xml

cat tomcat-users.xml 

2.开启共享线程池:此选项默认是注释的,打开即可

name线程池名字,必须唯一。后面会用到。namePrefix="catalina-exec-"线程的名字前缀,用来标记线程名字的,这样每个线程就用这个前缀加上线程编号了minSpareThreads最小的保持活跃的线程数量,太小了就影响反应速度,太大了白白占用资源。maxThreads允许的最大线程池里的线程数量默认是200,大的并发应该设置的高一些,反正只是限制而已,不占用资源
注意:如果配置了一个Executor,则该属性的任何值集将被正确记录,但是它将被显示为-1,但此值是生效的。详情见

3.优化运行模式改:BIO模式为NIO模式并使用上面定义的线程池

1)bio默认的模式,性能非常低下,没有经过任何优化处理和支持.bio模式是和前面的就项目做兼容2)nio利用java的异步io护理技术,no blocking IO技术,为高并发高性能的应答模式(NIO).3)安装起来最困难,但是从操作系统级别来解决异步的IO问题,大幅度的提高性能.必须要安装apr和native,直接启动就支持apr利用java的异步io护理技术,no blocking IO技术.注:在控制台上(如图1所示)或者管理界面都可以看到,tomcat启动的通讯模式是bio的。

修改cat server.xml 一下内容

改为

参数解释:

#注意如果配置了一个Executor,则该属性的任何值集将被正确记录,但是它将被显示为-1,详情见:URIEncoding="utf-8"使得tomcat可以解析含有中文名的文件的urlexecutor="tomcatThreadPool" //使用上面定义的线程池connectionTimeout= //网络连接超时毫秒noCompressionUserAgents="gozilla, traviata" //对于以下的浏览器,不启用压缩compressionMinSize="4096"启用压缩的输出内容大小,这里面默认为2KBcompressableMimeType="text/html,text/xml,text/javascript,text/css,text/plain,application/json,application/x-javascript " 开启静态文件压缩 enableLookups="false" 关闭反向查询为了消除DNS查询对性能的影响我们可以关闭DNS查询acceptCount是当线程数达到maxThreads(可创建的最大线程数)后,后续请求会被放入一个等待队列,这个acceptCount是这个队列的大小,如果这个队列也满了,就直接refuse connection 即:acceptCount:Tomcat维护最大的对列数maxThreads :Tomcat可创建的最大线程数,上面已经使用了线程池所以这里指定的maxThreads会失效。maxConnections :最多能并发处理的连接请求compression="on"开启静态文件压缩protocol="org.apache.coyote.http11.Http11NioProtocol" //修改为NIO模式

4.tomcat7中maxConnections、maxThreads、acceptCount的含义及关系:

maxConnections当连接数达到最大值后,系统会继续接收连接但不会超过acceptCount的值acceptCount=300等待连接的队列数maxThreads Tomcat=800 线程池最多能起的线程数maxConnections=600 最大能并发处理的连接数比如某一瞬间的并发时1000,那么最终Tomcat的线程数将会是600,那么同时处理的将是600个请求,由于设置了acceptcount=300,所以剩余300进入队列“排队”,么有100个请求会被拒掉。

5.优化JVM 修改配置文件:catalina.sh

cat catalina.shexport JAVA_HOME=/opt/jdkexport PATH=${JAVA_HOME}/bin:$PATHJAVA_OPTS="-server -Djava.awt.headless=true -Dfile.encoding=UTF-8 -Xms2048m -Xmx2048m -Xmn768m -XX:MaxMetaspaceSize=192m -XX:+UseFastAccessorMethods -XX:+UseConcMarkSweepGC -XX:+CMSParallelRemarkEnabled -XX:+UseCMSInitiatingOccupancyOnly -XX:+ScavengeBeforeFullGC -XX:+CMSScavengeBeforeRemark -XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=/opt/tomcat/tomcat-1/dump"解释说明参考:https://www.cnblogs.com/dengyungao/p/7542604.htmlhttps://www.cnblogs.com/xbq8080/p/6417671.html

6.优化tomcat启动速度

打开vi /opt/jdk/jre/lib/security/java.security将securerandom.source=file:/dev/random 替换为 securerandom.source=file:/dev/./urandom

7.如果配置nginx做为静态资源处理可将AJP禁用

apache基金下的AJP是用来来做静态资源处理的,而这部分需要花费大量时间,当用nginx和tomcat做企业级集群的时候,需要禁用掉AJP协议,有关AJP问题请往下看-7.1

7.1AJP答疑解惑

虽说用了tomcat也有一段时间了,大伙都知道tomcat默认启动会有3个端口:8080端口为http协议端口,8005为管理端口,8009是AJP协议端口。但在每次在优化tomcat 服务时都会禁用8009端口。关于APJ协议网络博客上大多数回答的都是"ajp协议是tomcat为了动静资源处理分离时,通过该协议可以将css、js等静态资源请求转发到Apache的http服务器处理,提高并发量,在没有用到apache时可将其禁用。"那么在现实配置中并没有用到apache 而是用的nginx ,为什么不采用ajp协议呢而是采用http协议?我想大多数伙伴都有和我一样的困惑,最近偶尔看了一篇有关这个问题回答的博客,完美解决了心中的疑惑。下面就将博友的问题及相关回答原话摘抄下来以备留存!

6671bad8bb31b93186c09f64b4cb291cc49.jpg

博友回答:ajp13是一个二进制的TCP传输协议,相比HTTP这种纯文本的协议来说,效率和性能更高,也做了很多优化。显然,浏览器并不能直接支持AJP13协议,只支持HTTP协议。所以实际情况是,通过Apache的proxy_ajp模块进行反向代理,暴露成http协议给客户端访问。所以这么来看实际跟动静分离没一毛钱关系,你如果没做动静分离的设置,那么单纯反向代理AJP13协议也没太大的意义。其他支持AJP协议的代理服务器当然也可以用这种做法。但是实际情况是,支持AJP代理的服务器非常少,比如目前很火爆的Nginx就没这个模块。因此tomcat的配置大部分都是关闭AJP协议端口的,因为除了Apache之外别的http server几乎都不能反代AJP13协议,自然就没太大用处了.

有关nginx是否具有相关AJP支持的模块,经过一番搜索 发现nginx有ajp模块且是国人贡献的,(nginx本身不包含ajp模块)需要我们在github在:  上 单独下载,安装此模块需要重新编译nginx, 既然有为什么没有有人用, 是该模块与ajp通讯中存在某种不足还是ajp本身存在问题等,我们不得而知, 后续有机会在测试吧,今天就到这里!

转载于:https://my.oschina.net/wangyunlong/blog/3046211

你可能感兴趣的文章
如何用git reflog和git cherry-pick找回已删除的commit记录
查看>>
关于光驱和硬盘设为主盘的方法
查看>>
解决Linux中分区之后不能创建文件系统
查看>>
VB中的转义字符(回车、换行、Tab等)
查看>>
我的友情链接
查看>>
“Unable to execute dex: Multiple dex files define...” 解决办法
查看>>
redis数据类型
查看>>
CentOS开机简要流程
查看>>
第七周开发日志
查看>>
XenCenter7.5中创建网卡绑定
查看>>
软件测试,需要所有人的努力
查看>>
IO学习总结一
查看>>
Cenots 7.0编译安装libiconv-1.14时的故障
查看>>
如何一次创建大量用户
查看>>
dmidecode+awk搜集内存容量和插槽对应关系
查看>>
手工安装桌面环境;备忘下。
查看>>
mysql简单性能排查
查看>>
Photoshop制作一只可爱的卡通小鸟
查看>>
IBM HP DELL LENOVO服务器接入交换机网络规划
查看>>
Java程序运行时间计算
查看>>