概念和原理
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:项目路径