Tomcat实战调优方案

编程

作者 | 牛迁迁

来源 | <a >https://blog.csdn.net/u010028869/article/details/51793821</a>

<p><font size="4">Tomcat的默认配置,性能并不是最优的,我们可以通过优化tomcat以此来提高网站的并发能力。提高Tomcat的性能可以分为两个方向。</font></p>

<p><br>

<font size="6" color="3399dd">服务器资源</font></p>

<p><font size="4">服务器所能提供CPU、内存、硬盘的性能对处理能力有决定性影响,所以说服务器性能牛B,Tomcat也不会太差。当然提高服务器的硬件配置,是需要大量RMB的支持的。所以不到万不得已不会采用这种方式,一般公司会采取下面这种通过优化配置,来提升Tomcat性能的方式。</font></p>

<p><br>

<font size="6" color="3399dd">优化配置</font></p>

<p><font size="4">优化配置之前,我们需要配置一个tomcat管理员账户,来登录查看Tomcat控制台提高的各种参数。</font></p>

<p><font size="4">在conf/ tomcat-users.xml下添加用户:</font></p>

<pre class="prettyprint" name="code"><code class="hljs xml has-numbering" onclick="mdcp.copyCode(event)" style="position: unset;"><span class="hljs-tag">&lt;<span class="hljs-title">role</span> <span class="hljs-attribute">rolename</span>=<span class="hljs-value">"manager"</span>/&gt;</span>

<span class="hljs-tag">&lt;<span class="hljs-title">role</span> <span class="hljs-attribute">rolename</span>=<span class="hljs-value">"manager-gui"</span>/&gt;</span>

<span class="hljs-tag">&lt;<span class="hljs-title">role</span> <span class="hljs-attribute">rolename</span>=<span class="hljs-value">"admin"</span>/&gt;</span>

<span class="hljs-tag">&lt;<span class="hljs-title">role</span> <span class="hljs-attribute">rolename</span>=<span class="hljs-value">"admin-gui"</span>/&gt;</span>

<span class="hljs-tag">&lt;<span class="hljs-title">user</span> <span class="hljs-attribute">username</span>=<span class="hljs-value">"tomcat"</span> <span class="hljs-attribute">password</span>=<span class="hljs-value">"tomcat"</span> <span class="hljs-attribute">roles</span>=<span class="hljs-value">"admin-gui,admin,manager-gui,manager"</span>/&gt;</span>

<div class="hljs-button {2}" data-title="复制"></div></code></pre>

<p><font size="4">启动tomcat,登录查看信息:<a href="http://127.0.0.1:8080/" rel="nofollow" data-token="ce0cb581ba74390e313dcebdf00c35de">http://127.0.0.1:8080/</a></font></p>

<p></p><center><img src="https://img-blog.csdn.net/20160630214059962" alt="这里写图片描述" title=""></center><p></p>

<p></p><center><img src="https://img-blog.csdn.net/20160630214123162" alt="这里写图片描述" title=""></center><p></p>

<p><br>

<font size="5" color="3399dd">tomcat的3种运行模式 <br>

<br></font></p>

<p><font size="4">tomcat的运行模式有3种:</font></p>

<p><font size="4"><span>bio:</span> <br>

默认的模式,性能非常低下,没有经过任何优化处理和支持.</font></p>

<p><font size="4"><span>nio:</span> <br>

nio(new I/O),是Java SE 1.4及后续版本提供的一种新的I/O操作方式(即java.nio包及其子包)。Java nio是一个基于缓冲区、并能提供非阻塞I/O操作的Java API,因此nio也被看成是non-blocking I/O的缩写。它拥有比传统I/O操作(bio)更好的并发运行性能。</font></p>

<p><font size="4"> <span>apr:</span> <br>

安装起来最困难,但是从操作系统级别来解决异步的IO问题,大幅度的提高性能.</font></p>

<p><br>

<font size="4"><span>启动NIO模式</span></font></p>

<p><font size="4">修改server.xml里的Connector节点,修改protocol为org.apache.coyote.http11.Http11NioProtocol</font></p>

<p></p><center><img src="https://img-blog.csdn.net/20160630215821451" alt="这里写图片描述" title=""></center><p></p>

<p></p><center><img src="https://img-blog.csdn.net/20160630215843296" alt="这里写图片描述" title=""></center><p></p>

<p><br>

<font size="5" color="3399dd">执行器优化(线程池)</font></p>

