来自:冰河技术

写在前面

Tomcat作为最常用的Java Web服务器,随着并发量越来越高,Tomcat的性能会急剧下降,那有没有什么方法来优化Tomcat在高并发环境下的性能呢?

Tomcat运行模式

Tomcat的运行模式有3种。

1.bio模式

默认的模式,性能非常低下,没有经过任何优化处理和支持。

2.nio模式

利用java的异步io护理技术,noblocking IO技术。要想运行在该模式下,则直接修改server.xml里的Connector节点,修改protocol为如下配置。

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

重启Tomcat后,就可以生效。

3.apr模式

安装起来最困难,但是从操作系统级别来解决异步的IO问题,大幅度的提高性能。此种模式下,必须要安装apr和native,直接启动就支持apr。如nio修改模式,修改protocol为org.apache.coyote.http11.Http11AprProtocol,如下所示。

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

Tomcat并发优化

安装APR

[root@binghe ~]# yum -y install apr apr-devel openssl-devel[root@binghe ~]# tar zxvf tomcat-native.tar.gz[root@binghe ~]# cd tomcat-native-1.1.24-src/jni/native[root@binghe native]# ./configure --with-apr=/usr/bin/apr-1-config --with-ssl=/usr/include/openssl/[root@binghe native]# make && make install

安装完成之后 会出现如下提示信息

Libraries have been installed in:/usr/local/apr/lib

安装成功后还需要对tomcat设置环境变量,方法是在catalina.sh文件中增加1行:

在这段代码下面添加:

============# OS specific support.  $var _must_ be set to either true or false.cygwin=falsedarwin=false==============CATALINA_OPTS=”-Djava.library.path=/usr/local/apr/lib”

修改server.xml的配置,如下所示。

protocol=”org.apache.coyote.http11.Http11AprProtocol”

启动tomcat之后,查看日志,如下所示。

more TOMCAT_HOME/logs/catalina.out2020-04-17 22:34:56 org.apache.catalina.core.AprLifecycleListener initINFO: Loaded APR based Apache Tomcat Native library 1.1.31 using APR version 1.3.9.2020-04-17 22:34:56 org.apache.catalina.core.AprLifecycleListener initINFO: APR capabilities: IPv6 [true], sendfile [true], accept filters [false], random [true].2020-04-17 22:34:56 org.apache.catalina.core.AprLifecycleListener initializeSSLINFO: OpenSSL successfully initialized (OpenSSL 1.0.1e 11 Feb 2013)2020-04-17 22:34:58 AM org.apache.coyote.AbstractProtocol initINFO: Initializing ProtocolHandler [“http-apr-8080”]2020-04-17 22:34:58 AM org.apache.coyote.AbstractProtocol initINFO: Initializing ProtocolHandler [“ajp-apr-8009”]2020-04-17 22:34:58 AM org.apache.catalina.startup.Catalina loadINFO: Initialization processed in 1125 ms

Tomcat优化

1.JVM 调优

在TOMCAT_HOME/bin/catalina.sh 增加如下语句,具体数值视情况而定。
添加到上面CATALINA_OPTS的后面即可,如下所示。

JAVA_OPTS=-Xms512m -Xmx1024m -XX:PermSize=512M -XX:MaxNewSize=1024m -XX:MaxPermSize=1024m

参数详解

  • -Xms:JVM初始化堆内存大小。

  • -Xmx:JVM堆的最大内存。

  • -Xss:线程栈大小。

  • -XX:PermSize:JVM非堆区初始内存分配大小。

  • -XX:MaxPermSize:JVM非堆区最大内存。

建议和注意事项:

-Xms和-Xmx选项设置为相同堆内存分配,以避免在每次GC 后调整堆的大小,堆内存建议占内存的60%~80%;非堆内存是不可回收内存,大小视项目而定;线程栈大小推荐256k。

32G内存配置如下:

JAVA_OPTS=-Xms20480m -Xmx20480m -Xss1024K -XX:PermSize=512m -XX:MaxPermSize=2048m

2.关闭DNS反向查询

enableLookups=”false”

3.优化tomcat参数

在server.xml文件中进行如下配置。

<Connector port=”8080″protocol=”org.apache.coyote.http11.Http11AprProtocol”connectionTimeout=”20000″ //链接超时时长redirectPort=”8443″maxThreads=”500″//设定处理客户请求的线程的最大数目,决定了服务器可以同时响应客户请求的数,默认200minSpareThreads=”20″//初始化线程数,最小空闲线程数,默认为10acceptCount=”1000″ //当所有可以使用的处理请求的线程数都被使用时,可以被放到处理队列中请求数,请求数超过这个数的请求将不予处理,默认100enableLookups=”false”URIEncoding=”UTF-8″ />

写在最后

最后,附上并发编程需要掌握的核心技能知识图,祝大家在学习并发编程时,少走弯路。

特别推荐一个分享架构+算法的优质内容,还没关注的小伙伴,可以长按关注一下:

长按订阅更多精彩▼

如有收获,点个在看,诚挚感谢

