Linux系统性能分析工具

一、CPU

1、top命令

top命令是一个常用的监控系统性能的工具,它能够实时显示系统整体运行情况,包括系统负载、CPU使用分布情况、内存使用情况以及每个进程的资源占用情况等。
top的使用方法:

使用格式:
top [-] [d] [p] [q] [c] [C] [S] [s] [n]
参数说明:
d:指定每两次屏幕信息刷新之间的时间间隔。当然用户可以使用s交互命令来改变之。
p:通过指定监控进程ID来仅仅监控某个进程的状态。
q:该选项将使top没有任何延迟的进行刷新。如果调用程序有超级用户权限,那么top将以尽可能高的优先级运行。
S:指定累计模式。
s:使top命令在安全模式中运行。这将去除交互命令所带来的潜在危险。
i:使top不显示任何闲置或者僵死进程。
c:显示整个命令行而不只是显示命令名。

常用命令说明:

Ctrl+L:擦除并且重写屏幕
K:终止一个进程。系统将提示用户输入需要终止的进程PID,以及需要发送给该进程什么样的信号。一般的终止进程可以使用15信号;如果不能正常结束那就使用信号9强制结束该进程。默认值是信号15。在安全模式中此命令被屏蔽。
i:忽略闲置和僵死进程。这是一个开关式命令。
q:退出程序
r:重新安排一个进程的优先级别。系统提示用户输入需要改变的进程PID以及需要设置的进程优先级值。输入一个正值将使优先级降低,反之则可以使该进程拥有更高的优先权。默认值是10。
S:切换到累计模式。
s:改变两次刷新之间的延迟时间。系统将提示用户输入新的时间,单位为s。如果有小数,就换算成m s。输入0值则系统将不断刷新,默认值是5 s。需要注意的是如果设置太小的时间,很可能会引起不断刷新,从而根本来不及看清显示的情况,而且系统负载也会大大增加。
f或者F:从当前显示中添加或者删除项目。
o或者O:改变显示项目的顺序
l:切换显示平均负载和启动时间信息。
m:切换显示内存信息。
t:切换显示进程和CPU状态信息。
c:切换显示命令名称和完整命令行。
M:根据驻留内存大小进行排序。
P:根据CPU使用百分比大小进行排序。
T:根据时间/累计时间进行排序。
W:将当前设置写入~/.toprc文件中。

默认情况下仅显示比较重要的 PID、USER、PR、NI、VIRT、RES、SHR、S、%CPU、%MEM、TIME+、COMMAND 列。可以通过下面的快捷键来更改显示内容。

序号 列名 含义
a PID 进程id
b PPID 父进程id
c RUSER Real user name
d UID 进程所有者的用户id
e USER 进程所有者的用户名
f GROUP 进程所有者的组名
g TTY 启动进程的终端名。不是从终端启动的进程则显示为 ?
h PR 优先级
i NI nice值。负值表示高优先级,正值表示低优先级
j P 最后使用的CPU,仅在多CPU环境下有意义
k %CPU 上次更新到现在的CPU时间占用百分比
l TIME 进程使用的CPU时间总计,单位秒
m TIME+ 进程使用的CPU时间总计,单位1/100秒
n %MEM 进程使用的物理内存百分比
o VIRT 进程使用的虚拟内存总量,单位kb。VIRT=SWAP+RES
p SWAP 进程使用的虚拟内存中,被换出的大小,单位kb。
q RES 进程使用的、未被换出的物理内存大小,单位kb。RES=CODE+DATA
r CODE 可执行代码占用的物理内存大小,单位kb
s DATA 可执行代码以外的部分(数据段+栈)占用的物理内存大小,单位kb
t SHR 共享内存大小,单位kb
u nFLT 页面错误次数
v nDRT 最后一次写入到现在,被修改过的页面数。
w S 进程状态。(D=不可中断的睡眠状态,R=运行,S=睡眠,T=跟踪/停止,Z=僵尸进程)
x COMMAND 命令名/命令行
y WCHAN 若该进程在睡眠,则显示睡眠中的系统函数名
z Flags 任务标志,参考 sched.h