<p><font size="4">在tomcat中每一个用户请求都是一个线程,所以可以使用线程池提高性能。</font></p>

<p><font size="4">开启并且使用 <br>

配置: <br>

</font></p><center><img src="https://img-blog.csdn.net/20160630220030283" alt="这里写图片描述" title=""></center><p></p>

<p><font size="4">在Connector中指定使用共享线程池</font></p>

<p></p><center><img src="https://img-blog.csdn.net/20160630220049329" alt="这里写图片描述" title=""></center><p></p>

<p><font size="4">查看Tomcat控制台</font></p>

<p></p><center><img src="https://img-blog.csdn.net/20160630220118331" alt="这里写图片描述" title=""></center><p></p>

<p><font size="4"><span>Executor重要参数说明:</span></font></p>

<p><font size="4">name:共享线程池的名字。这是Connector为了共享线程池要引用的名字,该名字必须唯一。默认值:None;</font></p>

<p><font size="4">namePrefix:在JVM上,每个运行线程都可以有一个name 字符串。这一属性为线程池中每个线程的name字符串设置了一个前缀,Tomcat将把线程号追加到这一前缀的后面。默认值:tomcat-exec-;</font></p>

<p><font size="4">maxThreads:该线程池可以容纳的最大线程数。默认值:200;</font></p>

<p><font size="4">maxIdleTime:在Tomcat关闭一个空闲线程之前,允许空闲线程持续的时间(以毫秒为单位)。只有当前活跃的线程数大于minSpareThread的值,才会关闭空闲线程。默认值:60000(一分钟)。</font></p>

<p><font size="4">minSpareThreads:Tomcat应该始终打开的最小不活跃线程数。默认值:25。</font></p>

<p><font size="4">threadPriority:线程的等级。默认是Thread.NORM_PRIORITY</font></p>

<p><font size="4"><span>Connector重要参数说明:</span></font></p>

<p><font size="4">executor:表示使用该参数值对应的线程池;</font></p>

<p><font size="4">minProcessors:服务器启动时创建的处理请求的线程数;</font></p>

<p><font size="4">maxProcessors:最大可以创建的处理请求的线程数;</font></p>

<p><font size="4">acceptCount:指定当所有可以使用的处理请求的线程数都被使用时,可以放到处理队列中的请求数,超过这个数的请求将不予处理。</font></p>

<p><font size="4"><span>参数最佳实践</span> <br>

</font></p><center><img src="https://img-blog.csdn.net/20160630220320412" alt="这里写图片描述" title=""> <br>

<center><img src="https://img-blog.csdn.net/20160630220354284" alt="这里写图片描述" title=""></center></center><p></p>

<p><br></p>

<p><font size="5" color="3399dd">禁用AJP连接器</font></p>

<p><font size="4"><span>AJP(Apache JServer Protocol)</span> <br>

AJPv13协议是面向包的。WEB服务器和Servlet容器通过TCP连接来交互;为了节省SOCKET创建的昂贵代价,WEB服务器会尝试维护一个永久TCP连接到servlet容器,并且在多个请求和响应周期过程会重用连接。</font></p>

<p></p><center><img src="https://img-blog.csdn.net/20160630220542161" alt="这里写图片描述" title=""></center><p></p>

<p><font size="4">我们一般是使用Nginx+tomcat的架构,所以用不着AJP协议,所以把AJP连接器禁用。</font></p>

<p></p><center><img src="https://img-blog.csdn.net/20160630220556817" alt="这里写图片描述" title=""></center><p></p>

<p><font size="4">在管理界面中看不到ajp了: <br>

</font></p><center><img src="https://img-blog.csdn.net/20160630220626630" alt="这里写图片描述" title=""></center><p></p>

<p><br></p>

<hr>

<p><font size="4">完成上面几步对Tomcat的优化配置,你的Tomcat服务器并发量肯定会有大幅度的提升。这只是简单的配置,后续还会有针对JVM的专项介绍。JVM参数也是影响Tomcat性能的一个重要因素。</font></p> </div>

<link href="https://csdnimg.cn/release/phoenix/mdeditor/markdown_views-e9f16cbbc2.css" rel="stylesheet">

</div>

如果文章对您有帮助,请记得点赞关注哟~

欢迎大家关注我的公众号<情系IT>,每日推送技术文章供大家学习参考。

以上是 Tomcat实战调优方案 的全部内容, 来源链接: utcz.com/z/510414.html

回到顶部