zoukankan      html  css  js  c++  java
  • Tomcat 优化配置

    export JAVA_OPTS="
    -server
    -Xms2000M
    -Xmx2000M
    -Xss512K
    -XX:+AggressiveOpts
    -XX:+UseBiasedLocking
    -XX:PermSize=32M
    -XX:MaxPermSize=512M
    -XX:+DisableExplicitGC
    -XX:MaxTenuringThreshold=31
    -XX:+UseConcMarkSweepGC
    -XX:+UseParNewGC
    -XX:+CMSParallelRemarkEnabled
    -XX:+UseCMSCompactAtFullCollection
    -XX:LargePageSizeInBytes=128M
    -XX:+UseFastAccessorMethods
    -XX:+UseCMSInitiatingOccupancyOnly
    -Djava.awt.headless=true
    "
    说明:
    1、-server
    Tomcat默认是以一种叫java –client的模式来运行的,server即意味着你的tomcat是以真实的production的模式在运行的,这也就意味着你的tomcat以server模式运行时将拥有:更大、更高的并发处理能力,更快更强捷的JVM垃圾回收机制,可以获得更多的负载与吞吐量...
    2、-Xmx -Xms
    JVM内存设置,把最小内存Xms与最大内存Xmx两个值设成一样是最优的做法。
    3、-Xmn
    设置年轻代大小为512m。整个堆大小=年轻代大小 + 年老代大小 + 持久代大小。持久代一般固定大小为64m,所以增大年轻代后,将会减小年老代大小。此值对系统性能影响较大,Sun官方推荐配置为整个堆的3/8。
    4、-Xss
    指设定每个线程的堆栈大小。这个就要依据你的程序,看一个线程大约需要占用多少内存,可能会有多少线程同时运行等。一般不易设置超过1M,要不然容易出现out ofmemory。
    5、-XX:+AggressiveOpts
    作用如其名(aggressive),启用这个参数,则每当JDK版本升级时,你的JVM都会使用最新加入的优化技术(如果有的话)。
    6、-XX:+UseBiasedLocking
    启用一个优化了的线程锁,我们知道在我们的appserver,每个http请求就是一个线程,有的请求短有的请求长,就会有请求排队的现象,甚至还会出现线程阻塞,这个优化了的线程锁使得你的appserver内对线程处理自动进行最优调配。
    7、-XX:PermSize -XX:MaxPermSize
    JVM使用-XX:PermSize设置非堆内存初始值,默认是物理内存的1/64;在数据量的很大的文件导出时,一定要把这两个值设置上,否则会出现内存溢出的错误。由XX:MaxPermSize设置最大非堆内存的大小,默认是物理内存的1/4。那么,如果是物理内存4GB,那么64分之一就是64MB,这就是PermSize默认值,也就是永生代内存初始大小;四分之一是1024MB,这就是MaxPermSize默认大小。
    8、-XX:+DisableExplicitGC
    在程序代码中不允许有显示的调用”System.gc()”。
    9、-XX:MaxTenuringThreshold
    设置垃圾最大年龄。如果设置为0的话,则年轻代对象不经过Survivor区,直接进入年老代。对于年老代比较多的应用,可以提高效率。如果将此值设置为一个较大值,则年轻代对象会在Survivor区进行多次复制,这样可以增加对象在年轻代的存活时间,增加在年轻代即被回收的概率。这个值的设置是根据本地的JProfiler监控后得到的一个理想的值,不能一概而论原搬照抄。
    10、-XX:+UseConcMarkSweepGC
    即CMS gc,这一特性只有jdk1.5即后续版本才具有的功能,它使用的是gc估算触发和heap占用触发。我们知道频频繁的GC会造面JVM的大起大落从而影响到系统的效率,因此使用了CMS GC后可以在GC次数增多的情况下,每次GC的响应时间却很短,比如说使用了CMS GC后经过JProfiler的观察,GC被触发次数非常多,而每次GC耗时仅为几毫秒。
    11、-XX:+UseParNewGC
    对年轻代采用多线程并行回收,这样收得快。
    12、-XX:+CMSParallelRemarkEnabled
    在使用UseParNewGC 的情况下, 尽量减少 mark 的时间。
    13、-XX:+UseCMSCompactAtFullCollection
    在使用concurrent gc 的情况下, 防止 memoryfragmention, 对live object 进行整理, 使 memory 碎片减少。
    14、-XX:LargePageSizeInBytes
    指定 Java heap的分页页面大小。
    15、-XX:+UseFastAccessorMethods
    get,set 方法转成本地代码。
    16、-XX:+UseCMSInitiatingOccupancyOnly
    指示只有在 oldgeneration 在使用了初始化的比例后concurrent collector 启动收集。
    17、-XX:CMSInitiatingOccupancyFraction
    CMSInitiatingOccupancyFraction,这个参数设置有很大技巧,基本上满足(Xmx-Xmn)*(100- CMSInitiatingOccupancyFraction)/100>=Xmn就不会出现promotion failed。在我的应用中Xmx是6000,Xmn是512,那么Xmx-Xmn是5488兆,也就是年老代有5488 兆,CMSInitiatingOccupancyFraction=90说明年老代到90%满的时候开始执行对年老代的并发垃圾回收(CMS),这时还 剩10%的空间是5488*10%=548兆,所以即使Xmn(也就是年轻代共512兆)里所有对象都搬到年老代里,548兆的空间也足够了,所以只要满 足上面的公式,就不会出现垃圾回收时的promotion failed;因此这个参数的设置必须与Xmn关联在一起。
    18、-Djava.awt.headless=true
    这个参数一般我们都是放在最后使用的,这全参数的作用是这样的,有时我们会在我们的J2EE工程中使用一些图表工具如:jfreechart,用于在web网页输出GIF/JPG等流,在winodws环境下,一般我们的app server在输出图形时不会碰到什么问题,但是在linux/unix环境下经常会碰到一个exception导致你在winodws开发环境下图片显示的好好可是在linux/unix下却显示不出来,因此加上这个参数以免避这样的情况出现。


    <Connector port="8080" protocol="HTTP/1.1"
    connectionTimeout="20000"
    redirectPort="8443"
    URIEncoding="UTF-8"
    minSpareThreads="25"
    maxSpareThreads="75"
    enableLookups="false"
    disableUploadTimeout="true"
    acceptCount="300"
    maxThreads="300"
    maxProcessors="2000"
    minProcessors="5"
    useURIValidationHack="false"
    compression="on"
    compressionMinSize="2048"
    compressableMimeType="text/html,text/xml,text/javascript,text/css,text/plain"
    />
    说明:
    1、URIEncoding="UTF-8"
    使得tomcat可以解析含有中文的URL。
    2、minSpareThreads="25"
    最小备用线程数,tomcat启动时的初始化的线程数。
    3、maxSpareThreads="75"
    maxSpareThreads 的意思就是如果空闲状态的线程数多于设置的数目,则将这些线程中止,减少这个池中的线程总数。
    4、enableLookups="false"
    为了消除DNS查询对性能的影响我们可以关闭DNS查询,这个功效和Apache中的HostnameLookups一样,设为关闭。
    5、disableUploadTimeout="true"
    类似于Apache中的keeyalive一样。
    6、acceptCount="300"
    acceptCount是当线程数达到maxThreads后,后续请求会被放入一个等待队列,这个acceptCount是这个队列的大小,如果这个队列也满了,就直接refuse connection。
    7、maxThreads="300"
    maxThreads Tomcat使用线程来处理接收的每个请求。这个值表示Tomcat可创建的最大的线程数,即最大并发数。
    8、maxProcessors="2000" minProcessors="5"
    在 Java中线程是程序运行时的路径,是在一个程序中与其它控制线程无关的、能够独立运行的代码段。它们共享相同的地址空间。多线程帮助程序员写出CPU最 大利用率的高效程序,使空闲时间保持最低,从而接受更多的请求。通常Windows是1000个左右,Linux是2000个左右。
    9、useURIValidationHack="false"
    对一些url检查。
    10、compression="on" compressionMinSize="2048" compressableMimeType="text/html,text/xml,text/javascript,text/css,text/plain"
    HTTP 压缩可以大大提高浏览网站的速度,它的原理是,在客户端请求网页后,从服务器端将网页文件压缩,再下载到客户端,由客户端的浏览器负责解压缩并浏览。相对于普通的浏览过程HTML,CSS,Javascript , Text ,它可以节省40%左右的流量。更为重要的是,它可以对动态生成的,包括CGI、PHP , JSP , ASP , Servlet,SHTML等输出的网页也能进行压缩,压缩效率惊人。
    compression="on" 打开压缩功能
    compressionMinSize="2048" 启用压缩的输出内容大小,这里面默认为2KB
    compressableMimeType="text/html,text/xml" 压缩类型

  • 相关阅读:
    String类中常用的操作
    android 界面布局 很好的一篇总结[转]
    LeetCode Top 100 Liked Questions in Golang(updating...)
    春招(实习生招聘) 总结
    Tinywebserver:一个简易的web服务器
    Tinychatserver: 一个简易的命令行群聊程序
    Tinyshell: 一个简易的shell命令解释器
    LeetCode169 Majority Element, LintCode47 Majority Number II, LeetCode229 Majority Element II, LintCode48 Majority Number III
    LeetCode136 Single Number, LeetCode137 Single Number II, LeetCode260 Single Number III
    剑指offer 1-6
  • 原文地址:https://www.cnblogs.com/yang-taiyue/p/6516391.html
Copyright © 2011-2022 走看看