系统性能分析

计算机系统是由四个模块组成,分别是:CPU、网络、磁盘、内存。在程序或者系统出现问题时,应该分别有一定先后顺序的对这四块进行排查。而在Linux系统下,有很多高效的工具,可以帮助分析定位问题。本文对于Linux下常用的工具进行简单的介绍,帮助读者能对这些工具有初步的了解。
在运维工作中常用的性能分析工具包括:vmstat、sar、iostat、netstat、free、ps、top、mpstat以及第三方开发工具,如:dstat、collectl及开源监控项目tsar等。

9.1.1 vmstat监控命令用法
vmstat命令是常见的liunx/unix监控工具,可以通过给定时间间隔来展示的服务器的状态值,包括服务器的CPU使用率、内存使用、虚拟内存交换情况、IO读写情况。这个命令是Linux/unix都支持,相比top,用户可以看到整个机器的CPU、内存、IO的使用情况,而不是单单看到各个进程的CPU使用率和内存使用率,其使用的场景不一样。
一般vmstat工具的使用是通过两个数字参数完成的,第一个参数是采样的时间间隔数,单位是秒,第二个参数是采样的次数

[root@nieepn ~]# vmstat 2 1


以上表示vmstat每2秒采集数据,一直采集,直到用户结束程序,这里采集了5次数据用户就结束了程序。
proc: r这一列显示了多少进程在等待cpu,b列显示多少进程正在不可中断的休眠(等待IO)。
memory: swapd列显示了多少块被换出了磁盘(页面交换),剩下的列显示了多少块是空闲的(未被使用),多少块正在被用作缓冲区,以及多少正在被用作操作系统的缓存。
swap:显示交换活动: 每秒有多少块正在被换如(从磁盘)和换出(到磁盘)。
 io:显示了多少块从块设备读取(bi)和写出(bo),通常反映了硬盘I/O。
system:显示每秒中断(in)和上下文切换(cs)的数量。
cpu:显示所有的cpu时间花费在各类操作的百分比,包括执行用户代码(非内核),执行系统代码(内核),空闲以及等待IO。
 

点击这里点击这里
参数描述
r等待运行的进程数,多少个进程分到了cpu,一般不超过cpu个数是正常的值。
b处于非中断睡眠状态的进程数,即在等待资源分配的进程数,阻塞状态。
swpd虚拟内存已使用的大小(KB),如果大于0,表示机器的物理内存不足,如果不是程序内存泄漏的原因,那么就要升级内存或者把消耗内存的任务迁移到其他机器。
free空闲的物理内存的大小(KB)。
buff用作缓存的内存数,缓存的是文件目录基本内容,在磁盘中的位置。权限等(KB)。
cache用作文件缓存的内存数,对打开的文件做缓存,提高执行效率和使用性能(KB)。
si从磁盘交换到内存的交换页数量,即每秒使用的虚拟内存数量(KB/s)。
so从内存交换到磁盘的交换页数量(KB/s)。
bi发送到块设备一般即磁盘的块数(块/s)。
bo从块设备接收到的块数(块/s)。
in每秒中断次数,包括时钟中断。
cs每秒的上下文切换次数。
us用户cpu使用时间。
sy系统cpu使用时间,如进行I/O操作等。








[root@elk-node1 ~]# man vmstat
Memory
swpd: the amount of virtual memory used.
free: the amount of idle memory.
buff: the amount of memory used as buffers.
cache: the amount of memory used as cache.
inact: the amount of inactive memory. (-a option)
active: the amount of active memory. (-a option)

Swap
si: Amount of memory swapped in from disk (/s).
so: Amount of memory swapped to disk (/s).

IO
bi: Blocks received from a block device (blocks/s).
bo: Blocks sent to a block device (blocks/s).

System
in: The number of interrupts per second, including the clock.
cs: The number of context switches per second.

CPU
These are percentages of total CPU time.
us: Time spent running non-kernel code. (user time, including nice time)
sy: Time spent running kernel code. (system time)
id: Time spent idle. Prior to Linux 2.5.41, this includes IO-wait time.
-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

