文章目录
- CPU使用100%怎么办?
- ps命令:查看正在运行的进程
- top命令详解:持续监听进程运行状态
- kill:进程通信
- vmstat
CPU使用100%怎么办?
总的原则是:先止损解决问题,然后再分析原因进行复盘。
先用top或ps查看CPU使用情况,找到占用过大的进程,然后用perf top实时显示占用 CPU 时钟最多的函数或者指令,因此可以用来查找热点函数。
需要重点关注的几个指标:
- 用户 CPU 和 Nice CPU 高,说明用户态进程占用了较多的 CPU,所以应该着重排查进程的性能问题。
- 系统 CPU 高,说明内核态占用了较多的 CPU,所以应该着重排查内核线程或者系统调用的性能问题。
- I/O 等待 CPU 高,说明等待 I/O 的时间比较长,所以应该着重排查系统存储是不是出现了 I/O 问题。
- 软中断和硬中断高,说明软中断或硬中断的处理程序占用了较多的 CPU,所以应该着重排查内核中的中断服务程序。
ps命令:查看正在运行的进程
模糊查找
- ps aux:查看系统中所有的进程;
- ps -ef | grep pid/进程名
ps查找,grep过滤
-e:显示系统内所有进程的信息
-f:使用完整格式显示进程信息
|是管道,使ps和grep能共同使用
准确查询:
- ps -p pid/进程名
- top -pid pid/进程名
top命令详解:持续监听进程运行状态
top 命令可以动态地持续监听
进程地运行状态,而ps只输出当前进程运行状态
top 命令的基本格式:top [选项]
选项:-d 秒数
:指定 top 命令每隔几秒更新。默认是 3 秒;-b
: 使用批处理模式输出。一般和"-n"选项合用,用于把 top 命令重定向到指定的文件中;-n 次数
:指定 top 命令执行的次数。-p 进程PID
:仅查看指定 ID 的进程;-s
: 使 top 命令在安全模式中运行,避免在交互模式中出现错误;-u 用户名
: 只监听某个用户的进程;
比如:
top -b -n 1 > /root/top.log #让top命令只执行一次,然后把执行结果保存到top.log文件中,这样就能看到所有的进程了
输出信息详解
我们看看 top 命令的执行结果,如下:
第一部分: 显示的是整个系统的资源使用状况,我们就是通过这些输出来判断服务器的资源使用状态的;
第二部分:显示的是系统中进程的信息;
第一部分
第一行 :任务队列信息
第二行: 进程信息
第三行: CPU 信息
第四行:物理内存信息
第五行为交换分区(swap)信息
我们通过 top 命令的第一部分就可以判断服务器的健康状态
- 如果 1 分钟、5 分钟、15 分钟的平均负载高于 1,则证明系统压力较大。
- 如果 CPU 的使用率过高或空闲率过低,则证明系统压力较大。如果物理内存的空闲内存过小,则也证明系统压力较大。
这时,我们就应该判断是什么进程占用了系统资源。
- 如果是不必要的进程,就应该结束这些进程;
- 如果是必需进程,那么我们该増加服务器资源(比如増加虚拟机内存),或者建立集群服务器。
第二部分
主要是系统进程信息,各个字段的含义如下:
PID:进程的 ID。
USER:该进程所属的用户。
PR:优先级,数值越小、优先级越高。
NI:优先级,数值越小、优先级越高。
VIRT:该进程使用的虚拟内存的大小,单位为 KB。
RES:该进程使用的物理内存的大小,单位为 KB。
SHR:共享内存大小,单位为 KB。
S:进程状态。
%CPU:该进程占用 CPU 的百分比。
%MEM:该进程占用内存的百分比。
TIME+:该进程共占用的 CPU 时间。
COMMAND:进程的命令名。
kill:进程通信
kill 并不是杀死进程的意思,kill 命令只是用来向进程发送一个信号,至于这个信号是什么,是用户指定的。
原理
kill 命令会向操作系统内核
发送一个信号和目标进程的 PID,然后系统内核根据收到的信号类型,对指定进程进行相应的操作。
kill命令常用信号及其含义
信号编号 | 信号名 | 含义 |
0 | EXIT | 程序退出时收到该信息 |
1 | HUP | 该信号让进程立即关闭.然后重新读取配置文件之后重启 |
2 | INT | 表示结束进程,但并不是强制性的,同 |
3 | QUIT | 退出 同 |
9 | SIGKILL | 用来立即结束程序的运行。本信号不能被阻塞、处理和忽略。一般用于 |
11 | SEGV | 段错误 |
14 | SIGALRM | 时钟定时信号,计算的是实际的时间或时钟时间。alarm 函数使用该信号 |
15 | SIGTERM | 正常结束进程的信号,kill 命令的 |
18 | SIGCONT | 该信号可以让暂停的进程恢复执行。本信号不能被阻断 |
19 | SIGSTOP | 该信号可以暂停前台进程,同 |
vmstat
vmstat命令,是 Virtual Meomory Statistics(虚拟内存统计)的缩写,可用来监控 CPU 使用、进程状态、内存使用、虚拟内存使用、硬盘输入/输出状态
等信息。此命令的基本格式有如下 2 种:
[root@localhost ~]# vmstat [-a] [刷新延时 刷新次数]# -a 的含义是用 inact/active(活跃与否) 来取代 buff/cache 的内存输出信息。
[root@localhost ~]# vmstat [选项]
下表罗列出了 vmstat 命令的第二种基本格式中常用的选项及各自的含义。
[root@localhost proc]# vmstat 1 3
#使用vmstat检测,每隔1秒刷新一次,共刷新3次
procs ——memory—— swap —io system ——cpu——
r b swpd free buff cache si so bi bo in cs us sy id wa st
r b swpd free buff cache si so bi bo in cs us sy id wa st
0 0 0 407376 55772 84644 0 0 5 2 9 10 0 0 100 0 0
该命令输出信息中,各个字段以及含义如下表 :
如果服务器上的资源占用率比较高,我们就需要手工进行干预。如果是非正常进程占用了系统资源,则需要判断这些进程是如何产生的,不能一杀了之;如果是正常进程占用了系统资源,则说明服务器需要升级了。