服务器CPU100%如何排查和解决

目录

1、定位耗费 cpu 的进程

2、定位进程内耗费 cpu 的线程

3、定位那个方法导致 cpu 过高


问题背景:要往 es 集群写日志,但当时 es 集群异常宕机,主线程写不进去数据抛出异常,但是异常内,又重新调用了 es 写的方法,导致死循环,线上服务器CPU负载接近100%,那么如何排查了?

1、定位耗费 cpu 的进程

查看进程列表:top c

输入P,按照 cpu 使用率进行排序:P

 

2、定位进程内耗费 cpu 的线程

查看进程内线程列表:top -Hp 13477

输入P,按照 cpu 使用率进行排序:P

3、定位那个方法导致 cpu 过高

printf '%x/n' 13523     ->    34d3/n                                    # 将ID转换为十六进制(因为在jstack输出的堆栈信息中线程ID为十六进制格式)

 jstack 13477 | grep 34e9/n                             # 打印进程 13477 的堆栈中线程id 13523  的信息

 可以打印出那个雷下的方法导致问题。

### 排查服务器 CPU 使用率 100% 的方法 当服务器CPU 使用率达到了 100%,这意味着 CPU 已经完全被占用,无法再处理更多的任务。这种情况可能会导致系统响应变慢,甚至出现服务不可用的情况。以下是排查解决此类问题的详细方法: #### 使用 `top` 命令查看 CPU 使用情况 首先,可以使用 `top` 命令来查看当前系统的整体 CPU 使用情况。这个命令会显示一个动态更新的列表,其中包括各个进程的 CPU 使用率等信息。 ```bash top ``` 在 `top` 命令的输出中,重点关注 `%CPU` 列,它显示了每个进程的 CPU 使用百分比。如果某个进程的 `%CPU` 值非常高,那么这个进程很可能是导致 CPU 使用率飙升的原因之一。 #### 使用 `ps` 命令获取更详细的进程信息 为了获取更详细的进程信息,可以使用 `ps` 命令结合其他参数来筛选出 CPU 使用率较高的进程。 ```bash ps -eo %cpu,pid,user,args --sort=-%cpu | head -n 20 ``` 这条命令会列出 CPU 使用率最高的前 20 个进程,并按照 CPU 使用率降序排列。这样可以帮助快速定位到占用 CPU 资源最多的进程。 #### 使用 `htop` 或 `atop` 获取更直观的信息 如果服务器上安装了 `htop` 或 `atop` 工具,它们提供了比 `top` 更加丰富直观的界面来监控系统资源使用情况。这些工具通常支持颜色编码更详细的统计信息,有助于更快地识别问题所在。 ```bash htop # 或者 atop ``` #### 使用 `mpstat` 分析 CPU 使用情况 对于多核 CPU服务器,可以使用 `mpstat` 工具来分析每个核心的使用情况。这有助于判断 CPU 使用率是否均匀分布在所有核心上,或者是否存在某个特定核心负载过高的情况。 ```bash mpstat -P ALL 1 ``` 这条命令每秒更新一次所有 CPU 核心的使用情况统计数据。 #### 使用 `iostat` 检查 I/O 等待时间 有时候,CPU 使用率高可能是因为大量的 I/O 操作导致的等待时间增加。使用 `iostat` 工具可以检查 I/O 操作的状态。 ```bash iostat -x 1 ``` 这条命令会显示详细的 I/O 统计信息,包括 I/O 等待时间 (`%iowait`),这对于判断是否有过多的磁盘 I/O 操作非常有用。 #### 使用 `vmstat` 查看虚拟内存统计信息 `vmstat` 工具可以提供关于进程、内存、分页、块 I/O、系统 CPU 活动的综合视图。 ```bash vmstat 1 ``` 这条命令每秒更新一次统计信息,帮助观察系统整体性能的变化趋势。 #### 使用 `jstack` 分析 Java 应用程序的线程堆栈 如果是 Java 应用程序导致CPU 使用率过高,可以使用 `jstack` 工具来分析应用程序的线程堆栈信息,找出哪些线程正在消耗大量 CPU 时间。 ```bash jstack <pid> | grep -A 10 <tid的十六进制> ``` 其中 `<pid>` 是 Java 进程的 ID,而 `<tid的十六进制>` 是特定线程的 ID(以十六进制表示)。通过分析输出的堆栈信息,可以定位到具体是哪个线程在消耗 CPU 资源。 #### 检查系统日志 系统日志文件(如 `/var/log/syslog` 或 `/var/log/messages`)可能会包含有关系统异常或错误的信息,这些信息有时能帮助理解为什么 CPU 使用率会突然升高。 ```bash tail -f /var/log/syslog ``` #### 考虑外部因素 除了上述内部因素外,还需要考虑外部因素,比如网络攻击(如 DDoS 攻击)、恶意软件感染等,这些都可能导致 CPU 使用率异常升高。确保服务器的安全防护措施到位,定期进行安全审计漏洞扫描。 #### 采取措施降低 CPU 使用率 一旦确定了导致 CPU 使用率过高的原因,就可以采取相应的措施来解决问题。这可能包括优化代码、调整配置、增加硬件资源、重启占用资源过高的服务或进程等。 #### 监控与预防 最后,建立一个持续的监控机制是非常重要的。使用如 `nagios`、`zabbix`、`prometheus` 等监控工具,可以实时监控服务器的性能指标,并在出现问题时及时发出警报。此外,定期进行性能测试容量规划,也可以帮助预防未来可能出现的类似问题。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值