优化思路:
- 线程数
- 超时时间
- JVM优化
线程数相关配置
修改application.yml配置文件
#等待队列长度,当可分配的线程数全部用完之后,后续的请求将进入等待队列等待,等待队列满后则拒绝处理,默认100。
server.tomcat.accept-count=100
#在同一时间,最大可被连接数,默认8192
server.tomcat.max-connections=8192
#最大工作线程数,默认200
server.tomcat.threads.max=200
#最小工作线程数,初始化分配线程数,默认10
server.tomcat.threads.min-spare=10
#线程数量:
#(建议这个配置数可以在服务器CUP核心数的200~250倍之间)
#等待队列长度:
#队列做缓冲池用,但也不能无限长,消耗内存,出队入队也耗CPU
超时时间
#连接超时时间,单位ms
#用来保障连接数不容易被压垮。如果大批量的请求过来,延迟比较高,很容易把线程数用光,这时就需要提高超时时间。
#这种情况在生产中是比较常见的 ,一旦网络不稳定,宁愿丢包也不能把服务器压垮
server.tomcat.connection-timeout=12000
JVM优化
一般来说没有太多场景,无非就是加大初始的堆,和最大限制堆,当然也不能无限增大,要根据实际情况优化。
- -Xms: 初始堆大小
- -Xmx: 最大堆大小
- -Xss: JVM启动的每个线程分配的内存大小 (例如:-Xss512k)
- -Xmn2g: 设置年轻代大小为2G。整个堆大小=年轻代大小 + 年老代大小 + 持久代大小
MYSQL数据库QPS问题
主键查询:千万级别数据 = 1-10毫秒
唯一索引查询:千万级别数据 = 10-100毫秒
非唯一索引查询:千万级别数据 = 100-1000毫秒
无索引:百万条数据 = 1000毫秒+