- 吞吐量: 用户代码执行时间/(用户代码执行时间 + 垃圾收集执行时间)
- 响应时间 = 用户线程停顿的时间
- STW越短 响应时间越短
快 ============= 短
确定计算之前,应该确定到底是哪个优先,是计算型任务还是响应型任务
吞吐量优先还是响应时间优先,或者是在满足一定响应时间的基础上,要求达到多大的吞吐量
问题:
科学计算 吞吐量。数据挖掘,thrput。吞吐量优先的一般:(PS+PO)
响应时间:网站 GUI API (1.8 G1)
什么是调优? 分类
1、根据需求进行jvm规划和预调优(业务逻辑)
2、优化jvm运行环境(慢、卡顿)
3、解决jvm运行过程中出现的各种问题(解决oom问题)
调优,从规划开始
- 调优从业务场景开始,没有业务场景的调优都是耍流氓
概念:QPS(query) 、TPS(transaction)
12306上百万并发
- 无监控(压力测试,能看到结果)不调优
- 步骤
1、熟悉业务场景(没有最好的垃圾回收器,只有最合适的垃圾回收器)
(1)响应时间、停顿时间 [CMS G1 ZGC] 需要给用户做响应
(2)吞吐量 = 用户时间/(用户时间+响应时间)[PS]
2、选定垃圾回收器组合
3、计算内存需求(经验值1.5G16G)
4、选定CPU(越高越好)
5、设定年代大小、升级年龄
6、设定日志参数
(1)、-Xloggc:/pot/*/xxx.log -XX:+ -XX:+PrintGCCause
(2)、或者每天产生一个日志文件
7、观察日志参数
案例一:垂直电商(只卖某一类商品),最高每日百万订单,订单处理系统需要什么样的服务器配置
很多不同的服务器配置都能支撑服务器配置(1.5G 16G)
- 最高峰时间 100个订单/秒,(找一小时内的高峰期,1000订单/秒)
- 经验值 压力测试
- 非要计算产生一个订单需要多少内存? 512K * 1000 500M内存
(响应时间)
专业一点问法:要求响应时间100ms
压测!
案例二:12306遭遇春节大规模抢票应该如何支撑?
12306中国并发量最大的秒杀网站:
号称并发量100W最高
CDN-> LVS->NGINX->业务系统->每台机器1W并发(10k问题)100台机器
普通电商订单->下单->订单系统(IO)减库存->等待用户付款
12306的一种可能模型:下单-> 减库存和订单(redis、kafka)同时异步进行->等付款
减库存最后还会把压力压到一台服务器(RPC)
可以做分布式本地库存+单独服务器做库存均衡
大流量的处理方法:分而治之
优化环境
有一个50万pv的资料类网站原服务器源服务器32位,1.5G的堆,用户反馈网站比较缓慢,因此公司决定升级服务器64位,16G的堆,用户反馈网站卡顿十分严重,反而比以前效率更低了
1、为什么原网站慢,
很多用户浏览数据,很多数据load到内存,内存不足,频繁GC,STW时间长,响应时间变慢
2、为什么会更卡顿
内存越大,FGC时间越长
3、咋办?
PS -改为–> PN + CMS或者G1
如何优化
2、系统CPU经常100%,咋办?(面试高频)
cpu经常100%说明一定有线程在占用系统资源
(1)、找出哪个进程cpu高(top)
(2)、该进程中哪个线程cpu高(top -Hp)
(3)、导出该线程的堆栈(jstack)
(4)、查看哪个方法(栈帧)消耗时间(jstack)
(5)、工作线程占比高 | 垃圾回收线程占比高
3、系统中内存飙