tomcat的并发优化配置详解

  1. tomcat的并发优化,用于提高并发连接数

文件路径:../tomcat/conf/server.xml

<Connector port="80" protocol="HTTP/1.1" connectionTimeout="20000"

redirectPort="8443" URIEncoding="UTF-8"

minSpareThreads="100" maxSpareThreads="5000"

enableLookups="false" disableUploadTimeout="true"

acceptCount="50000"  maxThreads="50000"

maxProcessors="65534" minProcessors="100"

UseURIValidationHack="false"/>

其中各参数含义如下:

maxThreads  客户请求最大线程数
minSpareThreads    Tomcat初始化时创建的socket线程数,默认值为4
maxSpareThreads   Tomcat连接器的最大空闲socket线程数,默认值为50
minProcessors:最小空闲连接线程数,用于提高系统处理性能,默认值为10
maxProcessors:最大连接线程数,即:并发处理的最大请求数,默认值为75
acceptCount:允许的最大连接数,应大于等于 maxProcessors ,默认值为100
enableLookups:是否反查域名,取值为:true或false。为了提高处理能力,应设置为false
connectionTimeout:网络连接超时,单位:毫秒。设置为0表示永不超时,这样设置有隐患的。通常可设置为20000毫秒。
redirectPort        在需要基于安全通道的场合,把客户请求转发到基于SSL的redirectPort端口
URIEncoding    URL统一编码

disableUploadTimeout    上传时是否使用超时机制

2.JVM 调优

文件路径:../tomcat/bin/catalina.sh

在TOMCAT_HOME/bin/catalina.sh 增加如下语句,具体数值视情况而定。

# OS specific support.  $var _must_ be set to either true or false.

export JAVA_OPTS=" -server -Xms1024M -Xmx4096M -Xss1024k -XX:+AggressiveOpts -XX:+UseBiasedLocking -XX:PermSize=16M -XX:MaxPermSize=256M -XX:+DisableExplicitGC -XX:MaxTenuringThreshold=31 -XX:+UseConcMarkSweepGC -XX:+UseParNewGC  -XX:+CMSParallelRemarkEnabled -XX:+UseCMSCompactAtFullCollection -XX:LargePageSizeInBytes=128m  -XX:+UseFastAccessorMethods -XX:+UseCMSInitiatingOccupancyOnly -Djava.awt.headless=true "

参数详解

-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"

3.LINUX句柄数优化

文件路径:/etc/security/limits.d/90-nproc.conf

增加以下配置:

*       soft nofile 65534

*       hard nofile 65535

查看当前句柄数:ulimit -n

若修改未生效,退出当前远程,重新连接查看

默认情况下,linux最大文件句柄数为1024个。当你的服务器在大并发达到极限时,就会报出“too many open files”。

将文件句柄限制统一改成软32768,硬65536.配置文件最前面的是指domain,设置为星号代表全局,另外你也可以针对不同的用户做出不同的限制

注意.这个当中的硬限制是实际的限制,而软限制,是warnning限制,只会做出warning.其实ulimit命令本身就有分软硬设置,加-H就是硬,加-S就是软
默认显示的是软限制,如果运行ulimit命令修改的时候没有加上的话,就是两个参数一起改变.

  1. MYSQL性能优化

文件路径:/etc/my.cnf

在[mysqld]节点下,添加:max_connections=1000

修改并保存后,重启mysql生效: service mysql restart

MySQL的最大连接数,如果服务器的并发连接请求量比较大,建议调高此值,以增加并行连接数量,当然这建立在机器能支撑的情况下,因为如果连接数越多,介于MySQL会为每个连接提供连接缓冲区,就会开销越多的内存,所以要适当调整该值,不能盲目提高设值。可以过'conn%'通配符查看当前状态的连接数量,以定夺该值的大小。依照分配给mysql的内存大小,以及你的应用类型,是长连接还是短连接等多方面因素,一般8-16G内存,分配300-1000均可.

4.数据源优化

文件路径:/data/trustsec/tomcat6/webapps/ROOT/WEB-INF/classes/applicationContext-datasource.xml

<!-- 配置DBCP数据源 -->

<bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource">

<!-- <property name="driverClassName" value="oracle.jdbc.driver.OracleDriver" /> -->

<property name="driverClassName" value="com.mysql.jdbc.Driver" />

<property name="url" value="jdbc:mysql://localhost:3306/trustsec?characterEncoding=utf8" />

<property name="username" value="root" />

<property name="password" value="sheca" />

<!-- 最大连接数量  -->

<property name="maxActive" value="1000" />

<!-- 最大空闲连接  -->

<property name="maxIdle" value="250" />

<!-- 最小空闲连接  -->

<property name="minIdle" value="10" />

5.TCP用尽问题:

