tomcat内存溢出,性能优化配置讲解
tomcat的并发优化配置详解
- 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命令修改的时候没有加上的话,就是两个参数一起改变.
- 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内存溢出,性能优化配置讲解相关推荐
- Tomcat工作原理 、JVM内存溢出及合理配置、配置文件详解
一 Tomcat工作原理 Server 要完成的任务很简单,就是要能够提供一个接口让其它程序能够访问到这个 Service 集合.同时要维护它所包含的所有 Service 的生命周期,包括如何初始化. ...
- Tomcat介绍及性能优化
一.Tomcat简单介绍: Sun公司创建了第一个Servlet容器,即Java Web Server,但JWS只是为了演示Servlet的相应功能,所以其性能很不稳定.与此同时,apache基金会组 ...
- Tomcat内存溢出解决办法
工作中,Tomcat内存溢出遇到两次了,就在网上找了些资料,将解决办法分享一下: 使用Java程序从数据库中查询大量的数据时出现异常: java.lang.OutOfMemoryError: Ja ...
- linux/centos 解决Tomcat内存溢出,centostomcat
2019独角兽企业重金招聘Python工程师标准>>> linux/centos 解决Tomcat内存溢出,centostomcat Tomcat本身不能直接在计算机上运行,需要依赖 ...
- java最大内存_JAVA:测试java虚拟机支持的最大内存 Xmx 值?Tomcat 内存溢出?
如下命令,即可测试:不断调整n的值,windows上32位的1.6x为: 1610m java -Xmx1610M -version java -Xmx1610m -version 网摘的tomcat ...
- Tomcat内存溢出原因分析
Tomcat内存溢出的原因 在生产环境中tomcat内存设置不好很容易出现内存溢出.造成内存溢出是不一样的,当然处理方式也不一样. 这里根据平时遇到的情况和相关资料进行一个总结.常见的一般会有下面三 ...
- Tomcat 内存溢出 详解
Tomcat 内存溢出 详解 JVM管理两种类型的内存,堆和非堆.堆是给开发人员用的上面说的就是,是在JVM启动时创建:非堆是留给JVM自己用的,用来存放类的信息的.它和堆不同,运行期内GC不会释放空 ...
- myeclipse tomcat内存溢出解决方法
为什么80%的码农都做不了架构师?>>> Tomcat直接启动正常,通过myeclipse启动tomcat内存溢出. MyEclipse启动Tomcat无视catalina.b ...
- gperftools mysql_利用 gperftools 对nginx mysql 内存管理 性能优化
利用 gperftools 对nginx 与 mysql 进行 内存管理 性能优化 降低负载. Gperftools 是由谷歌开发.官方对gperftools 的介绍为: These tools ...
- 视频教程-iOS底层原理班(下)/OC对象/关联对象/多线程/内存管理/性能优化-iOS
iOS底层原理班(下)/OC对象/关联对象/多线程/内存管理/性能优化 小码哥教育CEO,曾开发了2个iOS的流行开源框架(MJRefresh.MJExtension),目前在国内的使用率非常高. 李 ...
最新文章
- 容器 - concurrent包之ConcurrentHashMap
- ajax传向前台的html代码里又有事件的时候,绑定事件失败解决方法
- akka actor java_Akka:使用非默认构造函数在Scala中定义一个actor并从Java代码创建它 - java...
- 软件开发中 前台、中台、后台英文_中台产品那些事儿-啥是中台
- 关于Win7 内存变小处理方法
- java构造顺序_Java构造顺序
- mysql 5.7 pxc_mysql5.7 PXC安装记录
- JqGrid 列时间格式化
- mix2线刷开发板救砖_小米Mix 2(安卓8.0)一键救砖教程,轻松刷回官方系统
- java根据系统时间拼凑文件名字
- Redis深入浅出----演讲
- 为什么要使用 dns-prefetch
- python数组(矩阵)乘法(点乘、叉乘)
- linq判断集合中相同元素个数_高中数学:集合与函数概念知识点汇总
- JUC之集合安全问题
- 基本类型偏执-平行继承体系-令人着迷的暂时值域
- 线性代数中的线性方程组
- URAL 1903 Unidentified Ships
- 光学红外雨量IFR202型传感器应用于智慧灌溉智能家居地质灾害等行业
- 深入浅出XDL(一):Blaze推理引擎
热门文章
- 64位oracle plsql developer 下载地址,plsql developer
- plsql链接oracle64位报错,PLSQL developer 连接不上64位Oracle 的解决方法
- 深度学习图像分割(一)——PASCAL-VOC2012数据集(vocdevkit、Vocbenchmark_release)详细介绍
- PASCAL VOC2012数据集下载地址
- python vecm_用Eviews处理有关VARVECM模型的几个问题
- 雷达人体存在感应器,人体感知控制应用,为客户提供真实的感知方案
- 宝塔/Linux下自动更新maccms到github原版的最新版
- Arduino与Proteus仿真实例-AD5242数字电位器驱动仿真
- 手机WAPI功能检测常见问题分析(系列连载二):证书鉴别功能
- 机器翻译市场需求调研报告