Tomcat并发优化方法介绍

Tomcat 常用运行模式有3种,分别为 bio,nio,apr.生产环境建议用apr,详细请看上一篇博文《Tomcat之——运行模式》

安装APR

[root@liuyazhuang ~]# yum -y install apr apr-devel openssl-devel
[root@liuyazhuang ~]# tar zxvf tomcat-native.tar.gz
[root@liuyazhuang ~]# cd tomcat-native-1.1.24-src/jni/native
[root@liuyazhuang native]# ./configure –with-apr=/usr/bin/apr-1-config –with-ssl=/usr/include/openssl/
[root@liuyazhuang 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=false
darwin=false
==============
CATALINA_OPTS=”-Djava.library.path=/usr/local/apr/lib” 

修改8080端对应的conf/server.xml

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

启动tomcat之后,查看日志

more TOMCAT_HOME/logs/catalina.out
Apr 07, 2017 11:49:12 AM org.apache.catalina.core.AprLifecycleListener init
INFO: Loaded APR based Apache Tomcat Native library 1.1.31 using APR version 1.3.9.
Apr 07, 2017 11:49:12 AM org.apache.catalina.core.AprLifecycleListener init
INFO: APR capabilities: IPv6 [true], sendfile [true], accept filters [false], random [true].
Apr 07, 2017 11:49:12 AM org.apache.catalina.core.AprLifecycleListener initializeSSL
INFO: OpenSSL successfully initialized (OpenSSL 1.0.1e 11 Feb 2013)
Apr 07, 2017 11:49:13 AM org.apache.coyote.AbstractProtocol init
INFO: Initializing ProtocolHandler [“http-apr-8080”]
Apr 07, 2017 11:49:13 AM org.apache.coyote.AbstractProtocol init
INFO: Initializing ProtocolHandler [“ajp-apr-8009”]
Apr 07, 2017 11:49:13 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.使用APR

具体安装操作,见文章开头部分

4.优化tomcat参数

<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″ /> 

总结

以上就是本文关于Tomcat并发优化方法介绍的全部内容,感兴趣的朋友可以继续参阅:优化Tomcat配置(内存、并发、缓存等方面)方法详解、浅谈Tomcat三种运行模式、Tomcat开启JMX服务方法介绍等,如有不足之处,欢迎留言指出,希望对大家有所帮助。

(0)

相关推荐

  • tomcat性能优化(性能总览)

    1.增加JVM堆内存大小 1)JVM通常不去调用垃圾回收器,所以服务器可以更多关注处理web请求,并要求尽快完成. 2)更改文件(catalina.sh) JAVA_OPTS="-Djava.awt.headless=true -Dfile.encoding=UTF-8 -server -Xms1024m -Xmx1024m -XX:NewSize=512m -XX:MaxNewSize=512m -XX:PermSize=512m -XX:MaxPermSize=512m -XX:+Disab

  • 详解SpringBoot初始教程之Tomcat、Https配置以及Jetty优化

    1.介绍 在SpringBoot的Web项目中,默认采用的是内置Tomcat,当然也可以配置支持内置的jetty,内置有什么好处呢? 1. 方便微服务部署. 2. 方便项目启动,不需要下载Tomcat或者Jetty 在目前的公司已经把内置的Jetty部署到了线上项目中,目前来说并无太大问题,内置就算有一些性能损失,但是通过部署多台机器, 其实也能够很轻松的解决这样的问题,内置容器之后其实是方便部署和迁移的. 1.1 优化策略 针对目前的容器优化,目前来说没有太多地方,需要考虑如下几个点 线程数

  • Spring Boot如何优化内嵌的Tomcat示例详解

    前言 本文主要给大家介绍了关于Spring Boot优化内嵌Tomcat的相关内容,分享出来供大家参考学习,下面话不多说了,来一看看详细的介绍吧. Spring Boot测试版本 <parent> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-parent</artifactId> <version>1.3.3.RELEASE&l

  • Tomcat并发优化方法介绍

    Tomcat 常用运行模式有3种,分别为 bio,nio,apr.生产环境建议用apr,详细请看上一篇博文<Tomcat之--运行模式> 安装APR [root@liuyazhuang ~]# yum -y install apr apr-devel openssl-devel [root@liuyazhuang ~]# tar zxvf tomcat-native.tar.gz [root@liuyazhuang ~]# cd tomcat-native-1.1.24-src/jni/nat

  • Java 处理高并发负载类优化方法案例详解

    java处理高并发高负载类网站中数据库的设计方法(java教程,java处理大量数据,java高负载数据) 一:高并发高负载类网站关注点之数据库 没错,首先是数据库,这是大多数应用所面临的首个SPOF.尤其是Web2.0的应用,数据库的响应是首先要解决的. 一般来说MySQL是最常用的,可能最初是一个mysql主机,当数据增加到100万以上,那么,MySQL的效能急剧下降.常用的优化措施是M-S(主-从)方式进行同步复制,将查询和操作和分别在不同的服务器上进行操作.我推荐的是M-M-Slaves

  • Tomcat开启JMX服务方法介绍

    Tomcat开启JMX服务很简单,只要在catalina.sh里添加: 1.CATALINA_OPTS="-Dcom.sun.management.jmxremote.port=8999 -Dcom.sun.management.jmxremote.ssl=false -Dcom.sun.management.jmxremote.authenticate=true 2." 端口号8999可以修改为未占用的端口即可. 修改JAVA_HOME/jre/lib/management目录下面的

  • MySQL性能全面优化方法参考,从CPU,文件系统选择到mysql.cnf参数优化

    本文整理了一些MySQL的通用优化方法,做个简单的总结分享,旨在帮助那些没有专职MySQL DBA的企业做好基本的优化工作,至于具体的SQL优化,大部分通过加适当的索引即可达到效果,更复杂的就需要具体分析了,可以参考本站的一些优化案例或者联系我们 1.硬件层相关优化 1.1.CPU相关 在服务器的BIOS设置中,可调整下面的几个配置,目的是发挥CPU最大性能,或者避免经典的NUMA问题: 1.选择Performance Per Watt Optimized(DAPC)模式,发挥CPU最大性能,跑

  • 解决SpringBoot内嵌Tomcat并发容量的问题

    一.SpringBoot内嵌Tomcat默认配置与优化 在做一个关于秒杀系统的模块,进行Jmeter压测性能的时候发现tomcat并发上不去,深入原因找到可供优化的地方,力求最大性能. 发现并发容器问题 对单接口进行6000线程压测,每个线程请求5次,线程在5秒内创建完毕,当进行一半的时候,已经出现了请求响应时间过大及其错误率达到了43%.这个并发容量对于配置比较好点的服务器相对来说有点弱. 深入SpringBoot底层了解原因 在SpringBoot官方文档中提到了关于元数据的配置 可以看到,

  • Go并发的方法之goroutine模型与调度策略

    目录 单进程操作系统 多线程/多进程操作系统 1:N模型 M:N模型 goroutine goroutine早期调度器 GMP 调度器设计策略 复用线程 并行 抢占 全局队列 学习刘丹冰<8小时转职golang工程师>,本节都是原理 单进程操作系统 早期的单进程操作系统,可以理解为只有一个时间轴,CPU顺序执行每一个进程/线程,这种顺序执行的方式,CPU同一时间智能处理一个指令,一个任务一个任务去处理 这样就会导致进程阻塞的话,CPU就会卡在当前进程,一直在等待,CPU就会浪费 多线程/多进程

  • 详解vue-cli + webpack 多页面实例配置优化方法

    本文介绍了vue-cli + webpack 多页面实例配置优化方法,分享给大家 vue+webpack是否有多页面 目前使用vue来做项目,估计大部分都是单页面(SPA)应用,一个轻型的 MVVM 框架,谁用了MVVM框架,就再也回不去JQ时代了,哈哈. 在手机端的项目,使用vue + vue-router是high到爆,不仅仅是我们开发的而言,最主要的用户体检也是开足马力,体检感杠杠的. 那问题来了,使用vue+webpack的单页面是爽到爆,那如果是多页面也能不能high到爆呢?那当然呀,

  • 同一台服务器(电脑)运行多个Tomcat的设置方法步骤

    大多人在Windows平台用的Tomcat都是免安装版本的,很自然想到复制几份目录,就是在同一个电脑上跑多个Tomcat服务了.实际上是不可以的.经过如下方法就可以实现统一台服务器(电脑)上运行多个Tomcat的目的了. 1.配置电脑"环境变量" 单个Tomcat的配置步骤不再重述,直接从配置第二个Tomcat开始.对电脑"环境变量"做调整,增加环境变量CATALINA_HOMEB,值为新的tomcat的地址. 2.更改Tomcat的 catalina.bat.st

  • 使用Post方式提交数据到Tomcat服务器的方法

    我在上一篇文章中介绍了 使用Get方式提交数据到Tomcat服务器,这篇将介绍使用Post方式提交数据到服务器,由于Post的方式和Get方式创建Web工程是一模一样的,只用几个地方的代码不同所以,我就直接介绍不同的地方,第一个不同点是,提交方式不同,所以修改LoginServlet.Java中的代码 package com.fyt.org; import java.io.IOException; import java.io.OutputStream; import java.io.Print

随机推荐