JAVA Web 应用程序调优影响因素总结
0.基于JDK1.8环境
1.JVM参数
JVM启动模式:web应用程序需要开启Server模式(Linux的jre默认,windows需要指定)
JVM垃圾而回收器选择:选择G1 垃圾回收算法提高吞吐量和响应时间
JVM的最大内存和最小堆内存:设置成为一样,避免内存变化。对于程序影响
JVM卡表的回收设置:卡表的几个魔数 32768、4K和8K
-XX:+UnlockDiagnosticVMOptions
-XX:ParGCCardsPerStrideChunk=4096
关闭主动GC调用:-XX:+DisableExplicitGC
JVM偏向锁变换过程影响并发:
参数 | 描述 |
---|---|
UseSerialGC | 虚拟机运行再Client模式下的默认值,打开此开关后,使用Serial+Serial Old的收集器组合进行内存回收 |
UseParNewGC | 打开此开关后,使用ParNew+Serial Old的收集器组合进行内存回收 |
UseConcMarkSweepGC | 打开此开关后,使用ParNew+CMS+Serial Old的收集器组合进行内存 |
UseParallelGC | 虚拟机运行在Server模式下的默认值,打开此开关后,使用Parallel Scavenge+Serial Old(PS MarkSweep)的收集器组合进行内存回收 |
UseParallelOldGC | 打开此开关后,使用ParallelSeavenge+ParallelOld的收集器组合进行内存回收 |
SurvivorRatio | 新生代中Eden区域与Survivor区域的容量比值,默认为8,代表Eden:Survivor=8:1 |
PretenureSizeThreshold | 直接晋升到老年代的对象大小,设置这个参数后,大于这个參数的对象将直接在老年代分配 |
MaxTenuringThreshold | 晋升到老年代的对象年龄。每个对象在坚持过一次MinorGC之后,年龄就增加1,当超过这个参数值时就进人老年代 |
参考JVM调优:https://blog.csdn.net/jl19861101/article/details/88368830
https://www.jianshu.com/p/a09c59936bf3
2.服务器TCP链接数量设置:
TCP协议端口数量理论值:65535,及可以建立理论最多可以基于65535端口建立65535的阻塞式的网络通信IO(BIO)
但是通过新一代的网络通信IO多路复用技术(NIO),可以实现一个端口,建立多个信道的方式处理网络连接,仅仅在网络建立Accpet 到 接收消息和发送消息字节流
过程中异步,处理字节流到应用程序内部的过程还是阻塞的过程(采用多线程的方式处理)。
AIO(异步IO网络模型),在NIO的基础之上,完全的异步操作。
Linux服务器每一个TCP链接需要打开一个文件,所以Linux服务器的允许打开最大文件链接数量根据需要进行修改
3.关于程序本身优化
4.关于程序设计优化
程序设计采用微服务架构,采用
5.关于数据层面优化
数据库选择合适关系数据库或者非关系数据库或者检索类数据库
数据库选择合适字段
关系数据库针对于单表大数据量或分散数据的读写压力采用分库分表的设计方案