tomcat 请求超时_高并发环境下如何优化Tomcat性能?看完我懂了!相关推荐

  1. 高并发环境下如何优化Tomcat性能?看完我懂了!

    来自:冰河技术 写在前面 Tomcat作为最常用的Java Web服务器,随着并发量越来越高,Tomcat的性能会急剧下降,那有没有什么方法来优化Tomcat在高并发环境下的性能呢? Tomcat运行 ...

  2. oom 如何避免 高并发_【高并发】高并发环境下如何防止Tomcat内存溢出?看完我懂了!!...

    [高并发]高并发环境下如何防止Tomcat内存溢出?看完我懂了!! 发布时间:2020-04-19 00:47, 浏览次数:126 , 标签: Tomcat 写在前面 随着系统并发量越来越高,Tomc ...

  3. java currenttimemillis 效率_高并发场景下System.currentTimeMillis()的性能问题的优化

    前言 System.currentTimeMillis()的调用比new一个普通对象要耗时的多(具体耗时高出多少我也不知道,不过听说在100倍左右),然而该方法又是一个常用方法,有时不得不使用,比如生 ...

  4. div固定大小文字溢出自动缩小_【高并发】高并发环境下如何防止Tomcat内存溢出?看完我懂了!!

    写在前面 随着系统并发量越来越高,Tomcat所占用的内存就会越来越大,如果对Tomcat的内存管理不当,则可能会引发Tomcat内存溢出的问题,那么,如何防止Tomcat内存溢出呢?我们今天就来一起 ...

  5. java支付宝支付_Java 高并发环境下的性能优化,揭秘支付宝技术内幕

    前言 高并发经常会发生在有大活跃用户量,用户高聚集的业务场景中,如:秒杀活动,定时领取红包等. 为了让业务可以流畅的运行并且给用户一个好的交互体验,我们需要根据业务场景预估达到的并发量等因素,来设计适 ...

  6. 【高并发】高并发环境下构建缓存服务需要注意哪些问题?我和阿里P9聊了很久!...

    写在前面 周末,跟阿里的一个朋友(去年晋升为P9了)聊了很久,聊的内容几乎全是技术,当然了,两个技术男聊得最多的话题当然就是技术了.从基础到架构,从算法到AI,无所不谈.中间又穿插着不少天马行空的想象 ...

  7. 高并发环境下,6个构建缓存服务需要注意的问题

    摘要:高并发环境下如何构建缓存服务,你知道吗? 本文分享自华为云社区<[高并发]高并发环境下构建缓存服务需要注意哪些问题?>,作者:冰 河. 缓存特征 (1)命中率:命中数/(命中数+没有 ...

  8. 【高并发】高并发环境下构建缓存服务需要注意哪些问题?我和阿里P9聊了很久!

    写在前面 周末,跟阿里的一个朋友(去年晋升为P9了)聊了很久,聊的内容几乎全是技术,当然了,两个技术男聊得最多的话题当然就是技术了.从基础到架构,从算法到AI,无所不谈.中间又穿插着不少天马行空的想象 ...

  9. 【高并发】在高并发环境下该如何构建应用级缓存?

    来自:冰河技术 写在前面 随着我们的系统负载越来越高,系统的性能就会有所下降,此时,我们可以很自然地想到使用缓存来解决数据读写性能低下的问题.但是,立志成为资深架构师的你,是否能够在高并发环境下合理并 ...

最新文章

  1. 由浅入深C A S,小白也能与BAT面试官对线
  2. 过拟合和欠拟合以及相对应的解决办法
  3. NES模拟器开发-CPU笔记
  4. UTC时间戳-时间字符串之间互相转化
  5. 用于从文件读取/写入字符串的新JDK 11文件方法
  6. vue-router之 beforeRouteEnter
  7. 湖南省普通高等学校计算机应用水平,湖南省普通高等学校非计算机专业学生计算机应用水平二级考试大纲...
  8. android自助终端界面_滨州市人社自助服务终端上线新功能可查询个人在山东省所有地市的参保信息...
  9. Windows终端中的自定义终端和用户界面(UI)
  10. Oracle用户和权限管理
  11. 一步步实现SDDC--多角色服务器部署
  12. 如何评价,为何程序员被骂立马就辞职呢?
  13. 二叉树 BinaryTree (先序、中序、后序遍历 节点查找、插入、删除 完整类) Java数据结构与算法
  14. 盒模型bug的解决方法
  15. 售假获刑后他又被淘宝告上法庭,杭州互联网法院当庭宣判
  16. 番茄时间管理法——学会专注
  17. 分享一些光纤模块接口类型有用信息给大家
  18. 2007版本中国网络新秀之七剑下天山
  19. App Store2016年最新审核规则
  20. 《幸福就在你身边》第九课、确信自己有好命【哈佛大学幸福课精华】

热门文章

  1. 【英语学习】【WOTD】countermand 释义/词源/示例
  2. Intel超线程技术 Hyper-Threading Technology (2) - 早期实现 - 概述
  3. C#实现图(Graph)
  4. fastjson的一些常见用法
  5. Project Euler 001-006 解法总结
  6. zookeeper中展示所有节点_zookeeper工作原理与节点使用
  7. html列表逆序输出,JS实现倒序输出的几种常用方法示例
  8. java 限流熔断_SpringCloud Alibaba微服务实战五 - 限流熔断
  9. A summary of OpenGL ES 3.1 demos and samples
  10. iOS开发 - iOS10隐私数据访问问题