分 析:
1、网络层面,带宽或网络链路?
2、系统层面,主机资源上限?
3、软件层面,WEB容器、连接池、SQL语句、资源等待、死锁、行级锁的持有时间?
4、数据库层,数据库资源(CPU,IO)上限?
问题排查:
1、网络层面
① 网速检测;网络稳定性检测;流量暂用检测:netlogs -d 10
2、系统层面
① ECS监控:查看IOPS、CPU使用情况等多维度数据信息
② 内存/CPU: htop
3、软件层面
①不使用线程池:
connectionTimeout = '20000'
acceptCount = '1000'
maxThreads = '800'
线程池:
<Connector
port="8009"
protocol="AJP/1.3"
maxThreads="5000"
executor="tomcatThreadPool"
/>
当线程数大于minSpareThread,且存在空闲线程且该线程空闲时间达到60,000毫秒后自动关闭线程。
<Executor name="tomcatThreadPool" namePrefix="catalina-exec-"maxThreads="1000" minSpareThreads="50" maxIdleTime="60000"/>
② DHCP:
maxIdle="100" 最大空闲连接数;
minIdle="100" 最小空闲连接数;
maxWait="-1" 最大等待时间,-1不限制;
maxActive="100" 最大连接数;
C3P0:
cpool.checkoutTimeout=10000
cpool.minPoolSize=50
cpool.initialPoolSize=5
cpool.maxPoolSize=500
cpool.maxIdleTime=60
cpool.acquireIncrement=5
cpool.maxStatements=200
cpool.idleConnectionTestPeriod=60
③ SQL优化,降低行级锁的持有时间 或者 使用乐观锁解决行级锁持有时间
4、数据库层面
① 阿里云DMS检测QPS/TPS/RT等各方面的一个数据
② 查看最大连接数:show variables like '%max_connection%'
设置最大连接数:set global max_connections=1000; 或设置my.cnf
查看所有用户当前连接数:show processlist; 只列出前100条
show full processlist;