在这里插入图片描述显示信息解释:
在命令行输入top,进入系统监控信息的交互界面,第一行解释如下:

13:46:53   当前的时间
up  1:21,  系统运行时间
1 user,      当前登录用户数
load average: 2.15, 2.10, 2.08 系统负载,即任务队列的平均长度。 三个数值分别为 1分钟、5分钟、15分钟前到现在的平均值。

在命令行输入top,进入系统监控信息的交互界面,第二、三行为进程和CPU的信息,当有多个CPU时,这些内容可能会超过两行,
第二、三行解释如下:

216 total	  进程总数
1 running	  正在运行的进程数
215 sleeping  睡眠的进程数
0 stopped	  停止的进程数
0 zombie	  僵尸进程数
0.0 us	      用户空间占用CPU百分比
0.1 sy	      内核空间占用CPU百分比
0.0 ni	      用户进程空间内改变过优先级的进程占用CPU百分比
99.9 id	      空闲CPU百分比
0.0 wa	      等待输入输出的CPU时间百分比
0.0 hi	      硬中断(Hardware IRQ)占用CPU的百分比
0.0 si	      软中断(Software Interrupts)占用CPU的百分比
0.0 st	      虚拟CPU等待实际CPU的时间的百分比。

第四行及第五行主要显示系统的内存信息

KiB Mem: 12119056 tota	 物理内存总量
10016948 free	         空闲内存总量
923252 used       	     使用的物理内存总量
1178856 buff/cache	     用作内核缓存的内存量
KiB Swap: 2093052 total	 交换区总量
267544 used	             使用的交换区总量
2093052 free	         空闲交换区总量
0 used	                 缓冲的交换区总量。
10742188 avail Mem	     代表可用于进程下一次分配的物理内存数量

2、htop命令

命令安装
root@kylin:~#  sudo apt install htop
获取帮助
root@kylin:~#  htop -h
查看版本
root@kylin:~#  htop -v
查看指定的进程    #-p参数查看指定进程信息
root@kylin:~# htop -p 4035
查看指定的用户
root@kylin:~# htop -u kylin
指定刷新时间
root@kylin:~# htop -d 50

在这里插入图片描述区域一:CPU、内存、Swap的使用情况;
区域二:任务、线程、平均负载及系统运行时间的信息。平均负载部分提供了三个数字,这仅仅表示的是过去的5分钟、10分钟和15分钟系统的平均负载而已。uptime标示的数字是从系统启动起到当前的运行总时间。
区域三:当前系统中的所有进程。各列说明:
PID:进程标志号,是非零正整数
USER:进程所有者的用户名
PR:进程的优先级别
NI:进程的优先级别数值
VIRT:进程占用的虚拟内存值
RES:进程占用的物理内存值
SHR:进程使用的共享内存值
S:进程的状态,其中S表示休眠,R表示正在运行,Z表示僵死状态,N表示该进程优先值是负数
%CPU:该进程占用的CPU使用率
%MEM:该进程占用的物理内存和总内存的百分比
TIME+:该进程启动后占用的总的CPU时间
COMMAND:进程启动的启动命令名称
区域四:当前界面中F1-F10功能键中定义的快捷功能。
kill指定进程
在这里插入图片描述

3、vmstat

vmstat可以展现给定时间间隔的服务器的状态值,包括服务器的CPU使用率,内存使用,虚拟内存交换情况,IO读写情况。这个命令是我查看Linux/Unix最喜爱的命令,一个是Linux/Unix都支持,二是相比top,我可以看到整个机器的CPU,内存,IO的使用情况,而不是单单看到各个进程的CPU使用率和内存使用率(使用场景不一样)
vmstat命令: 用来获得有关进程、虚存、页面交换空间及 CPU活动的信息。一般vmstat工具的使用是通过两个数字参数来完成的,第一个参数是采样的时间间隔数,单位是秒,第二个参数是采样的次数,如:
在这里插入图片描述2表示每个两秒采集一次服务器状态,1表示只采集一次。
各个参数的含义:

