# 服务器CPU使用率高
FAQ: https://open.seeyoncloud.com/#/faq/faq/v1/share?url=Z2JySmU+MjQ4
# 排查步骤
# 1、检查服务器配置是否满足手册要求
比如OA服务器CPU至少8c,不同在线用户数及部署方式要求不同。 如果一个服务器上集中部署了多个服务,单个服务占用CPU在合理范围,总的加起来导致总CPU较高,应拆分或根据所有服务的CPU要求之和计算判断。
# 2、查找服务器上CPU使用率最高的进程
Windows
打开任务管理器,进程/详细信息,CPU列按倒叙排,查找导致CPU使用率高的1个或几个进程。
Linux
使用top命令查看最耗cpu的几个进程 top -n 1 -o %CPU
提示:Linux服务器建议查看红框中的cpu各态使用率,箭头指向的使用率仅是单核cpu的使用率大小。

top 会将 CPU 使用率划分为多种状态,不同状态对应不同的系统行为,用于快速判断性能瓶颈所在。 常见 CPU 状态包括:
- us:用户态 CPU 时间,表示普通应用程序消耗的 CPU
- sy:内核态 CPU 时间,表示系统调用和内核处理消耗的 CPU
- ni:被调整优先级(nice)的用户进程消耗的 CPU
- id:空闲 CPU 时间,表示 CPU 未被使用
- wa:等待 I/O 的时间,通常表示磁盘或网络 I/O 成为瓶颈
- hi:处理硬中断消耗的 CPU
- si:处理软中断消耗的 CPU
- st:虚拟化环境中,被宿主机抢占的 CPU 时间
通过观察各状态占比,可以初步判断 CPU 压力是来自应用计算、内核处理、I/O 等待,还是中断或虚拟化开销
# 3、OA或JAVA服务CPU使用率高分析
- 通过arthas找出占用CPU较高的线程,attach到java进程后,通过dashboard以及thread -n 10 >> thread_cpu.txt 导出线程堆栈进行分析
- Linux通过top -Hp 进程号的方式查找java占用cpu高的线程;Windows借助Process Explorer查找占用cpu高的线程。将线程号编码十六进制后再结合jstack导出线程dump,查找对应的线程堆栈。
编撰人:wangyxyf
← 判断是否网络问题步骤 服务器内存使用率高 →