网站访问慢的一些个人经验

版权声明:博客均属作者创作,转载必须声明 https://blog.csdn.net/qq_37120676/article/details/85001437

网站访问慢要根据具体的架构去排错。我假设架构如下

外层cdn 源站nginx代理 下面是tomcat和mysql主从+redis

首先我们可以访问自己的网站,f12打开调试模式查看网络状态,看是否有那些网页或者链接加载非常慢,根据这些页面和链接查看数据的流向来判断每一层的架构是否正常,然后根据具体的架构去调优。

我们可以在测试机上把host改为源站nginx代理ip然后访问,如果是正常速度则是cdn问题,如果慢则是源站的问题,源站的问题就要根据这个架构一层一层向下排查很快能判断问题所在。

cdn问题:

查看cdn的日志找出流量较大的url或者文件:

如果是图片就要进行裁剪优化,如果是js最好压缩处理等。

可以使用cdn预热,主动加载一些热门数据进入缓存。

cdn缓存设置的问题,导致缓存命中率低,回源率高。

url带参数的话cdn会因为参数不同重新访问源站,所以最好是做动静态分离,只加速静态资源。

数据库性能问题:

数据库主要性能的瓶颈在于磁盘io,可以查看是否缓存设置存在问题,导致数据库大部分情况是访问磁盘读取数据,可以查看innodb_buffer_pool缓存的命中率并进行合理调优。

查看慢查询日志,查看是否有不规范的sql语句,例如select *等

show full processlist 查看是否有大量的sleep进程,和开发人员沟通关于wait_timeout的问题,比较建议是三十秒。

其实正常情况下,mysql进行了主从复制,读写分离负载均衡以及redis的缓存,本身的并发不会很高,影响性能的地方也比较少。

如果突然访问过大,可能存在突发的攻击或者redis的缓存穿透甚至导致雪崩的情况。

nginx问题:

查看访问日志,是否有大量恶意ip访问,或者爬虫的访问,可以在配置文件中设置浏览器代理是爬虫的拒绝访问

修改端口访问,nginx大量的并发访问可以导致端口不够用.

/proc/sys/net/ipv4/ip_local_port_range

存在大量的tcp wait_time导致访问变慢,可以打开socket的快速回收。tcp_tw_recycle

tomcat: 文件句柄数不够,内存溢出等

这是一个很庞大的问题我上面说的远远只是一小部分,因为整个架构非常大,每个地方都有着自己的作用,一出现问题都有可能导致牵一发而动全身,所以我们要做好每一个服务的优化以及监控,只要在排查问题的时候有着合理的逻辑,就可以快速定位问题和解决问题

 

如果是一会慢一会快

要分两种情况,一种是规律时间内慢,一种是不规律。

如果时间是规律的,一般是系统内有crontab可循环的计划任务,或者程序内有定时执行的任务,前面这个可以通过检测这个时间点的计划任务来解决,后者需要和开发人员沟通是否有业务运行。

如果时间没有规律,就需要查看那个时间段的系统监控,查看那些机器或者服务有问题,无非就在内存,磁盘io,cpu,网络等问题上面。找到对应的机器之后,分析系统日志和服务的日志。常出现的情况就比如内存不够,内存溢出。同时我们可以通过定义一个后台计划任务每隔5分钟把top命令重定向到一个文件中,top -n 1 -b

 

猜你喜欢

转载自blog.csdn.net/qq_37120676/article/details/85001437