r 表示运行队列(就是说多少个进程真的分配到CPU),我测试的服务器目前CPU比较空闲,没什么程序在跑,当这个值超过了CPU数目,就会出现CPU瓶颈了。这个也和top的负载有关系,一般负载超过了3就比较高,超过了5就高,超过了10就不正常了,服务器的状态很危险。top的负载类似每秒的运行队列。如果运行队列过大,表示你的CPU很繁忙,一般会造成CPU使用率很高。
b 表示阻塞的进程,这个不多说,进程阻塞,大家懂的。
swpd 虚拟内存已使用的大小,如果大于0,表示你的机器物理内存不足了,如果不是程序内存泄露的原因,那么你该升级内存了或者把耗内存的任务迁移到其他机器。
free   空闲的物理内存的大小,我的机器内存总共8G,剩余3415M。
buff   Linux/Unix系统是用来存储,目录里面有什么内容,权限等的缓存,我本机大概占用300多M
cache cache直接用来记忆我们打开的文件,给文件做缓冲,我本机大概占用300多M(这里是Linux/Unix的聪明之处,把空闲的物理内存的一部分拿来做文件和目录的缓存,是为了提高 程序执行的性能,当程序使用内存时,buffer/cached会很快地被使用。)
si  每秒从磁盘读入虚拟内存的大小,如果这个值大于0,表示物理内存不够用或者内存泄露了,要查找耗内存进程解决掉。我的机器内存充裕,一切正常。
so  每秒虚拟内存写入磁盘的大小,如果这个值大于0,同上。
bi  块设备每秒接收的块数量,这里的块设备是指系统上所有的磁盘和其他块设备,默认块大小是1024byte,我本机上没什么IO操作,所以一直是0,但是我曾在处理拷贝大量数据(2-3T)的机器上看过可以达到140000/s,磁盘写入速度差不多140M每秒		
bo 块设备每秒发送的块数量,例如我们读取文件,bo就要大于0。bi和bo一般都要接近0,不然就是IO过于频繁,需要调整。
in 每秒CPU的中断次数,包括时间中断
cs 每秒上下文切换次数,例如我们调用系统函数,就要进行上下文切换,线程的切换,也要进程上下文切换,这个值要越小越好,太大了,要考虑调低线程或者进程的数目,例如在apache和nginx这种web服务器中,我们一般做性能测试时会进行几千并发甚至几万并发的测试,选择web服务器的进程可以由进程或者线程的峰值一直下调,压测,直到cs到一个比较小的值,这个进程和线程数就是比较合适的值了。系统调用也是,每次调用系统函数,我们的代码就会进入内核空间,导致上下文切换,这个是很耗资源,也要尽量避免频繁调用系统函数。上下文切换次数过多表示你的CPU大部分浪费在上下文切换,导致CPU干正经事的时间少了,CPU没有充分利用,是不可取的。
us 用户CPU时间,我曾经在一个做加密解密很频繁的服务器上,可以看到us接近100,r运行队列达到80(机器在做压力测试,性能表现不佳)。
sy 系统CPU时间,如果太高,表示系统调用时间长,例如是IO操作频繁。
id  空闲 CPU时间,一般来说,id + us + sy = 100,一般我认为id是空闲CPU使用率,us是用户CPU使用率,sy是系统CPU使用率。
wa Wa过高时,说明io等待比较严重,这可能是由于磁盘大量随机访问造成的,也有可能是磁盘的带宽出现瓶颈。

二、内存

1、 free

free命令用于显示内存状态,free指令会显示内存的使用情况,包括实体内存,虚拟的交换文件内存,共享内存区段,以及系统核心使用的缓冲区等。
在这里插入图片描述在这里插入图片描述Men:表示物理内存统计

-/+ buffers/cache :表示物理内存的缓存统计
(-buffers/cache)表示真正使用的内存数, (+buffers/cache) 表示真正未使用的内存数

Swap :表示硬盘上的交换分区的使用情况
各个参数的含义:

total:表示总物理内存的大小
used:表示已使用多少
free:表示可用内存多少
shared:表示多个进程共享的内存总额
buffers/cached:表示磁盘缓存的大小

2、top

查看top第四行,不再赘述。

3、vmstat

看memory列

三、硬盘

1、df