sar -r 查看内存使用情况,打开sar的日志文件/var/log/sysstat查看,具体如下所示。
[root@nieepn /var/log/sysstat]# sar -r 1 3


kbmemused这个值和free命令中的used值基本一致,所以它包括buffer和cache的空间。%memused物理内存使用率,这个值是kbmemused和内存总量(不包括swap)的一个百分比。kbbuffers和kbcached这两个值就是free命令的buffer和cache。Kbcommit保证当前系统所需要的内存,即为了确保不溢出而需要的内存(RAM+swap)。%commit这个值是kbcommit与内存总量(包括swap)的一个百分比。



sar -u查看cpu使用率,打开sar的日志文件/var/log/sysstat查看
[root@nieepn /var/log/sysstat]# sar -u


其中%user用户模式下消耗的CPU时间比例,%nice通过nice改变了进程调度优先级的进程,在用户模式下消耗的CPU时间的比例,%system系统模式下消耗的CPU的比例,%steal利用Xen等操作系统虚拟化技术,等待其它虚拟CPU计算占用的时间比例。%idie是CPU空闲时间比例。


---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
iostat性能分析命令
iostat用于报告中央处理器(CPU)统计信息和整个系统、适配器、tty设备、磁盘和CD-ROM的输入/输出统计信息,默认显示了与vmstat相同的cpu使用信息,语法格式为。
iostat [参数] [时间] [次数]  



表9.1 iostat命令参数详解

点击这里点击这里
参数说明
-C显示CPU使用情况
-d显示磁盘使用情况
-k以KB为单位显示
-m以M为单位显示
-N显示磁盘陈列(LVM)信息
-n显示NFS使用情况
-p显示磁盘和分区的情况
-t显示终端和CPU的信息
-x显示详细信息





iostat用于监控cpu的统计信息和磁盘信息,下面是输入iostat命令显示的结果。

[root@nieepn ~]# iostat



%user: 用户进程消耗cpu的比例
%nice: 用户进程优先级调整消耗的cpu比例
%sys: 系统内核消耗的cpu比例
%iowait: 等待磁盘io所消耗的cpu比例
%idle: 闲置cpu的比例 


下面是使用命令参数的显示磁盘的详细信息。
[root@nieepn ~]# iostat -d -x -k 1 10  




其中第一行显示的是自系统启动以来的平均值,然后显示增量的平均值,每个设备一行,输出信息的含义。
rrqm/s: 每秒这个设备相关的读取请求有多少被Merge了(当系统调用需要读取数据的时候,VFS
将请求发到各个FS,如果FS发现不同的读取请求读取的是相同Block的数据,FS会将这个请求合并Merge);
wrqm/s: 每秒这个设备相关的写入请求有多少被Merge了。
rsec/s: 每秒读取的扇区数;
wsec/s: 每秒写入的扇区数;
rKB/s: The number of read requests that were issued to the device per second;
wKB/s: The number of write requests that were issued to the device per second;
avgrq-sz: 平均请求扇区的大小;
avgqu-sz: 平均请求队列的长度,毫无疑问,队列长度越短越好;
await: 每个IO请求的处理的平均时间(单位是微秒毫秒);
svctm 表示平均每次设备I/O操作的服务时间(以毫秒为单位),如果svctm的值与await很接近,表示几乎没有I/O等待,磁盘性能很好,如果await的值远高于svctm的值,则表示I/O队列等待太长,系统上运行的应用程序将变慢。
%util: 在统计时间内所以处理IO时间,除以总共统计时间。例如,如果统计间隔1秒,该设备有0.8秒在处理IO,而0.2秒闲置,那么该设备的%util=0.8/1=80%,所以该参数暗示了设备的繁忙程度,一般地,如果该参数是100%表示设备已经接近满负荷运行了(如果是多磁盘,即使%util是100%,因为磁盘的并发能力,所以磁盘使用未必就到了瓶颈)。
常见Linux的磁盘IO指标的缩写习惯:rq是request,r是read,w是write,qu是queue,sz是size,a是average,tm是time,svc是service。
--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------



