系统阻塞场景问题
1.前端无限制的请求
2.大文件上传,导出
3.线程池耗尽
4.内存泄漏,溢出
5.代码逻辑错误,比如死循环。
6.数据库连接池沾满
7.数据库慢查询(索引不生效,在刷脏数据)
8.下游接口无响应,但是又没有设置超时时间。
9.缓存,消息队列故障。
前端无限制的并发请求
导致线程池被瞬间沾满,系统就会卡住。因此我们在设置的时候要进行限流控制。
大文件上传/导出
大文件导出,比如10万行excel数据,“数据处理”和“文件生成”
一次性加载全量数据,内存直接撑爆。
线程池耗尽:
比如Tomcat默认线程数据是200,若接口平均处理时间从100ms增加到5s,每秒只能处理40个请求,当并发超过40时就会排队,超过200则直接拒绝。
内存泄漏/溢出:
未关闭IO流,静态集合无限制存储数据,会导致JVM内存持续增长,最终触发GC频繁,表现为:间接性无响应。
写的代码里面死循环:
假设每次请求都会执行一段死循环代码,当多次调用的时候,就会大量的死循环占用CPU。很快线程池被沾满,请求无法处理,此时调用其他接口会发现,要么超时,要么完全无响应,--系统阻塞了。
数据库连接池沾满
当数据库的连接被耗尽的且无法释放的时候,新的数据库操作,就会排队等待空闲连接,最终导致系统缓慢或者无响应。
数据库慢查询
慢查询是指:执行时间超长的sql,会长期占用数据库连接和CPU
例如:执行30秒,执行的时候被锁住无法释放,若同时有5个这样的请求,那么其他数据库的请求就会排队,表现接口超时。
下游接口无响应,又没有设置超时时间:
中间件的
1.比如缓存服务崩溃,所有连接请求都会卡主
2。每个请求占用一个Tomcat线程,且不会释放
3.线程被沾满后,系统阻塞。
浙公网安备 33010602011771号