tomcat原理和优化

概念和原理

Connector组件

  • 接受客户端连接
  • 加工处理客户端请求

Container组件

  • 所有子容器的父接口
  • 责任链设计模式

在看一下tomcat端口配置:

8005:监听tomcat关闭的请求

8080:http请求

8009:和其他http建立连接

修改tomcat内存:

java的内存分为

  1.堆内存

  2.栈内存

  3.静态内存区(持久区,不会被gc回收)

内存溢出:OutOfMemoryError:Java head space异常

jvm默认内存大小最小为服务器内存的1/64,最大内存为1/4;

静态内存区已满:

内存溢出:OutOfMemoryError:PermGen space异常

jdk8以后不会出现这个异常;因为将类存放在Metaspace空间(元空间)

元空间的本质和永久代类似,都是对JVM规范中方法区的实现。不过元空间与永久代之间最大的区别在于:元空间并不在虚拟机中,而是使用本地内存。因此,默认情况下,元空间的大小仅受本地内存限制,但可以通过以下参数来指定元空间的大小:

  -XX:MetaspaceSize,初始空间大小,达到该值就会触发垃圾收集进行类型卸载,同时GC会对该值进行调整:如果释放了大量的空间,就适当降低该值;如果释放了很少的空间,那么在不超过MaxMetaspaceSize时,适当提高该值。
  -XX:MaxMetaspaceSize,最大空间,默认是没有限制的。

  除了上面两个指定大小的选项以外,还有两个与 GC 相关的属性:
  -XX:MinMetaspaceFreeRatio,在GC之后,最小的Metaspace剩余空间容量的百分比,减少为分配空间所导致的垃圾收集
  -XX:MaxMetaspaceFreeRatio,在GC之后,最大的Metaspace剩余空间容量的百分比,减少为释放空间所导致的垃圾收集

死循环或者无限递归

StackOverflowError

 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"

堆设置大,GC回收比较慢,频率低

堆设置小,GC回收比较块,频率高

配置热部署:

<Context debug="0" path="/xxxxdemo" docBase="F:xxxx" reloadable="true"></Context>

debug设置的值越大,log输出的就越详细,没有设置默认为0

reloadable:自动加载新增活修改的文件,一般会重启

path:项目名称

docBase:项目路径

原文地址:https://www.cnblogs.com/zhengyuanyuan/p/10796424.html