9.1.6 netstat监控网络状态命令
在Internet RFC标准中,Netstat的定义:Netstat是内核中访问网络连接状态及其相关信息的程序,它能提供TCP连接,TCP和UDP监听,进程内存管理的相关报告。
netstat是控制台命令,是一款监控TCP/IP网络的工具,它可以显示路由表、实际的网络连接以及每一个网络接口设备的状态信息。Netstat用于显示与IP、TCP、UDP、和ICMP协议相关的统计数据,一般用于检验本机各端口的网络连接情况。
netstat命令的功能是显示网络连接、路由表和网络接口信息,可以让用户得知有哪些网络连接正在运作,一般用netstat –an来显示所有连接的端口并用数字表示。如果使用时不带参数,netstat显示活动的TCP连接。
netstat命令的语法格式为
netstat [-a][-e][-n][-o][-p Protocol][-r][-s][Interval]


列出所有的tcp协议的端口。
[root@nieepn ~]# netstat -at


列出所有的udp端口。
[root@nieepn ~]# netstat -au |more


只显示监听端口 netstat -l。
[root@nieepn ~]# netstat -l


只显示监听的tcp端口 netstat -lt。
[root@nieepn ~]# netstat -lt

只显示所有监听udp端口 netstat -lu。
[root@nieepn ~]# netstat -lu


-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

ss连接状态命令
查看服务器连接数一般都会用netstat命令,但ss命令的优势在于它能够显示更多更详细的有关TCP和连接状态的信息,而且比netstat更快速更高效。
ss是Socket Statistics的缩写。顾名思义,ss命令可以用来获取socket统计数据,它可以显示PACKET套接字、TCP套接字、UDP套接字、DCCP套接字、RAW套接字、Unix域套接字等的统计信息。而且允许显示和netstat类似的内容。
ssh快的秘诀在于,它利用到TCP协议栈中tcp_diag。tcp_diag是用于分析统计的模块。可以获得Linux内核中第一手信息,这就确保了ss的快捷高效。当然,如果你的系统中没有tcp_diag,ss也可以正常运行,只是效率会变得稍慢(但仍然比netstat要快)。
ss可以提供以下信息:所有TCP套接字、所有UDP套接字、所有已建立的ssh / ftp / http / https连接、所有本地进程都连接到X服务器、按状态过滤(例如连接,同步,SYN-RECV,SYN-SENT,TIME-WAIT),地址和端口、所有状态为FIN-WAIT-1的tcp套接字等等。
ss命令格式为:
ss [参数]
或:
ss [参数] [过滤] 



下面是一些常见的ss命令。
ss -l 显示本地打开的所有端口
ss -pl 显示每个进程具体打开的socket
ss -t -a 显示所有tcp socket
ss -u -a 显示所有UDP socket
ss -o state established '(dport =:smtp or sport = :smtp )'显示所有已建立的SMTP连接
ss -o state established '(dport =: http or sport =:http)' 显示所有已建立的HTTP连接
ss -X src /tmp/.X11-unix/* 找出所有连接X服务器的进程
ss -S 列出当前socket详细信息

过滤出TCP连接。
[root@nieepn ~]# ss -at

过滤出UDP连接。
 [roo@nieepn ~]# ss -au


只显示监听的套接字。
[root@nieepn ~]# ss -ntl



-------------------------------------------------------------------------------------------------------------------------------------------------------------------
iotop查看IO命令
若想确定哪个进程产生了IO ,就需要iotop工具进行查看,iotop命令是可以查看I/O统计信息排序,追踪到具体的进程,显示当前进程或者线程的使用率
[root@nieepn ~]# iotop

以上输出结果显示可以清楚知道什么程序在读写磁盘,速度以及命令行,pid等信息。












 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值