Linux从入门到放弃 Tomcat

Tomcat

  • 1、JVM的配置和优化
    • 1.1、GC三大算法
      • 1.1.1、复制算法(Copying)MinorGc(普通GC)
        • 缺点:浪费10%的内存
      • 1.1.2、标记清除算法FullGc又叫MajorGC(全局GC)
        • 标记清除(Mark-Sweep)
          • 标记
          • 清除
          • 优点:
          • 缺点:
      • 1.1.3、标记整理算法(Mark-Compact)
          • 缺点
    • 1.2、总结
      • 1.2.1、内存效率
      • 1.2.2、内存整齐度
      • 1.2.3、内存利用率
      • 1.2.4、特点
        • 年轻代(Young Gen)
        • 老年代(Tenure Gen)
    • 问题
  • 2、Tomcat的配置和优化
    • 2.1、Tomcat启动优化
    • 2.2、Tomcat并发优化

1、JVM的配置和优化

GC:垃圾回收机制。

1.1、GC三大算法

1.1.1、复制算法(Copying)MinorGc(普通GC)

分为三部分:
1.Eden区
2.Survivor区(1)from(2)to
比例:8:1:1

在这里插入图片描述
绿色:空闲
红色:不可回收
黄色:可回收

当对象到达一定的阈值之后启动
开始回收Eden区和form区
复制红色的部分拷贝到to区

回收之后

复制的算法不产生碎片
红色复制到to区
to区需要为空
from区与to区交换
直到红色占满from区
放置old区

Eden区对象存活率较低,使用两块10%内存最为空闲和活动区间,另外80%内存,用来给新建对象分配内存。
一旦发生GC,将10%的活动区间与80%中存活的对象转移到10%空闲区间,将之前90%内存全部释放。

缺点:浪费10%的内存

对象存活率低才可以使用。

1.1.2、标记清除算法FullGc又叫MajorGC(全局GC)

标记清除与标记整理的混合实现。

标记清除(Mark-Sweep)

标记

从跟集合开始扫描,对存活的对象进行标记。

清除

扫描整个内存空间,回收未被标记的对象,使用free-list记录区域。

优点:

不需要额外空间

缺点:

两次扫描,耗费时间。
会产出内存碎片。

1.1.3、标记整理算法(Mark-Compact)

缺点

效率太低。需要标记所有存活对象,还要整理所有存活对象的引用地址。标记整理算法远低于复制算法。

1.2、总结

1.2.1、内存效率

复制算法>标记清除算法>标记整理算法

1.2.2、内存整齐度

复制算法=标记整理算法>标记清除算法

1.2.3、内存利用率

标记整理算法=标记清除算法>复制算法

1.2.4、特点

年轻代(Young Gen)

区域相对老年代较小,对象存活率低。

老年代(Tenure Gen)

区域较大,对象存活率高。

问题

JVM内存模型以及分区,没个区放什么。
堆里面的分区各自有什么特点。
GC三种收集方法的原理。
Minor GC 与 Full GC分别在什么时候发生。

2、Tomcat的配置和优化

2.1、Tomcat启动优化

/tomcat/bin/catalina.sh
export
导入
JAVA_OPTS
下拉选项
设置JVM相关运行参数的变量。
-server
启动jdk的server版
tomcat默认是以java -client模式运行,加server以production模式运行。
获得更大更高的并发处理能力,更强的JVM垃圾回收机制,可以获得更多的负载与吞吐量。
-Xms
初始堆大小,初始空间是物理内存的1/64。-Xmx
最大堆大小,最大空间是物理内存的1/4。-Xmx
年轻代堆内存大小,是Eden+2survivor space是物理内存的1/64

把Xms与Xmx两个值设置成相同值是最优做法。
避免在每次GC后调整堆大小。
空余堆内存小于40%,JVM会增大堆直到-Xmx的对法限制;
空余堆内存大于70%,JVM会减少堆直到-Xms的最小限值。

-Xss
设定没歌线程的栈大小。
设置不超过1M。
-XX:+AggressiveOpts
将最新版的JDK优化后的心特性自动注入。
-XX:+UserBlasedlocking
启动一个优化了的线程锁,对高并发访问很重要。
出现大量请求、阻塞、排队现象会自动优化。
-XX:MaxNewSize
设置最大年轻代大小,默认16M。-XX:NewSize
设置年轻代大小。尽量不要设置。
-XX:+DisableExplicitGC
在程序代码中不允许有显示的调用“System.gc()”,避免内存的大起大落。
-XX:MaxTenuringThreshold
Old区最大吞吐量。
默认15次。
避免oom异常概率。
-Djava.awt.headless=true
避免linux下不现实图片的现象。
加在所有参数最后使用。

2.2、Tomcat并发优化

catalina.sh
优化内存

server.xml
优化并发访问量
web.xml

/tomcat/confserver.xml
minSpareThreads
tomcat初始化,最小备用线程数。maxSpareThreads
tomcat初始化,最大备用线程数。线程数超过最大线程数,tomcat会关闭不需要socket线程。
enableLookups
是否允许DNS查询。
为提高性能设置为false。
取值:true/false
disableUploadTimeout
关闭上传时间限制
一般设置为true
connectionTimeout
网络连接超时,单位毫秒。
设置-1永不超时。
acceptCount
当任务线程达到最大时,接受排队的请求个数,默认100
maxThreads
最大线程数,默认200。
推荐600-900
minProcessors
最小处理线程数。maxProcessors
最大处理线程数。
useURIValldationHack
减少一些url不必要的检查,为提高性能可以设置为false。
compression
设置是否开启Gzip压缩。
设置开启on
compressionMinSize
compressionableMimeType
/tomcat/conf/web.xml
    <session-config><session-timeout>30</session-timeout></session-config>
默认30分钟


本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!

相关文章

立即
投稿

微信公众账号

微信扫一扫加关注

返回
顶部