Linux常用的查看系统运行状态的工具

Linux中分析用户程序的性能工具有很多,以下是一些常用的性能分析工具:

1.top或htop

top命令实时打印出系统状态。top -h提示的使用帮助信息很简短,需要运行man top才会显示详细的使用帮助信息。htop是top的增强版本。常用的参数是

top uxxx,间隔1秒打印以xxx用户名运行的程序的内存、cpu、时间等实时信息。

top pxxx,间隔1秒打印pid为xxx的程序的的内存、cpu、时间等实时信息。

在top打印内容期间,按大写字母P表示按CPU占用率排序,按大写字母M表示按内存占用率排序,按大写字母N表示按pid排序,按大写字母T表示按程序累积运行时间排序。

top命令打印的内容解释

  • us (user):表示CPU在用户模式下花费的时间百分比。换句话说,这是应用程序代码执行的时间(不包括内核代码)。
  • sy (system):表示CPU在内核模式下花费的时间百分比。当系统调用或硬件中断发生时,CPU会切换到内核模式来执行代码。
  • ni (nice):表示CPU在“nice”用户模式下花费的时间百分比。在Linux中,可以使用nice命令或renice命令来更改进程的优先级。具有更高“nice”值的进程将有更低的优先级。0.0%表示没有CPU时间用于nice用户进程。
  • id (idle):表示CPU空闲的时间百分比。当没有进程需要使用CPU时,CPU就会处于空闲状态。
  • wa (iowait):表示CPU等待I/O操作完成的时间百分比。例如,当CPU等待磁盘读取或写入完成时,它会处于iowait状态。数字越小表示CPU很少在等待I/O操作。
  • hi (hardirq):表示CPU处理硬件中断的时间百分比。硬件中断是由硬件设备(如键盘、鼠标或网络接口卡)触发的。0.0%表示CPU没有在处理硬件中断。
  • si (softirq):表示CPU处理软件中断的时间百分比。软件中断是由内核中的某些事件触发的,例如定时器到期或网络数据包的到达。
  • st (steal):在使用虚拟化技术(如Xen或KVM)时才有意义。它表示CPU被其他虚拟机“窃取”的时间百分比。0.0%表示没有CPU时间被其他虚拟机窃取。
  • PID (Process ID):进程的唯一标识符,用于在系统中唯一地识别进程。
  • USER (用户名):运行该进程的用户名。
  • PR (Priority):进程的优先级。这个数字通常与调度器如何处理进程相关,但PR值本身并不直接反映实时优先级(如果有的话)。PR值越低,进程优先级越高。
  • NI (Nice value):Nice值用于调整进程的优先级,使其相对于其他进程更有利或更不利。一个更高的Nice值意味着进程具有更低的优先级。Nice值是0,表示没有进行调整。
  • VIRT (Virtual Memory Size):进程使用的虚拟内存总量,以KB为单位。这包括进程使用的所有内存,无论这些内存是否实际驻留在RAM中。
  • RES (Resident Set Size):进程当前在物理内存中占用的内存大小,以KB为单位。这通常不包括交换出去的部分。
  • SHR (Shared Memory):与其他进程共享的内存大小,以KB为单位。
  • S (Status):进程的状态。S(sleeping,进程当前处于休眠状态,等待某个条件发生(如I/O操作完成或某个信号))、R(running,正在运行或可运行)、D(disk sleep,不可中断的休眠,通常是在等待I/O操作)、Z(zombie,僵尸进程,父进程已经结束但子进程尚未被清理)等。
  • CPU%:自上次更新以来,进程占用的CPU时间百分比。top命令默认刷新间隔是1秒。
  • MEM%:进程占用的物理内存百分比。
  • TIME+:CPU时间,显示进程已经运行的总时间(包括用户模式和内核模式),以及自系统启动以来经过的时间。小数点前是秒,例如0:11.47表示11秒470毫秒。
  • COMMAND:进程的命令行名称或路径。

2.sar

sar(System Activity Reporter):它可以从多方面对系统的活动进行报告,包括文件的读写情况、系统调用的使用情况、磁盘I/O、CPU效率、内存使用状况、进程活动及IPC有关的活动等。sar命令来自于sysstat工具包,如果系统中没有安装sysstat,需要先安装该工具包才能使用sar命令。

