就是因为资源争抢,
例如
1 线程池的最大并发是500线程
2 设置的timeout时间是2秒
3 测试时设置的线程数是1000请求并发
4 那么在请求刚来,线程池已经占满,业务处理的时间又大于2秒
5 2秒内后续请求没有被处理完成就会出现timeout,因为请求超时了
6 线程池的线程已经在全部执行业务代码了(还没执行完毕),又有一些请求发过来,那么后发过来的这些请求就处于等待状态,等前面的请求执行完毕,有空闲的线程才能继续执行后面的这些请求,若后面发来的这些请求的等待时间就设置了1秒,但是上一个请求还是没有执行完毕,这1秒的时间已经到了,那么后面的这些请求就是timeout了
调优从哪里入手:
系统架构
硬件配置
中间件
存储
如果是Java的话jvm的参数设置
读写逻辑多的会导致IO比较高
计算密集的会导致cpu比较高
数据库:慢sql、死锁、索引是否加的合理,索引是否命中、是分库分表吗(分库分表逻辑)?、数据库是主从吗?几个主?几个从?
Tomcat是如何配置的?
负载均衡怎么做的?