Caused by: com.mysql.jdbc.exceptions.jdbc4.MySQLNonTransientConnectionException: Could not create connection to database server. Attempted reconnect 3 times. Giving up.

at sun.reflect.GeneratedConstructorAccessor24.newInstance(Unknown Source)

at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:27)

at java.lang.reflect.Constructor.newInstance(Constructor.java:513)

at com.mysql.jdbc.Util.handleNewInstance(Util.java:406)

at com.mysql.jdbc.Util.getInstance(Util.java:381)

at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:984)

at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:956)

at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:926)

at com.mysql.jdbc.ConnectionImpl.createNewIO(ConnectionImpl.java:2270)

at com.mysql.jdbc.ConnectionImpl.<init>(ConnectionImpl.java:723)

at com.mysql.jdbc.JDBC4Connection.<init>(JDBC4Connection.java:46)

at sun.reflect.GeneratedConstructorAccessor20.newInstance(Unknown Source)

at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:27)

at java.lang.reflect.Constructor.newInstance(Constructor.java:513)

at com.mysql.jdbc.Util.handleNewInstance(Util.java:406)

at com.mysql.jdbc.ConnectionImpl.getInstance(ConnectionImpl.java:302)

at com.mysql.jdbc.NonRegisteringDriver.connect(NonRegisteringDriver.java:282)

at org.apache.commons.dbcp.DriverConnectionFactory.createConnection(DriverConnectionFactory.java:38)

at org.apache.commons.dbcp.PoolableConnectionFactory.makeObject(PoolableConnectionFactory.java:582)

at org.apache.commons.pool.impl.GenericObjectPool.borrowObject(GenericObjectPool.java:1148)

at org.apache.commons.dbcp.AbandonedObjectPool.borrowObject(AbandonedObjectPool.java:79)

at org.apache.commons.dbcp.PoolingDataSource.getConnection(PoolingDataSource.java:106)

at org.apache.commons.dbcp.BasicDataSource.getConnection(BasicDataSource.java:1044)

at org.springframework.orm.hibernate3.LocalDataSourceConnectionProvider.getConnection(LocalDataSourceConnectionProvider.java:81)

at org.hibernate.jdbc.ConnectionManager.openConnection(ConnectionManager.java:446)

... 12 more

Caused by: com.mysql.jdbc.exceptions.jdbc4.CommunicationsException: Communications link failure

Last packet sent to the server was 0 ms ago.

at sun.reflect.GeneratedConstructorAccessor22.newInstance(Unknown Source)

at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:27)

at java.lang.reflect.Constructor.newInstance(Constructor.java:513)

at com.mysql.jdbc.Util.handleNewInstance(Util.java:406)

at com.mysql.jdbc.SQLError.createCommunicationsException(SQLError.java:1074)

at com.mysql.jdbc.MysqlIO.<init>(MysqlIO.java:335)

at com.mysql.jdbc.ConnectionImpl.createNewIO(ConnectionImpl.java:2194)

... 28 more

Caused by: java.net.NoRouteToHostException: Cannot assign requested address

at java.net.PlainSocketImpl.socketConnect(Native Method)

at java.net.PlainSocketImpl.doConnect(PlainSocketImpl.java:351)

at java.net.PlainSocketImpl.connectToAddress(PlainSocketImpl.java:213)

at java.net.PlainSocketImpl.connect(PlainSocketImpl.java:200)

at java.net.SocksSocketImpl.connect(SocksSocketImpl.java:366)

at java.net.Socket.connect(Socket.java:529)

at java.net.Socket.connect(Socket.java:478)

at java.net.Socket.<init>(Socket.java:375)

at java.net.Socket.<init>(Socket.java:218)

at com.mysql.jdbc.StandardSocketFactory.connect(StandardSocketFactory.java:253)

at com.mysql.jdbc.MysqlIO.<init>(MysqlIO.java:284)

解决方法:

vim /etc/sysctl.conf,编辑完成后 sysctl -p 使其生效

1、net.ipv4.tcp_tw_reuse = 1
表示开启重用。允许将TIME-WAIT sockets重新用于新的TCP连接,默认为0,表示关闭;修改为1,释放TIME_WAIT端口给新连接使用

2、net.ipv4.tcp_fin_timeout = 15
表示如果套接字由本端要求关闭,这个参数决定了它保持在FIN-WAIT-2状态的时间。默认为60秒

3、net.ipv4.tcp_tw_recycle = 1
表示开启TCP连接中TIME-WAIT sockets的快速回收,默认为0,表示关闭。

