tomcat的一些优化
来源:互联网 发布:短信免费发送软件 编辑:程序博客网 时间:2024/06/04 19:48
一、tomcat有3种运行模式:
bio,nio,apr。默认是bio,性能非常低下,没有经过任何优化处理和支持。
nio它拥有比传统I/O操作(bio)更好的并发运行性能。
apr安装起来最困难,但是从操作系统级别来解决异步的IO问题,大幅度的提高性能。
所以我们推荐使用nio。如何配置?
<Connector port="8080" protocol="HTTP/1.1"
connectionTimeout="20000"
redirectPort="8443" />
改为
<Connector port="8080" protocol="org.apache.coyote.http11.Http11NioProtocol"
connectionTimeout="20000"
redirectPort="8443" />
二、使用线程池
在tomcat中每一个用户请求都是一个线程,所以可以使用线程池提高性能。
如何开启?
打开
<Executor name="tomcatThreadPool" namePrefix="catalina-exec-"
maxThreads="150" minSpareThreads="4"/>自定义的
<Connector executor="tomcatThreadPool" port="8080" protocol="org.apache.coyote.http11.Http11NioProtocol"
connectionTimeout="20000"
redirectPort="8443" />修改上面的Connector,追加一个executor属性
最佳实践:
<Executor name="tomcatThreadPool" namePrefix="catalina-exec-"
maxThreads="800" minSpareThreads="100" maxQueueSize="100" prestartminSpareThreads="true"/>prestartminSpareThreads表示是否在启动时开启minSpareThreads的线程数。
三、连接器
Connector是Tomcat接收请求的入口,每个Connector有自己专属的监听端口,连接器有HTTPConnector和AJP Connector。我们主要用http,因为我们不经过AJP,它是指客户端和tomcat之间还有一个apache服务器,我们一般用nginx和tomcat整合。所以重点关注HTTPConnector
最佳实践:
<Connector executor="tomcatThreadPool" port="8080" protocol="org.apache.coyote.http11.Http11NioProtocol"
connectionTimeout="20000"
redirectPort="8443"
enableLokkups="false" 禁用DNS查找,也是默认选项
maxPostSize="10485760"
URIEncoding="UTF-8" 不仅仅是Post请求
acceptCount="100" 当所有可能的请求处理线程都在使用时,传入连接请求的最大队列长度。当队列满时收到的任何请求将被拒绝。默认值是100
acceptorThreadCount="2"用于接受连接的线程的数量
disableUploadTimeout="true" 禁用上传超时
maxConnections="10000"最大连接数
SSLEnabled="false" 不打开SSL握手/加密/解密
/>
四、禁用AJP
注释掉这个Connector 即可
<!-- <Connector port="8009" protocol="AJP/1.3" redirectPort="8443" />-->
-------------------------------------------------
另外一个tomcat跑起来,就是一个JVM实例。所以也要配置JVM
Young年轻代
Young区被划分为三部分,Eden区和两个大小严格相同的Survivor区,其中,Survivor区间中,某一时刻只有其中一个是被使用的,另外一个留做垃圾收集时复制对象用,在Eden区间变满的时候, GC就会将存活的对象移到空闲的Survivor区间中,根据JVM的策略,在经过几次垃圾收集后,任然存活于Survivor的对象将被移动到Tenured区间。
Tenured 老年代
Tenured区主要保存生命周期长的对象,一般是一些老的对象,当一些对象在Young复制转移一定的次数以后,对象就会被转移到Tenured区,一般如果系统中用了application级别的缓存,缓存中的对象往往会被转移到这一区间。
Perm 永久代
Perm代主要保存class,method,filed对象,这部份的空间一般不会溢出,除非一次性加载了很多的类,不过在涉及到热部署的应用服务器的时候,有时候会遇到java.lang.OutOfMemoryError : PermGen space 的错误,造成这个错误的很大原因就有可能是每次都重新部署,但是重新部署后,类的class没有被卸载掉,这样就造成了大量的class对象保存在了perm中,这种情况下,一般重新启动应用服务器可以解决问题。
Virtual区:
最大内存和初始内存的差值,就是Virtual区。参数说明
1、 file.encoding 默认文件编码
2、 -Xmx1024m 设置JVM最大可用内存为1024MB
3、 -Xms1024m 设置JVM最小内存为1024m。此值可以设置与-Xmx相同,以避免每次垃圾回收完成后JVM重新分配内存。
4、 -XX:NewSize 设置年轻代大小
5、 XX:MaxNewSize 设置最大的年轻代大小
6、 -XX:PermSize 设置永久代大小
7、 -XX:MaxPermSize 设置最大永久代大小
8、 -XX:NewRatio=4:设置年轻代(包括Eden和两个Survivor区)与老年代的比值(除去永久代)。设置为4,则年轻代与老年代所占比值为1:4,年轻代占整个堆栈的1/5
9、 -XX:MaxTenuringThreshold=0:设置垃圾最大年龄,默认为:15。如果设置为0的话,则年轻代对象不经过Survivor区,直接进入年老代(用了application级别的缓,比如spring容器)。对于年老代比较多的应用,可以提高效率。如果将此值设置为一个较大值,则年轻代对象会在Survivor区进行多次复制,这样可以增加对象再年轻代的存活时间,增加在年轻代即被回收的概论。
10、 -XX:+DisableExplicitGC这个将会忽略手动调用GC的代码使得System.gc()的调用就会变成一个空调用,完全不会触发任何GC
windows修改bin/catalina.bat
set JAVA_OPTS=-Dfile.encoding=UTF-8 -server -Xms1024m -Xmx2048m -XX:NewSize=512m-XX:MaxNewSize=1024m -XX:PermSize=256m -XX:MaxPermSize=256m-XX:MaxTenuringThreshold=10 -XX:NewRatio=2 -XX:+DisableExplicitGC
linux修改bin/catalina.sh
JAVA_OPTS="-Dfile.encoding=UTF-8-server -Xms1024m -Xmx2048m -XX:NewSize=512m -XX:MaxNewSize=1024m-XX:PermSize=256m -XX:MaxPermSize=256m -XX:MaxTenuringThreshold=10-XX:NewRatio=2 -XX:+DisableExplicitGC"
- tomcat的一些优化
- tomcat一些优化的参数
- TOMCAT 5的一些优化笔记
- TOMCAT 5的一些优化笔记
- Tomcat的优化
- tomcat 的优化配置
- Tomcat的优化
- tomcat 的优化配置
- Tomcat的优化配置
- Tomcat的优化
- tomcat的优化
- 关于tomcat的优化
- tomcat的性能优化
- Tomcat的优化
- tomcat的性能优化
- Tomcat的优化经验
- Tomcat的优化处理
- Tomcat的优化经验
- 使用android手机抓取windows的密码hash的实践
- python机器学习4—2代码详解及修改
- NAS与SAN架构:如何比较这两个存储系统?
- Pointers on C——9 Strings, Characters, and Bytes.5
- git忽略已经被提交的文件
- tomcat的一些优化
- 使用ssh在远程linux服务器上安装oracle
- Android Studio将library手动打成jar包
- 多线程第二章(1)
- mysql 5.7中文乱码的解决
- Viewpager动画效果(二)
- java创建线程的三种方式
- 算法:最短路径问题
- assert与异常类型