为什么请求一高响应速度就变慢而导致的问题

为什么请求一高响应速度就变慢原因

假设本来一个订单所需的时间是一秒,但是因为突然的并发访问增加 从原来的单节点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 这个时候会由Serial收集器接替CMS的工作,这个收集器会STW还是单线程....对于电商系统的影响显而易见

为什么请求一高响应速度就变慢而导致的问题