常用的sar命令选项:
-A:显示所有报告(CPU、内存、磁盘I/O等)。
-u:显示CPU使用率报告。
-q:显示队列长度和平均负载。
-w:显示任务创建与系统转换信息。
-r:显示内存和交换空间使用情况报告。
-b:显示I/O和传输率统计报告。
-d:显示磁盘使用情况报告。
-n [DEV|SOCK|NFD|IP|EDEV|ICMP|TCP|UDP]:显示网络相关报告,如网络设备(DEV)、套接字(SOCK)等。
-s和-e用于指定报告的开始和结束时间(以时间戳或日期时间格式)。
-P:指定要监控的CPU编号(在多核CPU系统中)。
-f:用于从文件中读取历史数据等。

常用的命令
sar -A

显示包括CPU使用率、内存使用、磁盘I/O等所有系统资源设备的运行情况报告。

3.vmstat

vmstat命令显示包括进程、内存、分页、块IO、CPU活动的信息。

vmstat 命令有一些选项可以修改其输出:

-a:显示活动的和非活动的内存。  
-d:显示磁盘统计信息。  
-f`:显示从系统启动以来的fork数量。  
-m:显示slab信息。  
-n:仅在头部显示单位信息。  
-s:显示内存统计信息(与不带任何选项的 `vmstat` 相同)。  
-t:显示终端和CPU统计信息。  
-S M:以MB为单位显示内存统计信息(可以使用 K、M 或 G 作为单位)。  
--partition=PARTITION:仅显示指定分区的信息(与 `-d` 一起使用)。  
--units=UNITS:设置显示的单位(K、M 或 G)。  
DELAY:两次显示之间的延迟秒数(浮点数)。

常用的用法是

vmstat 2,间隔2秒打印信息。

输出通常包括以下列

procs:
   r:等待运行的可中断进程数)
   b:等待I/O的进程数  
memory:
   swpd:交换到磁盘的可用内存
   free:空闲物理内存
   buff:缓冲区中用于块I/O的内存
   cache:缓存的内存  
swap:
   s:每秒从交换区到内存的交换页数量
   so:每秒从内存到交换区的交换页数量。  
io:
   bi:每秒从块设备接收的块数
   bo:每秒发送到块设备的块数  
system:
   in:每秒的中断数,包括时钟中断
   cs:每秒的上下文切换数
cpu:
   us:用户空间占用CPU的百分比
   sy:内核空间占用CPU的百分比
   id:空闲CPU的百分比
   wa:等待I/O的CPU的百分比
   st:被虚拟机偷走的CPU时间百分比,通常只在虚拟机中看到

4.netstat

netstat命令用于显示网络连接、路由表、接口统计等网络相关信息的命令。

常用参数:
-a:列出所有当前网络连接和监听端口
-tulnp:同时显示 TCP 和 UDP 连接,并以数字形式显示地址和端口号(不进行 DNS 解析)
-t:仅显示 TCP 连接
-u:仅显示 UDP 连接
-r:显示路由表信息
-s:显示网络统计信息:
-n:以数字形式显示地址和端口号(不进行 DNS 解析)
-p:显示与连接关联的进程

5.ifstat

ifstat命令是一个用于监控网络接口流量状态的Linux命令。它可以整齐地打印出网络接口统计信息,并可以用来禁用指定的网络接口(尽管这通常不是其主要用途)。

常用选项
-l:查看所有网络接口(包括环路lo接口)的流量状态。如果不加-l参数,则只显示经过网卡的流量。
直接运行 ifstat 命令会显示所有活动网络接口的下载和上传速度。
-n x:表示x秒打印一次。

-t:表示的报告每一行开头加上系统时间。

6.iostat

iostat命令用于监视系统的磁盘输入/输出(I/O)活动。iostat命令是sysstat软件包的一部分,使用之前需要先安装sysstat软件包。

打印的信息含义
CPU利用率(avg-cpu)
   %user:CPU在用户态执行进程的时间百分比
   %nice:在具有良好优先级的用户级别执行时发生的CPU利用率百分比
   %system:在系统级(内核)执行时发生的CPU利用率百分比
   %iowait:在系统有未完成的磁盘I/O请求期间CPU空闲的时间百分比
   %steal:显示虚拟机管理程序为另一个虚拟机处理器服务时,虚拟CPU或多个CPU在非自愿等待上花费的时间百分比
   
设备利用率
   Device:这一列显示了正在被监控的磁盘设备的名称。例如,/dev/sda 表示第一个SCSI或SATA硬盘。
   tps (Transfers-per-second):这一列显示了每秒从设备启动的传输次数。一个传输就是一个I/O请求。多个逻辑请求可能会被合并成一个单一的I/O请求,因此tps值不一定等于在应用程序级别看到的I/O请求数。
   kB_read/s (Kilobytes read per second):这一列显示了每秒从设备读取的千字节数。它表示了磁盘读取活动的速率。
   kB_wrtn/s (Kilobytes written per second):这一列显示了每秒写入设备的千字节数。它表示了磁盘写入活动的速率。
   kB_read (Total kilobytes read):这一列显示了自iostat启动以来(或者从最近的-reset开始),从设备读取的总千字节数。这是累积的数值。
   kB_wrtn (Total kilobytes written):这一列显示了自iostat启动以来(或者从最近的-reset开始),写入设备的总千字节数。这也是累积的数值。

常用选项:
-t:在输出数据时,打印搜集数据时的时间。
-x:输出扩展信息。
-k、-m:某些block为单位的列强制使用KB或者M。
-p:用于显示块设备及系统分区的统计信息。
-c:显示CPU利用率。
-d:显示磁盘利用率。
-h:以容易被人阅读模式展示。
-N:显示磁盘阵列信息。

使用示例:
iostat -x 1 -p /dev/sdb:查看磁盘/dev/sdb所有分区IO流量情况,统计间隔为1秒。
iostat -p ALL:显示所有的分区情况。

7.lsof命令

lsof(List Open Files)是一个列出当前系统打开的文件的工具。它不仅可以显示打开的文件,还可以显示打开的网络连接、设备文件等。

基本用法:
lsof /path/to/file:列出打开指定路径文件的进程。
lsof -i:列出所有打开的网络连接。
lsof -i :port:列出监听指定端口的进程。
lsof -i 4:列出所有IPv4网络连接。
lsof -i 6:列出所有IPv6网络连接。
lsof -i UDP:列出所有UDP网络连接。
lsof -i TCP:列出所有TCP网络连接。
lsof -p PID:列出指定进程ID(PID)打开的文件。
lsof +D /path/to/directory:列出指定目录下所有打开的文件。
lsof -c process_name:列出包含指定进程名的进程打开的文件。
lsof -u username:列出指定用户打开的文件。
lsof -d descriptor [-c process_name]:列出指定文件描述符(descriptor)的进程打开的文件。
lsof -s protocol[:service]:列出使用指定协议和服务的进程。
lsof -n:不要解析网络地址(IP地址和端口号)。
lsof -a:显示多个条件的组合结果。

8.dstat命令

dstat是一个在 Linux 系统中用于替代 vmstat、netstat、ifstat、iostat工具,用于收集和报告系统资源统计信息。它提供了更多的功能和更好的可读性。

常用选项
-c:显示 CPU 使用率的统计信息。
-d:显示磁盘读写情况的统计信息。
-m:显示内存使用情况的统计信息。
-n:显示网络传输情况的统计信息。
-s:显示系统调用情况的统计信息。
-y:显示 I/O 操作的统计信息。
这些选项可以组合使用,例如 dstat -cdm 将同时显示 CPU、磁盘和内存的统计信息。

指定时间间隔
使用 -t 选项,后接时间间隔(秒),可以控制刷新频率。例如,dstat -t 2 表示每 2 秒刷新一次统计数据。

输出到文件
将 dstat 的输出保存到一个文件中,可以使用重定向操作符 >。例如,dstat -cdmnys > output.csv 将把完整的系统资源统计信息输出到 output.csv 文件中。

完整示例
想要每 5 秒刷新一次统计数据,并同时显示 CPU、磁盘、内存、网络和 I/O 的统计信息,可以将这些选项组合起来使用:dstat -cdmnys -t 5。

额外特性
dstat 突破了 vmstat、iostat、ifstat 的一些限制,并增加了一些额外特性。
使用 dstat -p 或 --proc 可以显示当前时刻的进程状态,如可运行态(就绪态)、无法中断的睡眠态(等待态)等。

9.pstack命令

pstack命令是Linux下的一个强大工具,用于查看指定进程(PID)的函数调用栈。有助于在程序运行时定位问题,特别是在程序卡住或崩溃时。pstack的功能与GDB调试状态下运行info threads->thread 线程号->info stack这串子命令类似。以下是关于pstack命令的详细用法:

常用选项
-H:以十六进制格式显示地址。
-f:显示每个线程的函数调用栈。
-l:显示每个函数调用栈中源代码所在位置的行号(如果可用)。
-m:显示内存映射信息。
-v:显示详细的调试信息。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值