为什么请求一高响应速度就变慢原因
假设本来一个订单所需的时间是一秒,但是因为突然的并发访问增加 从原来的单节点300单/秒 增加到1000单/秒 这个时候因为网络带宽,内存,IO读写都吃紧可能从原来的1秒变为2秒甚至3秒都是很有可能的,设想一下,CPU多核运行,请求剧增那么分到这个线程的时间会更少,可能几秒才能完成。
如果订单量持续增加?
这个时候可能会导致线程抢占到CPU的资源更少,IO读写甚至访问数据库请求长期没有获取到,直接导致报错。
对GC的影响
假设之前一个订单的时间是一秒,那么这个时候还都不是垃圾对象,所以会从Eden区移到S0
但是现在因为并发的问题导致最后不是一秒的对象,2秒甚至3秒以上的对象都会从Eden区挪到S0
递进一层
假设以前的GC调优是根据300单/秒来猜测的 假设每秒产生60M对象 Eden区配置 1.6G S0和S1配置了200M 25秒回触发一次MinorGC
现在2秒甚至3秒以上的产生180M的对象都会从Eden区挪到S0 原本的200M没问题,现在直接触发动态年龄判断机制 (详情)导致直接移到老年代!设想一下 25秒移动200M的对象甚至更多 老年代假设配置了1G 那么125秒就会触发一次FullGC
再次递进
如果你配置的CMS垃圾回收器(大部分互联网公司标配ParNew+CMS),默认是达到百分之92的空间触发FullGC ,这个时候如果剩下的百分之8是80M 这个时候挪过来200M (一般在并发标记和并发清理阶段 一边回收,系统一遍运行,还没有回收完再次触发full gc), 这个时候会由Serial old收集器接替CMS的工作,这个收集器会STW还是单线程....对于电商系统的影响显而易见

探讨了在高并发场景下,系统响应速度变慢的原因,包括网络带宽、内存、IO读写瓶颈,以及CPU资源分配问题。深入分析了垃圾回收机制在并发环境下如何被触发,以及这对系统性能的影响。
2348

被折叠的 条评论
为什么被折叠?



