网站访问突然变慢一系列解决思路

2024-02-14 09:38

本文主要是介绍网站访问突然变慢一系列解决思路,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

1. 首先看下机器的CPU资源是否过高,如果CPU资源过高会导致网站响应变慢,如果是那么需要看下哪个服务占用了CPU的资源,然后详细排查过高的原因

1) 通过top命令找出占用CPU高的PID

2) 通过ps aux | grep pid 可以进一步确定这个pid运行的是什么服务

3)查看线程列表ps -mp pid -o THREAD,tid,time,观察这个服务的哪几个线程占用了CPU

4) 打印堆栈信息看具体原因jstack pid | grep tid -A 30

2. 查看系统是否存在大量的TIME_WAIT状态的连接,因为这些连接还占用着socket的连接,而如果你的服务器配置的socket连接数不多又恰巧都被TIME_WAIT占用了那就会造成网站假死状态,这个时候需要查下系统配置的TIME_WAIT链接失效时间,如果时间太长了,设置短一点30秒就可以了,然后可以再看下服务器配置的socket连接数是不是不太够。

1) 查看链接状态命令:netstat -an

2) socket链接数tomcat:查看server.xml的acceptCount参数

3) 设置TIME_WAIT失效,不同系统配置方式不同,下面是linux系统为例,需要调整内核参数:/etc/sysctl.conf 

vim /etc/sysctl.conf添加以下配置文件:net.ipv4.tcp_syncookies = 1(1表示开启 syn cookies 。当出现 syn 等待队列溢出时,启用 cookies 来处理,可防范少量 syn ***,默认为 0 ,表示关闭)
net.ipv4.tcp_tw_reuse = 1(1 表示开启重用。允许将 time-wait sockets 重新用于新的 tcp 连接,默认为 0 ,表示关闭;)
net.ipv4.tcp_tw_recycle = 1(1 表示开启 tcp 连接中 time-wait sockets 的快速回收,默认为 0 ,表示关闭。)
net.ipv4.tcp_fin_timeout = 30(修改系统默认的 timeout 时间)
修改完毕后执行:/sbin/sysctl -p 让参数生效,调优完成

3. 查看数据库是否有死锁,或者是否有慢查询日志

4. 如果上面都不是,最后只能通过查看各种日志是否有异常信息,看看从日志上能否发现什么端倪

 

最后,如果事情紧急,请直接采用重启大法,先重启看问题是否解决,解决了后面在慢慢查问题,下面是一个比较简单的案例以及排查过程。

 

模拟cpu占用高

新建一个名为jvm-learn的springboot项目

模拟代码如下

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;@RestController
@SpringBootApplication
public class JvmLearnApplication {public static void main(String[] args) {SpringApplication.run(JvmLearnApplication.class, args);}@GetMapping("cpu")public void cpu() {while (true) {// 利用死循环来制造cpu飙升的场景}}}

打包

在项目根目录下执行如下命令:

mvn clean package -Dmaven.test.skip=true

启动jar包

nohup java -jar jvm-learn-0.0.1-SNAPSHOT.jar &

访问

curl localhost:8080/cpu

排查

查看占用cpu高的进程 

top

如下图:可看出PID为7149的java进程占用cpu最高,达到了98%

 查看进程中最耗cpu的子线程

top -p 7149 -H

如下图:可看出PID为7166的线程占用cpu最高,达到了97.7%

将最耗cpu的线程id转换为16进制输出

 printf "%x \n" 7166

 

 查询具体出现问题的代码位置

jstack 7149 | grep 1bfe -A 30

 如下图:可看出是JVMLearnApplication类的第18行出现问题

 

查询JVM中的大对象top

tomcat线程id=15815
jmap -histo:live 15815 | head -17

class name表示:

[C is a char[]
[S is a short[]
[I is a int[]
[B is a byte[]
[[I is a int[][]

也可以导出一份dump日志,然后利用MAT工具去分析

这篇关于网站访问突然变慢一系列解决思路的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/708134

相关文章

Java中读取YAML文件配置信息常见问题及解决方法

《Java中读取YAML文件配置信息常见问题及解决方法》:本文主要介绍Java中读取YAML文件配置信息常见问题及解决方法,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要... 目录1 使用Spring Boot的@ConfigurationProperties2. 使用@Valu

SQL Server配置管理器无法打开的四种解决方法

《SQLServer配置管理器无法打开的四种解决方法》本文总结了SQLServer配置管理器无法打开的四种解决方法,文中通过图文示例介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的... 目录方法一:桌面图标进入方法二:运行窗口进入检查版本号对照表php方法三:查找文件路径方法四:检查 S

Redis出现中文乱码的问题及解决

《Redis出现中文乱码的问题及解决》:本文主要介绍Redis出现中文乱码的问题及解决,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录1. 问题的产生2China编程. 问题的解决redihttp://www.chinasem.cns数据进制问题的解决中文乱码问题解决总结

MySQL中的InnoDB单表访问过程

《MySQL中的InnoDB单表访问过程》:本文主要介绍MySQL中的InnoDB单表访问过程,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录1、背景2、环境3、访问类型【1】const【2】ref【3】ref_or_null【4】range【5】index【6】

Python中Tensorflow无法调用GPU问题的解决方法

《Python中Tensorflow无法调用GPU问题的解决方法》文章详解如何解决TensorFlow在Windows无法识别GPU的问题,需降级至2.10版本,安装匹配CUDA11.2和cuDNN... 当用以下代码查看GPU数量时,gpuspython返回的是一个空列表,说明tensorflow没有找到

解决未解析的依赖项:‘net.sf.json-lib:json-lib:jar:2.4‘问题

《解决未解析的依赖项:‘net.sf.json-lib:json-lib:jar:2.4‘问题》:本文主要介绍解决未解析的依赖项:‘net.sf.json-lib:json-lib:jar:2.4... 目录未解析的依赖项:‘net.sf.json-lib:json-lib:jar:2.4‘打开pom.XM

XML重复查询一条Sql语句的解决方法

《XML重复查询一条Sql语句的解决方法》文章分析了XML重复查询与日志失效问题,指出因DTO缺少@Data注解导致日志无法格式化、空指针风险及参数穿透,进而引发性能灾难,解决方案为在Controll... 目录一、核心问题:从SQL重复执行到日志失效二、根因剖析:DTO断裂引发的级联故障三、解决方案:修复

IDEA Maven提示:未解析的依赖项的问题及解决

《IDEAMaven提示:未解析的依赖项的问题及解决》:本文主要介绍IDEAMaven提示:未解析的依赖项的问题及解决,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝... 目录IDEA Maven提示:未解析的依编程赖项例如总结IDEA Maven提示:未解析的依赖项例如

前端如何通过nginx访问本地端口

《前端如何通过nginx访问本地端口》:本文主要介绍前端如何通过nginx访问本地端口的问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录一、nginx安装1、下载(1)下载地址(2)系统选择(3)版本选择2、安装部署(1)解压(2)配置文件修改(3)启动(4)

解决Entity Framework中自增主键的问题

《解决EntityFramework中自增主键的问题》:本文主要介绍解决EntityFramework中自增主键的问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝... 目录Entity Framework中自增主键问题解决办法1解决办法2解决办法3总结Entity Fram