但是在top界面,我们偶尔可能会发现有的是cpu占有率70%.而且一直居高不下.
这里我们简单展示下,然后通过 pidstat
详细查看下进程.
造成这种情况有两个原因:
1.进程在不停的重启(段错误或配置错误)
2.这些进程都是短时进程,也就是在其他应用内部通过 exec 调用的外面命令。
我们也可以用perf record -g
,记录性能事件,然后使用 perf report
查看.
execsnoop 就是一个专为短时进程设计的工具。它通过 ftrace
实时监控进程的 exec()
行为,并输出短时进程的基本信息,包括进程 PID、父进程 PID、命令行参数以及执行的结果。
我们也可以查看下获取占用CPU资源最多的10个进程:
> ps aux|head -1;ps aux|grep -v PID|sort -rn -k +3|head
或者获取占用内存资源最多的10个进程:
通常我都是用占用内存最高的进程命令先查看哪些进程占用了最大的资源:
> ps aux|head -1;ps aux|grep -v PID|sort -rn -k +4|head
USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND
root 1864 1.4 0.9 268496 156944 ? S<sl Jun16 164:09 /usr/local/aegis/aegis_client/aegis_10_79/AliYunDun
root 715 0.0 0.8 240300 140076 ? Ss Jun16 1:51 /usr/lib/systemd/systemd-journald
root 1564 0.0 0.1 1132192 18484 ? Ssl Jun16 1:28 /usr/sbin/rsyslogd -n
nobody 28146 0.3 0.1 119084 17420 ? Ssl 10:44 0:02 /usr/local/node_exporter/node_exporter
其中第一句主要是为了获取标题(USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND)
。
接下来的 grep -v PID
是将 ps aux
命令得到的标题去掉,即 grep
不包含 PID
这三个字母组合的行,再将其中结果使用sort排序。
sort -rn -k +3
该命令中的 -rn
的 r
表示是结果倒序排列,n为以数值大小排序,而 -k +3
则是针对第3列的内容进行排序,再使用head命令获取默认前10行数据。(其中的 |
表示管道操作)
PID:进程的ID
PR:进程的优先级别,越小越优先被执行
VIRT:进程占用的虚拟内存
RES:进程占用的物理内存
SHR:进程使用的共享内存
S:进程的状态。S表示休眠,R表示正在运行,Z表示僵死状态,N表示该进程优先值为负数
%CPU:进程占用CPU的使用率
%MEM:进程使用的物理内存和总内存的百分比
COMMAND:进程启动命令名称
我们可以根据这两个命令获取到占用服务器资源最多的进程,然后逐一排查原因解决问题.
性能测试命令
此外我们还可以使用iperf
和 netperf
作为网络性能测试工具,测试 TCP
和 的吞吐量。
它们都以客户端和服务器通信的方式,测试一段时间内的平均吞吐量。