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协议?我想大多数伙伴都有和我一样的困惑,最近偶尔看了一篇有关这个问题回答的博客,完美解决了心中的疑惑。下面就将博友的问题及相关回答原话摘抄下来以备留存!
博友回答: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本身存在问题等,我们不得而知, 后续有机会在测试吧,今天就到这里!