tomcat内存溢出,性能优化配置讲解相关推荐

  1. Tomcat工作原理 、JVM内存溢出及合理配置、配置文件详解

    一 Tomcat工作原理 Server 要完成的任务很简单,就是要能够提供一个接口让其它程序能够访问到这个 Service 集合.同时要维护它所包含的所有 Service 的生命周期,包括如何初始化. ...

  2. Tomcat介绍及性能优化

    一.Tomcat简单介绍: Sun公司创建了第一个Servlet容器,即Java Web Server,但JWS只是为了演示Servlet的相应功能,所以其性能很不稳定.与此同时,apache基金会组 ...

  3. Tomcat内存溢出解决办法

    工作中,Tomcat内存溢出遇到两次了,就在网上找了些资料,将解决办法分享一下:   使用Java程序从数据库中查询大量的数据时出现异常: java.lang.OutOfMemoryError: Ja ...

  4. linux/centos 解决Tomcat内存溢出,centostomcat

    2019独角兽企业重金招聘Python工程师标准>>> linux/centos 解决Tomcat内存溢出,centostomcat Tomcat本身不能直接在计算机上运行,需要依赖 ...

  5. java最大内存_JAVA:测试java虚拟机支持的最大内存 Xmx 值?Tomcat 内存溢出?

    如下命令,即可测试:不断调整n的值,windows上32位的1.6x为: 1610m java -Xmx1610M -version java -Xmx1610m -version 网摘的tomcat ...

  6. Tomcat内存溢出原因分析

    Tomcat内存溢出的原因  在生产环境中tomcat内存设置不好很容易出现内存溢出.造成内存溢出是不一样的,当然处理方式也不一样. 这里根据平时遇到的情况和相关资料进行一个总结.常见的一般会有下面三 ...

  7. Tomcat 内存溢出 详解

    Tomcat 内存溢出 详解 JVM管理两种类型的内存,堆和非堆.堆是给开发人员用的上面说的就是,是在JVM启动时创建:非堆是留给JVM自己用的,用来存放类的信息的.它和堆不同,运行期内GC不会释放空 ...

  8. myeclipse tomcat内存溢出解决方法

    为什么80%的码农都做不了架构师?>>>    Tomcat直接启动正常,通过myeclipse启动tomcat内存溢出. MyEclipse启动Tomcat无视catalina.b ...

  9. gperftools mysql_利用 gperftools 对nginx mysql 内存管理 性能优化

    利用 gperftools 对nginx 与 mysql  进行 内存管理  性能优化 降低负载. Gperftools 是由谷歌开发.官方对gperftools 的介绍为: These tools ...

  10. 视频教程-iOS底层原理班(下)/OC对象/关联对象/多线程/内存管理/性能优化-iOS

    iOS底层原理班(下)/OC对象/关联对象/多线程/内存管理/性能优化 小码哥教育CEO,曾开发了2个iOS的流行开源框架(MJRefresh.MJExtension),目前在国内的使用率非常高. 李 ...

最新文章

  1. 容器 - concurrent包之ConcurrentHashMap
  2. ajax传向前台的html代码里又有事件的时候,绑定事件失败解决方法
  3. akka actor java_Akka:使用非默认构造函数在Scala中定义一个actor并从Java代码创建它 - java...
  4. 软件开发中 前台、中台、后台英文_中台产品那些事儿-啥是中台
  5. 关于Win7 内存变小处理方法
  6. java构造顺序_Java构造顺序
  7. mysql 5.7 pxc_mysql5.7 PXC安装记录
  8. JqGrid 列时间格式化
  9. mix2线刷开发板救砖_小米Mix 2(安卓8.0)一键救砖教程,轻松刷回官方系统
  10. java根据系统时间拼凑文件名字
  11. Redis深入浅出----演讲
  12. 为什么要使用 dns-prefetch
  13. python数组(矩阵)乘法(点乘、叉乘)
  14. linq判断集合中相同元素个数_高中数学:集合与函数概念知识点汇总
  15. JUC之集合安全问题
  16. 基本类型偏执-平行继承体系-令人着迷的暂时值域
  17. 线性代数中的线性方程组
  18. URAL 1903 Unidentified Ships
  19. 光学红外雨量IFR202型传感器应用于智慧灌溉智能家居地质灾害等行业
  20. 深入浅出XDL(一):Blaze推理引擎

热门文章

  1. 64位oracle plsql developer 下载地址,plsql developer
  2. plsql链接oracle64位报错,PLSQL developer 连接不上64位Oracle 的解决方法
  3. 深度学习图像分割(一)——PASCAL-VOC2012数据集(vocdevkit、Vocbenchmark_release)详细介绍
  4. PASCAL VOC2012数据集下载地址
  5. python vecm_用Eviews处理有关VARVECM模型的几个问题
  6. 雷达人体存在感应器,人体感知控制应用,为客户提供真实的感知方案
  7. 宝塔/Linux下自动更新maccms到github原版的最新版
  8. Arduino与Proteus仿真实例-AD5242数字电位器驱动仿真
  9. 手机WAPI功能检测常见问题分析(系列连载二):证书鉴别功能
  10. 机器翻译市场需求调研报告