这个问题问的很泛,因此能够回答的点有不少。css
能够从前端、后端、数据等方面进行回答。html
能够经过Chrome控制台、抓包工具等分析请求状况。前端
看看每次打开页面的时候,是否是会加载不少的资源文件,如mysql
xxxx.js xxxx1.js xxxx2.js xxxx1.css xxxx2.css xxxx3.css xxxx1.jpg xxxx2.jpg ....
打开一个网页可能加载了几十种资源文件。这个是能够优化一下的。nginx
首先是减小资源的个数,由于每多一个资源文件就是一次http -> tcp的请求流程处理。
其次是对资源文件进行优化,js\css文件能够压缩,jpg\jpeg\png等文件进行无损压缩或处理webp格式,更省空间。web
我只想要一个头像信息,接口确返回了一大堆有关、无关数据,若是数据格式复杂,还须要对应的解析过程。因此响应体能够优化(虽然不少状况是带有冗余信息,方便调整)算法
对于网页的请求、响应是一大堆信息流,能够利用一些压缩算法进行处理。好比一些服务器支持gzip压缩。压缩比很高。sql
针对于前端资源的话,有cdn缓存。也能够配置nginx对一些图片、js\css等资源进行缓存配置。也能够减小一些服务器的压力。数据库
就像直径 2cm的洞,怎么容得下直径10cm的管子。访问量越大,越容易出现缓慢加载的状况。后端
1MB的宽带,可能实际只有 100多k。 单个用户访问一个页面可能要加载10k的资源。若是
超过10个用户同时访问,就会变得缓慢,由于它要下载资源。
后端的话,通常来讲是先分析日志。看看是否有一些超时、异常、死循环等问题。
能够经过SkyWalking来检查分布式服务中的哪一个链路节点最耗时;能够经过Arthas检查某个方法的调用链路最耗时。根据具体状况分析。
能够经过jvm自带的工具, jstat\jstack\jvisualvm等分析。使用可查看(!这里)
固然,使用工具的目的是为了检查程序的GC状况, 若是是MinorGC频繁,没有晋升到old区,说明建立了大量生命周期短的对象(启动项目时,由于要初始化不少对象,因此可能会频繁GC,若是项目运行中;频繁GC,可能当前有大量建立对象的任务在运行(常见于循环),能够检查业务代码优化)。
经过PrintGCDetails日志(-XX:+PrintGCDetails -XX:+PrintGCTimeStamps),发现 若是是一次GC时间过长,多是STW(全局中止:stop the word)引发的【包括线程到达安全点时间,经过GC Root标记无用对象时间,GC时间等】,更详细的状况能够经过增长 safepoint相关参数进行分析,判断是在哪些环节出现了问题。 优化实例参考:https://hllvm-group.iteye.com/group/topic/38232 针对于特定业务缓慢,能够在业务链条上增长日志输出时间,经过分析业务每一段的执行时间,进行排查。 若是是sql方面的能够优化sql,代码层面的优化代码,能够经过增长缓存,异步处理,消息队列等方式进行处理逻辑问题。 找出存在大量for循环、数据库操做频繁、大文件操做的地方进行排查。
首先是否有慢查询,开启mysql慢查询日志,使用日志分析工具mysqldumpslow。能够经过优化sql,增长索引,优化表结构等处理。
## 是否开启慢查询 show variables like '%slow_query_log%' 返回的slow_query_log = OFF是关闭 ON 是开启 返回的slow_query_log_file 是日志所在位置路径 ## 开启慢查询 set global slow_query_log=1 ## 显示慢查询的设置时间 show variables like 'long_query_time%' ## 设置慢查询时间 set global long_query_time=4 ## 是否未使用索引的查询放到慢查询日志中 show variables like 'log_queries_not_using_indexes' ## 开启 set global log_queries_not_using_indexes=1 ## 查询有多少慢查询记录 show global status like '%Slow_queries%'; ## mysqldumpslow 慢日志分析工具 命令: -s 按照那种方式排序 c:访问计数 l:锁定时间 r:返回记录 al:平均锁定时间 ar:平均访问记录数 at:平均查询时间 -t 是top n的意思,返回多少条数据。 -g 能够跟上正则匹配模式,大小写不敏感。 ## 获得返回记录最多的20个sql mysqldumpslow -s r -t 20 sqlslow.log ## 获得平均访问次数最多的20条sql mysqldumpslow -s ar -t 20 sqlslow.log 参考官网:https://dev.mysql.com/doc/refman/8.0/en/mysqldumpslow.html
若是是I/O问题, 能够设置主从模式(读写分离),或多个数据库服务(但要保证数据一致性)。
若是是网络问题, 能够提升网速
若是数据库服务器内部有多个程序竞争资源。 优化服务器。
碰到了问题,仍是须要具体的去作分析。说不定是哪一个人写了 Thread.sleep(3 *1000)。以下:
欢迎补充其余的优化点!!!