df指令主要用于显示文件系统的磁盘空间使用情况。

df  显示所有文件系统的磁盘空间使用情况
df /home 显示指定目录的磁盘空间使用情况
df -h  以可读的格式磁盘使用情况
df -t ext4 显示指定文件系统类型的磁盘空间使用情况

在这里插入图片描述

2、iotop

iotop命令是一个用来监视磁盘I/O使用状况的top类工具。它提供与top类似的用户界面,显示PID、用户、I/O、进程等相关信息。大多数基于Linux的IO统计工具如iostat、nmon等只能统计各个设备的读写情况,如果你想了解每个进程如何使用IO,则比较麻烦。而使用iotop命令可以方便地查看这些信息。
iotop [选项]

-o:只显示有io操作的进程 
-b:批量显示,无交互,主要用作记录到文件。 
-n NUM:显示NUM次,主要用于非交互式模式。 
-d SEC:间隔SEC秒显示一次。 
-p PID:监控的进程pid。 
-u USER:监控的进程用户。

iotop常用快捷键

左右箭头:改变排序方式,默认是按IO排序。
r:改变排序顺序。 
o:只显示有IO输出的进程。 
p:进程/线程的显示方式的切换。 
a:显示累积使用量。 
q:退出。

时间刷新间隔2秒,输出5次
iotop -d 2 -n 5
非交互式,输出5次,间隔2秒,输出到屏幕,也可输出到日志文本,用于监控某时间段的io信息
iotop -botq -n 5 -d 2
非交互式,输出pid为8382的进程信息
iotop -botq -p 8382
在这里插入图片描述

3、vmstat

看io列

四、网络流量

1、iftop

iftop是一款实时流量监控工具,监控TCP/IP连接等,缺点就是无报表功能。必须以root身份才能运行。

iftop   #默认监控的是第一块网卡
iftop -i ens33   #指定网卡
iftop -F 192.168.3.0/24   #显示某个网段进出封包流量

在这里插入图片描述显示说明:

第一部分:iftop 输出中最上面的一行,此行信息是流量刻度,用于显示网卡带宽流量。
第二部分:
1.中间的<= =>这两个左右箭头,表示的是流量的方向。
2.其中又分别分为左、中、右三列。左列和中列,记录了哪些 IP 或主机正在和本机的网络进行连接。其中,中列的“=>”代表发送数据,“<=”代表接收数据,通过这个指示箭头可以很清晰地知道两个 IP 之间的通信情况。
3.最右列又分为三小列,这些实时参数分别表示外部 IP 连接到本机 2 秒内、10 秒内和 40 秒内的平均流量值。
第三部分:
分割线最下面的一部分,用来统计网卡流量信息。

2、iptraf

iptraf命令可以实时地监视网卡流量,可以生成网络协议数据包信息、以太网信息、网络节点状态和ip校验和错误等信息。

iptraf[选项]
-i网络接口:立即在指定网络接口上开启IP流量监视;
-g:立即开始生成网络接口的概要状态信息;
-d网络接口:在指定网络接口上立即开始监视明细的网络流量信息;
-s网络接口:在指定网络接口上立即开始监视TCP和UDP网络流量信息;
-z网络接口:在指定网络接口上显示包计数;
-l网络接口:在指定网络接口上立即开始监视局域网工作站信息;
-t时间:指定iptraf指令监视的时间;
-B;将标注输出重新定向到“/dev/null”,关闭标注输入,将程序作为后台进程运行;
-f:清空所有计数器;
-h:显示帮助信息。

五、网络连接

1、netstat

Netstat 命令用于显示各种网络相关信息,如网络连接,路由表,接口状态 (Interface Statistics),masquerade 连接,多播成员 (Multicast Memberships) 等。

netstat -anp   #显示程序的pid和名称
netstat -r     #输出本机路由表
netstat -lts   #输出监听状态中的tcp协议统计信息
netstat -an    #查看哪些IP连接本机
netstat -l     #只显示监听端口
netstat -lt    #只列出所有监听 tcp 端口
netstat -anp |grep ':80'  #找出运行在指定端口的进程  类似于lsof -i:端口号 用于查看某一端口的占用情况,比如查看80端口使用情况,lsof -i:80
netstat -nat | grep -i "80" | wc -l   #统计80端口连接数
ps -ef | grep httpd | wc -l   #统计httpd协议连接数

