1.什么是Keepalive 长连接?
    
    所谓的长连接就是保持一个连接长时间不释放, 让其他请求线程可以进行复用; 达到资源复
    
    用的情况
    
    2.Jmeter 长连接
    
    Jmeter 连接服务端进行压力测试的时候, 使用就是 keepavlie 长连接, 在高并发模式下, 保
    
    证连接具有复用性
    
    3.keepalive 连接越多越好? ?
    
    keepalive 连接本身消耗大量资源; 如果不能及时释放, 系统 TPS 上不去, 因此需要
    
    设置合理的 keepalive 连接数, 以及连接的超时时间;
   
4.Undertow
Undertow 是一个轻量级 servlet 服务器,tomcat 也是一个 servlet 服务器; undertow比 tomcat 更加轻量级, undertow 非常专一, 没有任何可视化的组件, 专注于 Servlet 容器领域; 因此 undertow 性能略好于 tomcat 服务器
5.为什么要进行 JVM 调优
    1、 垃圾对象太多(java 线程, 对象占满内存), 内存被占满了, 程序跑不动了!! — 程序
    
    性能严重下降
    
    2、 垃圾回收线程太多, 频繁回收垃圾(垃圾回收线程也会占用内存资源, cpu 资源), 必然
    
    会导致程序的性能下降
    
    3、 垃圾回收导致 STW(stop the world)
   
    jvm 调优本质是什么? ?
    
    垃圾回收, 及时回收占用内存的垃圾对象, 及时释放掉内存空间
   
    6.JVM 调优原则
    
    gc 时间足够小 (堆内存设置足够小)
   
gc 次数足够少 (堆内存设置足够大)
    发生 full gc 周期足够长 (最好不发生)
    
    * metaspace 永久代空间合理, 永久代一旦扩展, fullgc 一定会发生
    
    * 老年代空间设置稍微大一些, 防止 fullgc 发生
    
    * 尽量让垃圾对象在年轻代被回收(90%)
    
    * 尽量防止大对象的产生, 一旦大对象多了以后, 就可能发生 fullgc,甚至会发生 oom
    
    7.如何进行调优
   
    典型的参数设置: 4cpu,8GB
    
    1、 -Xmx4000M 设置 JVM 堆内存最大值( 经验值的设置 3500MB-4000MB, 内存设置的
    
    大小, 没有固定的设置, 根据业务实际情况进行设置, 根据压力测试情况, 在线上运行一段
    
    时间(7 天, 30 天), JVM 内存进行不断的调试)
    
    2、 -Xms4000M 设置 JVM 堆内存的初始化内存(一般情况下, 都必须和最大内存设置
    
    为一致, 防止内存抖动)
    
    3、 -Xmn2g 设置年轻代大小(eden,s0,s1)
    
    4、 -Xss256k 设置线程栈的大小, JDK1.5+版本线程栈默认是 1MB, 相同的内存情况下,
    
    线程对象越小, 操作系统会创建更多性能, 系统性能会更好
    
   
nohup java -Xmx4000m -Xms4000m -Xmn2g -Xss256k -jar book-1.0-SNAPSHOT.jar &
    GC 日志输出
    
    -XX:+PrintGCDetails-XX:+PrintGCTimeStamps -XX:+PrintGCDateStamps -XX:+PrintHeapAtGC -Xloggc:jvm.log
   
    full gc 调优
    
    为什么会一开始就发生 5次 full gc ??
    
    查看一下内存模型情况: 可以看一下那些内存区域被占满了!! 占用比较多
    
    排查命令: jstat -gcutil PID
    
    MetaSpace 发生了扩容现象; MetaSpace 每扩容一次, 就会发生一次 fullgc; 因此要避免
    
    由于 metaspace 引起的 fullgc,必须对 metaSpace 元数据空间大小进行设置一个合理的值
   
| -XX:MetaspaceSize=256m | 
    YONG&OLD 比例
    
    年轻代, 老年代 大小比例的设置, 到底设置多少才更为合适呢? ? ?
    
    比例设置参数: -XX: NewRatio = 4 ,
    
    1、 youg gc — 尽量让垃圾在 young 被回收
    
    2、 尽量减少 full gc
   
eden ,s0 ,s1 区域内存比例应该如何进行设置
| -XX:SurvivorRatio=8 | 
    并行垃圾回收器组合, 并行垃圾回收器有哪些? ?
    
    年轻代: ParNew , Parallel Scavenge
    
    老年代: Parallel Old
    
    吞吐量优先
   
| -XX:+UseParallelGC -XX:+UseParallelOldGC | 
    响应时间优先
    
    -XX:+UseParNewGC -XX:+UseConcMarkSweepGC
    
    因此可以发现 ps+po是比较好的组合
    
   
 
