高并发环境下如何优化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

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

 

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

在这段代码下面添加:

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

 

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

more TOMCAT_HOME/logs/catalina.out
2020-04-17 22:34:56 org.apache.catalina.core.AprLifecycleListener init
INFO: 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 init
INFO: APR capabilities: IPv6 [true], sendfile [true], accept filters [false], random [true].
2020-04-17 22:34:56 org.apache.catalina.core.AprLifecycleListener initializeSSL
INFO: OpenSSL successfully initialized (OpenSSL 1.0.1e 11 Feb 2013)
2020-04-17 22:34:58 AM org.apache.coyote.AbstractProtocol init
INFO: Initializing ProtocolHandler [“http-apr-8080”]
2020-04-17 22:34:58 AM org.apache.coyote.AbstractProtocol init
INFO: Initializing ProtocolHandler [“ajp-apr-8009”]
2020-04-17 22:34:58 AM org.apache.catalina.startup.Catalina load
INFO: 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反向查询

在<Connector port=”8080″ 中加入如下参数。

  enableLookups=”false 


 3.优化tomcat参数

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

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

上一篇:插入排序
下一篇:DJANGO-天天生鲜项目从0到1-008-列表页

相关推荐

  • 高并发,性能压力测试,你知道怎么做吗?

    一、 Jmeter简介 Apache JMeter是一款纯java编写负载功能测试和性能测试开源工具软件。相比Loadrunner而言,JMeter小巧轻便且免费,逐渐成为了主流的性能测试工具,是每个...

    3 个月前
  • 高并发量服务器架构

    高并发量服务器架构   转自: https://blog.csdn.net/daogla/article/details/72877153               ...

    6 个月前
  • 高并发计算QPS和测试

    日网站带宽 = PV/统计时间(换算到秒)*平均页面大小(单位KB)* 8 QPS是每秒HTTP请求数量如一个网页会同时请求多个页面元素,并发是同时访问问一个接口请求 (总PV数*80%)/(6小时秒...

    5 个月前
  • 高并发分布式架构的演进之路

    1.概述     本文以淘宝作为例子,介绍从一百个到千万级并发情况下服务端的架构的演进过程,同时列举出每个演进阶段会遇到的相关技术,让大家对架构的演进有一个整体的认知,文章最后汇总了一些架构设计...

    3 个月前
  • 高并发IO底层理解

    IO读写基础 应用层在进行read,write系统调用时,不是物理级别的读写,而是缓存的复制,进程缓冲区同内核缓冲区的缓存复制,底层数据交换是有由操作系统内核完成,控制内核缓冲与硬件(物理设备)之间数...

    4 个月前
  • 面试官问我:什么是高并发下的请求合并?

    这是why哥的第 76 篇原创文章从一道面试题说起前段时间一个在深圳的,两年经验的小伙伴出去面试了一圈,收割了几个大厂 offer 的同时,还总结了一下面试的过程中遇到的面试题,面试题有很多,文末的时...

    2 天前
  • 针对前端开发可重用组件并发布到NPM

    翻译:疯狂的技术宅原文:https://www.smashingmagazine.... 本文首发微信公众号:jingchengyideng欢迎关注,每天都给你推送新鲜的前端技术文章 摘要:本文...

    2 年前
  • 网络并发面试点

    一、网络 1.请写出osi五层协议,并写出你知道的三层的物理设备,和四层的协议 应用层、传输层、网络层、数据链路层、物理层 三层设备:路由器、三层交换机;四层协议:tcp协议/udp协议 2.请描述三...

    10 天前
  • 网站优化之Tomcat启用Gzip压缩

    博客链接:zjlbog Gzip概念 HTTP协议上的GZIP编码是一种用来改进WEB应用程序性能的技术。大流量的WEB站点常常使用GZIP压缩技术来让用户感受更快的速度。

    10 个月前
  • 系统的讲一讲 怎么设计一个高并发的系统

    那抽奖为例吧  首先是整体设计 抽奖一般不会作为独立的业务出现,而是作为某个系统的某个业务出现, 一般而言系统越简单 性能越好,为了降低业务耦合度可以把抽奖拆分为一个子系统来处理,也方便扩容。

    5 个月前