常见参数:

-a (all)显示所有选项,默认不显示LISTEN相关
-t (tcp)仅显示tcp相关选项
-u (udp)仅显示udp相关选项
-n 拒绝显示别名,能显示数字的全部转化成数字。
-l 仅列出有在 Listen (监听) 的服務状态
-p 显示建立相关链接的程序名
-r 显示路由信息,路由表
-e 显示扩展信息,例如uid等
-s 按各个协议进行统计
-c 每隔一个固定时间,执行该netstat命令。

netstat -a |more #列出所有的端口号(包括监听和未监听的)
在这里插入图片描述netstat -at #列出所有 tcp 端口
在这里插入图片描述netstat -au #列出所有 udp 端口
在这里插入图片描述

2、ss

ss是Socket Statistics的缩写。
ss命令用来显示处于活动状态的套接字信息,它可以显示和netstat类似的内容。与netstat对比,其优势:

ss能够显示更多更详细的有关TCP、UDP和连接状态等信息。
ss比netstat更快速更高效。

ss常用的参数:

参数	说明
-a	显示所有套接字
-l	显示处于监听状态的套接字
-n	不解析服务名称,以数字形式显示
-p	显示使用套接字的进程
-t	只显示TCP协议的套接字
-u	只显示UDP协议的套接字

在这里插入图片描述

六、进程

1、ps

查看系统进程,比如正在运行的进程有哪些,什么时候开始运行的,哪个用户运行的,占用了多少资源。
参数:

-e     显示所有进程
-f     显示所有字段(UID,PPIP,C,STIME字段)
-h    不显示标题
-l     长格式
-w    宽输出
-a     显示一个终端的所有进程
-r    只显示正在运行的进程。
-u    显示当前用户进程和内存使用情况
-x    显示没有控制终端的进程
–sort     按照列名排序

ps命令常用的方式有三种:

ps -ef:查看所有进程
ps -aux:查看所有进程
ps -ef | grep tomcat:查看指定进程(| 符号,是个管道符号,表示ps 和 grep 命令同时执行)

ps -ef #查看所有进程
在这里插入图片描述 字段解释:

UID:用户ID,即进程的拥有者
PID:进程ID
PPID:该进程的父级进程id,如果一个程序的父级进程找不到,该程序的进程被称为僵尸进程
C:cpu的占用率,形式是百分数(%)
STIME:进程开始启动时间
TTY:终端设备,发起该进程的设备识别符号,如果显示‘ ?’表示该进程并不是由终端发起
TIME:进程的执行时间
CMD:该进程的名称或对应的路径

ps -aux #显示所有包含其他使用者的进程
在这里插入图片描述字段解释:

USER:创建进程的用户
PID:进程ID
%CPU:进程占用CPU的百分比
%MEM:进程占用物理内存的百分比
VSZ:进程占用虚拟内存的大小(单位KB)
RSS:进程占用实际物理内存的大小(单位KB)
TTY:进程在哪个终端运行。
STAT:进程状态
START:进程开始启动的时间TIME:进程使用的CPU(运算)时间
COMMAND:调用进程的命令

查看CPU/内存占用率最高的进程

ps -aux --sort=-pcpu | head -11 
 #查看进程的时候,让进程按照CPU使用率排序,然后展示前10行,就能清晰地看到哪些进程占用的资源比较多。
+、-号可以调整排序,-pcpu 表示降序,+pcpu 表示升序
head -11 显示10行,标题占一行

ps -aux --sort=-pmem | head -11
#把 -pcpu 换成 -pmem,就能查看内存使用最多的10个进程

在这里插入图片描述在这里插入图片描述查看指定用户的进程

ps -u root -ef  #查看某个用户开启了哪些进程,可以使用 -u 参数指定用户名

分页查看进程

ps -ef | more  #翻页的操作同 more 命令,q键退出,空格键翻页

2、top

老生常谈,不再赘述,看top第一列PID
在这里插入图片描述

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值