技能篇:开发必备linux命令大全-稳赚不亏(中)

老老老JR老北
发布于 2023-11-27 11:19
浏览
0收藏

5 系统性能参数查看

ps

  • ps 命令用于显示当前进程的状态。命令格式:​​ps [options]​

options 参数解释
-A/a      列出所有的进程
-e        等于 “-A”
f         显示程序间的关系
-w        显示加宽可以显示较多的资讯
-au       显示较详细的资讯
-aux      显示所有包含其他使用者的行程
  • ​ps -ef​​各项指标解释

# ps -ef
UID         PID   PPID  C STIME TTY          TIME CMD
root          1      0  6 18:39 pts/0    00:02:27 java -jar /opt/lp-admin.jar
root        102      0  0 18:40 pts/1    00:00:00 /bin/bash
root        158    102  0 18:47 pts/1    00:00:00 /usr/bin/python /usr/bin/dstat
---------各项指标解析-----------------------
UID    程序的执行者 UID
PID    进程的ID号
PPID   则是其上级父程序的ID
C      cpu 使用的资源百分比
TTY    登入者的终端机位置
TIME   CPU 执行的时间
CMD    进程执行的命令
  • ​ps -aux​​各项指标解释

# ps -aux
ps -aux
USER        PID %CPU %MEM    VSZ   RSS TTY      STAT START   TIME COMMAND
root          1  7.0  5.3 13278220 1736948 pts/0 Ssl+ 18:39   2:24 java -jar /opt/lp-admin.jar
root        102  0.0  0.0  15264  2044 pts/1    Ss   18:40   0:00 /bin/bash
root        158  0.0  0.0  52176  6756 pts/1    T    18:47   0:00 /usr/bin/python /usr/bin/dstat
root        159  0.0  0.0  52176  6756 pts/1    T    18:49   0:00 /usr/bin/python /usr/bin/dstat -n -N eth0,total
---------各项指标解析-----------------------
USER    行程拥有者
PID     pid
%CPU    占用的 CPU 使用率
%MEM    占用的记忆体使用率
VSZ     占用的虚拟记忆体大小
RSS     占用的记忆体大小
TTY     终端的次要装置号码 (minor device number of tty)
STAT    该进程程的状态:
   D:  无法中断的休眠状态 (通常 IO 的进程)
   R:  正在执行中
   S:  可中断的睡眠状态
   T:  暂停状态或跟踪状态
   Z:  僵尸进程(zombie),无法正常终止
   X: 退出状态,进程即将被销毁
START   登入者的终端机位置
TIME    CPU 执行的时间
COMMAND 进程执行的命令

lsof

  • lsof(List Open Files) 用于查看你进程开打的文件,打开文件的进程,进程打开的端口(TCP、UDP)。命令格式​​lsof [options] filename​

options 参数解释

-a            列出打开文件存在的进程
-c<进程名>     列出指定进程所打开的文件(常用)
-p<进程号>     列出指定进程号所打开的文件(常用)
-g            列出属于gid的进程详情
-u<uname/uid> 显示归属uname或uid的进程情况
-d<fd文件号>   列出占用该文件号的进程
+d<目录>       列出目录下被打开的文件
+D<目录>       递归列出目录下被打开的文件
-n<目录>       列出使用NFS的文件
-i<条件>       列出符合条件的进程。(ip4/ip6协议、端口、 @ip )
-u            列出UID号进程详情
  • lsof 各项指标解释

# lsof
command  PID USER   FD   type   DEVICE     SIZE     NODE  NAME
init       1 root  txt   REG       8,2    43496  6121706 /sbin/init

---------各项指标解析-----------------------
COMMAND  进程的名称 
PID      进程标识符 
USER     进程所有者 
FD       文件描述符,应用程序通过文件描述符识别该文件。如cwd、txt等 
TYPE     文件类型,如DIR、REG等 
DEVICE   指定磁盘的名称 
SIZE     文件的大小 
NODE     索引节点(文件在磁盘上的标识) 
NAME     打开文件的确切名称
  • lsof 示例

~~ 显示所有打开80端口的进程
# lsof -i:80       
~~ 那个进程在占用/etc/passwd
# lsof /etc/passwd 
~~ 显示使用fd为1211的进程
# lsof -d 1211     
~~ 显示那些文件被pid为 1211 的进程打开
# lsof -p 1211     
~~ 查看sendmail进程的文件使用情况
# lsof -c sendmail 

pidof

  • pidof 是linux系统中用来查找正在运行进程的进程号(pid)的工具。如果我们提前知道进程名,则可以根据进程名查找pid,命令格式:​​pidof [options] 进程名称​

options 选项参数

-s: 仅返回一个进程号;
-c: 仅显示具有相同“root”目录的进程
-x: 显示由脚本开启的进程
-o: 指定不显示的进程ID
  • pidof 示例

# pidof -s nginx
1211

top

  • top 命令是用来监控Linux系统状况,比如cpu、内存,进程等资源使用情况。命令格式:​​top [-options]​

options 选项参数

-i<时间>    设置刷新间隔时间
-u<用户名>    指定用户名
-p<进程号>    指定进程
-H           开启线程查看
  • top 各项输出指标解释

# top
top - 18:20:27 up 26 days,  8:30,  2 users,  load average: 0.04, 0.09, 0.13
Tasks: 168 total,   1 running, 167 sleeping,   0 stopped,   0 zombie
%Cpu(s):  0.3 us,  0.5 sy,  0.0 ni, 99.1 id,  0.0 wa,  0.0 hi,  0.1 si,  0.0 st
KiB Mem:  32762356 total, 14675196 used, 18087160 free,      884 buffers
KiB Swap:  2103292 total,        0 used,  2103292 free.  6580028 cached Mem

PID USER      PR  NI    VIRT    RES    SHR S  %CPU  %MEM     TIME+ COMMAND                
1260 root      20   0 7933492 1.173g  14004 S 0.333 3.753  58:20.74 java                       
1503 root      20   0   69172   2240   1412 S 0.333 0.007   0:48.05 httpd                       
1520 daemon    20   0  358140   3980    776 S 0.333 0.012   6:19.55 httpd                       
2323 mysql     20   0 19.918g 4.538g   9404 S 0.333 14.52 352:51.44 mysqld                     
.......
---------各项指标解析---------------------------------------------------
第一行统计信息区
    18:20:27                     当前时间
    up 25 days, 17:29             系统运行时间,格式为时:分
    1 user                     当前登录用户数
    load average: 0.04, 0.09, 0.13  系统负载,三个数值分别为 1分钟、5分钟、15分钟前到现在的平均值

Tasks:进程相关信息
    running   正在运行的进程数
    sleeping  睡眠的进程数
    stopped   停止的进程数
    zombie    僵尸进程数
Cpu(s):CPU相关信息
    %us:表示用户空间程序的cpu使用率(没有通过nice调度)
    %sy:表示系统空间的cpu使用率,主要是内核程序
    %ni:表示用户空间且通过nice调度过的程序的cpu使用率
    %id:空闲cpu
    %wa:cpu运行时在等待io的时间
    %hi:cpu处理硬中断的数量
    %si:cpu处理软中断的数量
    %st:被虚拟机偷走的cpu
Mem  内存信息  
    total 物理内存总量
    used 使用的物理内存总量
    free 空闲内存总量
    buffers 用作内核缓存的内存量
Swap 内存信息  
    total 交换区总量
    used 使用的交换区总量
    free 空闲交换区总量
    cached 缓冲的交换区总量

~~ 常用的指标
PID 进程id
PPID 父进程id
UID 进程所有者的用户id
USER 进程所有者的用户名
GROUP 进程所有者的组名
TTY 启动进程的终端名。不是从终端启动的进程则显示为 ?
PR 优先级
NI nice值。负值表示高优先级,正值表示低优先级
P 最后使用的CPU,仅在多CPU环境下有意义
%CPU 上次更新到现在的CPU时间占用百分比
TIME 进程使用的CPU时间总计,单位秒
TIME+ 进程使用的CPU时间总计,单位1/100秒
%MEM 进程使用的物理内存百分比
VIRT 进程使用的虚拟内存总量,单位kb。VIRT=SWAP+RES
SWAP 进程使用的虚拟内存中,被换出的大小,单位kb。
RES 进程使用的、未被换出的物理内存大小,单位kb。RES=CODE+DATA
CODE 可执行代码占用的物理内存大小,单位kb
DATA 可执行代码以外的部分(数据段+栈)占用的物理内存大小,单位kb
SHR 共享内存大小,单位kb
S       进程状态; 相关枚举值解释查看 ps -ef S 项解释
COMMAND 进程启动执行的命令行    
  • top 命令下,查看信息常用快捷键

h    显示快捷键帮助
k    终止一个进程
i    开/关忽略闲置和僵死进程
q    退出程序
r    重新安排一个进程的优先级别
S     切换到累计模式
s    更改刷新间隔时间,单位秒
f,F    从当前显示中添加或者删除项目
o,O    改变显示项目的顺序
l    切换显示平均负载和启动时间信息
m     切换显示内存信息
t    切换显示进程和CPU状态信息
c    切换显示命令名称和完整命令行
M     根据内存使用大小排序
P    根据CPU使用率进行排序 (默认排序)
T    根据时间/累计时间进行排序
1    展开多核cpu显示
H       线程查看模式切换为开或关

free

  • free 可查看系统内存的使用情况,包括物理内存、交换内存(swap)和内核缓冲区内存。命令格式:​​free [-bkmg][-hlot][s delay][-c count]​

free 选项参数

 -b,-k,-m,-g  表示输出显示的单位为 bytes,KB,MB,or GB,不添加选项的话默认以 KB 为单位显示
 -h          以人类可读的方式显示,即后边会自动带上单位
 -l          显示详细的低内存和高内存统计信息(增加了 Low 和 High 这两行显示)
 -o          使用旧的格式显示(不显示 -/+buffers/cache 这一行)
 -t          增加显示 Total 行,Total = Mem + Swap
 -s delay    每 delay 秒重复打印一次,delay 为具体的秒数
 -c count    循环打印 count 次后退出,count 为具体的次数。需要配合 -s delay 使用

# free -m
             total       used       free     shared    buffers     cached
Mem:         32107      30414       1692          0       1962       8489
-/+ buffers/cache:      19962      12144
Swap:            0          0          0
------各项指标解释-------------------------------------------------
Mem 表示物理内存统计:
 total   物理内存总量,total = used + free
 used    总使用缓存的数量(包含 buffers 与 cache),但其中可能部分缓存并未实际使用
 free    未被分配的内存
 shared  共享内存,一般系统不会用到,总是0
 buffers  系统分配但未被使用的 buffers 数量
 cached  系统分配但未被使用的 cache 数量
 
-/+ buffers/cache:
 used    实际使用内存,等于第一行的 used - buffers - cached
 free    实际可用内存,等于第一行的 free + buffers + cached

Swap表示交换区的使用情况,也就是我们通常所说的虚拟内存
 total   总量虚拟内存
 used    使用的虚拟内存
 free    空闲的虚拟内存

mpstat

  • mpstat 是 Multiprocessor Statistics 的缩写,可以查看多核心的 cpu 中每个计算核心的统计数据。命令格式:​​mpstat [-P {cpu|ALL}] [delay [count]]​

-P {cpu|ALL}  表示监控哪个CPU, cpu在[0,cpu个数-1]中取值
delay          相邻的两次采样的间隔时间
count          采样的次数,count只能和delay一起使用

# mpstat  -P ALL 2
Linux 3.10.0-862.el7.x86_64 (8f57ec39327b)      07/11/2021      _x86_64_        (6 CPU)

07:19:07 PM  CPU    %usr   %nice    %sys %iowait    %irq   %soft  %steal  %guest  %gnice   %idle
07:19:09 PM  all   21.43    3.36    6.54    6.45    0.00    1.29    0.00    0.00    0.00   60.93
07:19:09 PM    0   20.41    3.57    7.14    4.08    0.00    1.53    0.00    0.00    0.00   63.27
07:19:09 PM    1   22.45    3.06    6.12    5.10    0.00    1.53    0.00    0.00    0.00   61.73
---------各项输出指标解释----------------------------------------------
CPU 处理器ID 
%usr 在 delay 时间段里,用户态的 cpu 时间(%)
%nice 
%sys 在 delay 时间段里,核心时间(%) 
%iowait 在 delay 时间段里,硬盘IO等待时间(%) 
%irq 在 delay 时间段里,硬中断时间(%) 
%soft 在 delay 时间段里,软中断时间(%) 
%steal 虚拟机管理器在服务另一个虚拟处理器时虚拟CPU处在非自愿等待下花费时间的百分比 
%guest 显示运行虚拟处理器时 CPU 花费时间的百分比 
%gnice  gnice/total*100
%idle 在internal时间段里,CPU除去等待磁盘IO操作外的因为任何原因而空闲的时间闲置时间(%)

iostat

  • iostat 主要用于输出 CPU 和磁盘 I/O 相关的统计信息,命令格式:​​iostat [options] [delay [count]]​

options 选项参数

-c      只显示系统CPU统计信息,即单独输出avg-cpu结果,不包括device结果
-d      单独输出Device结果,不包括cpu结果
-k/-m   输出结果以kB/mB为单位,而不是以扇区数为单位
-x      输出更详细的io设备统计信息
delay   每次输出间隔时间
count   表示输出次数,不带count表示循环输出
  • 默认命令​​iostat​​的各项指标解析

# iostat
Linux 4.4.73-5-default        2021年07月08日  _x86_64_        (40 CPU)

avg-cpu:  %user   %nice %system %iowait  %steal   %idle
           2.50    0.41    0.94    0.02    0.00   96.13

Device:            tps    kB_read/s    kB_wrtn/s    kB_read    kB_wrtn
sda              12.09        27.80       507.24   57343492 1046298308
sdb              17.95        30.91       647.84   63751096 1336305974
------各项指标解析-----------------------------------------------------------
avg-cpu: 总体cpu使用情况统计信息,对于多核cpu,这里为所有cpu的平均值
    %user      用户空间的CPU使用率
    %nice      CPU处在带NICE值的用户模式下的时间百分比
    %system    内核空间的CPU使用率
    %iowait    CPU等待IO的百分比 
    %steal     虚拟机的虚拟机CPU使用的CPU
    %idle      空闲的CPU   

Device: 各磁盘设备的IO统计信息。各列含义如下:
    tps        每秒进程下发的IO读、写请求数量
    KB_read/s  每秒从驱动器读入的数据量,单位为K。
    KB_wrtn/s  每秒从驱动器写入的数据量,单位为K。
    KB_read    读入数据总量,单位为K。
    KB_wrtn    写入数据总量,单位为K
  • ​iostat -x -k -d 1 2​​的各项指标解析

# iostat -x -k -d 1 1
Linux 4.4.73-5-default (ceshi44)        2021年07月08日  _x86_64_        (40 CPU)

Device:  rrqm/s   wrqm/s  r/s    w/s    rkB/s   wkB/s  avgrq-sz avgqu-sz await r_await w_await  svctm  %util
sda      0.08     2.48    0.37   11.71  27.80   507.24  88.53   0.02     1.34   14.96    0.90   0.09   0.10
sdb      0.00     1.20    1.28   16.67  30.91   647.83  75.61   0.17     9.51    9.40    9.52   0.32   0.57
------各项指标解析----------------------------------------------------------
rrqm/s:   每秒对该设备的读请求被合并次数,文件系统会对读取同块(block)的请求进行合并
wrqm/s:   每秒对该设备的写请求被合并次数
r/s:      每秒完成的读次数
w/s:      每秒完成的写次数
rkB/s:    每秒读数据量(kB为单位)
wkB/s:    每秒写数据量(kB为单位)
avgrq-sz: 平均每次IO操作的数据量(扇区数为单位)
avgqu-sz: 平均等待处理的IO请求队列长度
await:    平均每次IO请求等待时间(包括等待时间和处理时间,毫秒为单位)
svctm:    平均每次IO请求的处理时间(毫秒为单位)
%util:    采用周期内用于IO操作的时间比率,即IO队列非空的时间比率

netstat

  • netstat 命令用于显示各种网络相关信息,如网络连接,路由表,网络连接状态。命令格式:​​netstat [-options]​

options 参数解析

-a (all)显示所有选项,默认不显示 Listen 相关
-t (tcp)仅显示tcp相关选项
-u (udp)仅显示udp相关选项
-n 拒绝显示别名,能显示数字的全部转化成数字。
-l 仅列出有在 Listen (监听) 的服務状态

-p 显示建立相关链接的程序名
-r 显示路由信息,路由表
-e 显示扩展信息,例如uid等
-s 按各个协议进行统计
-c 每隔一个固定时间,执行该netstat命令
  • 各项输出指标解析

# netstat -pt 
Proto Recv-Q Send-Q Local Address   Foreign Address  State   PID/Program name  
tcp        0      0 localhost:30037 *:*              LISTEN  2109/firefox
....
------各项指标解析----------------------------------------
Proto           协议
Recv-Q          接收队列 ,一般都应该是0。如果不是则表示软件包正在队列中堆积
Send-Q          发送队列,一般都应该是0。如果不是则表示软件包正在队列中堆积
Local Address   本地地址+port
Foreign Address 远端地址+port
State           状态
PID             进程pid
Program name    进程名
  • netstat 常用命令示例

# netstat -anp
# netstat -tnlp

vmstat

  • vmstat (虚拟内存统计)可对操作系统的内存、进程、CPU,磁盘进行监控。相比top,可以看到整个机器的CPU、内存、IO的使用情况,而不是单单看到各个进程的CPU使用率和内存使用率(使用场景不一样)
  • 命令格式

// -a:显示活跃和非活跃内存 -n:只在开始时显示一次各字段名称
# vmstat [-a] [-n] [delay [count]]
// f:总的fork进程 s:内存使用的详细信息 d:磁盘的读/写 m:系统的slab信息
# vmstat [-fsdm] 
// 查看指定磁盘分区统计信息
# vmstat [-p disk partition]
  • vmstat 示例

$ vmstat 2 1
procs --------memory---------   --swap-- --io--- -system-- ----cpu-----
r b   swpd free    buff  cache    si so   bi  bo  in   cs  us sy id wa st
1 0      0 3498472 315836 3819540  0  0    0   1   2    0  3  1  96  0 0

------各项指标解析----------------------------------------
Procs(进程)
  r:     运行队列中进程数量,当这个值超过了CPU数目,就会出现CPU瓶颈了
  b:    等待IO的进程数量

Memory(内存):
  swpd:  使用虚拟内存大小,如果大于0,表示你的机器物理内存不足了,如果不是程序内存泄露的原因,那么你该升级内存了
  free:  可用内存大小
  buff:  用作缓冲的内存大小
  cache: 用作缓存的内存大
  
Swap:
  si:    每秒从交换区写到内存的大小,如果这个值大于0,表示物理内存不够用或者内存泄露了,要查找耗内存进程解决掉
  so:    每秒写入交换区的内存大小

IO:(现在的Linux版本块的大小为1024bytes)
  bi:    每秒读取的块数
  bo:    每秒写入的块数,bi和bo一般都要接近0,不然就是IO过于频繁,需要调整

系统
  in:    每秒中断数,包括时钟中断
  cs:    每秒上下文切换数,调用系统函数,就要进行上下文切换,线程的切换,也要进程上下文切换,这个值要越小越好

CPU(以百分比表示):
  us:    用户进程执行时间 
  sy:    系统进程执行时间 
  id:    空闲时间(包括IO等待时间),中央处理器的空闲时间
  wa:    等待 IO 时间  
  st:    虚拟机的虚拟机CPU使用的CPU

dstat

  • vmstat 是对系统的整体情况进行统计,无法对某个进程进行深入分析,所以推荐下 dstat。dstat 是一个可以取代vmstat、iostat、netstat 这些命令的多功能命令工具,执行 dstat 命令,默认情况它会收集-cpu-、-disk-、-net-、-paging-、-system-的数据,一秒钟收集一次。命令格式:​​dstat [options] [delay [count]]​​,其中使用 -p pid 选项可针对某一进程进行统计监控

options 常用参数解析

-l         显示负载统计量
-c         开启cpu统计
-C <CPU>   选项跟着 cpu 的编号,显示该cpu 的统计
-d         开启 disk 统计
-g         开启分页统计
-y         开启系统统计,包括中断和上下文切换
-i         开启中断统计
-s     开启 swap 统计,包括used, free
-m         显示内存使用率(包括used,buffer,cache,free值)
-n         开启网络读写统计
–socket    显示网络统计数据
–tcp       显示常用的TCP统计
-N    选项跟着网络设备名,多个用逗号隔开,进行网络统计
-p         开启对进程统计,runnable, uninterruptible, new
-r         io开启请求统计,包括read requests, write requests

--output文件  此选项也比较有用,可以把状态信息以csv的格式重定向到指定的文件中
-–disk-util   显示某一时间磁盘的忙碌状况
-–freespace   显示当前磁盘空间使用率
-–proc-count  显示正在运行的程序数量
--top-bio-adv 指出块I/O最大的进程
--top-cputime 耗费CPU时间最多的进程名和耗费时间
--top-cpu-adv 显示CPU占用最大的进程
-–top-io      显示正常I/O最大的进程
-–top-mem     显示占用最多内存的进程
  • 输出指标解析

# dstat
You did not select any stats, using -cdngy by default.
----total-cpu-usage---- -dsk/total- -net/total- ---paging-- ---system--
usr sys idl wai hiq siq| read  writ| recv  send|  in   out | int   csw 
 29   7  57   6   0   1|  85k 1457k|   0     0 |   0     0 |8350    67k
 30   9  54   6   0   1|   0  1290k| 857B  568B|   0     0 |  33k   75k
...

------各项指标解析-----------------------------------
CPU的使用率
  usr   显示了用户占比
  sys   系统占比
  idl   空闲占比
  wai   等待占比
  hiq   硬中断
  siq   软中断情况

磁盘的读写
  read  磁盘的读总数
  writ  磁盘的写总数
 
网络设备发送和接受的数据
  recv  网络收数据总数
  send  网络发数据总数

系统的分页活动
  in    内存页换入
  out   内存页换出
  
系统统计  
  int   统计中断
  csw   上下文切换
  • 指定展示各个网卡的收发状态

# dstat -n -N eth0,total
--net/eth0---net/total-
 recv  send: recv  send
   0     0 :   0     0 
 140B  140B: 140B  140B
  18k 6570B:  18k 6570B
  • 查看全部内存都有谁在占用

# dstat -g -l -m -s --top-mem
---paging-- ---load-avg--- ------memory-usage----- ----swap--- --most-expensive-
  in   out | 1m   5m  15m | used  buff  cach  free| used  free|  memory process 
   0     0 |5.44 4.77 5.09|23.2G 2108k 7892M  233M|   0     0 |java        1670M
   0     0 |5.44 4.77 5.09|23.3G 2108k 7893M  221M|   0     0 |java        1670
  • 进程最耗资源统计

# dstat --top-cpu-adv 1 2
-------most-expensive-cpu-process-------
process              pid  cpu read write
java                   1  0.0%  43B   0                
java                   1  0.2%   0    0

sar

  • sar 和 dstat 差不多,随你们各自喜好使用,可以从多方面对系统的资源进行监控,包括:文件的读写情况、系统调用的使用情况、磁盘I/O、CPU效率、内存使用状况、进程活动及 IPC 有关的活动等。命令格式:​​sar [options] [-A] [-o file] delay [count]​​。delay 为采样间隔,count 为采样次数,默认值是1

options 选项参数

-A          所有报告的总和
-o file     表示将命令结果以二进制格式存放在文件中,file 是文件名
-u          输出CPU使用情况的统计信息
-v          输出inode、文件和其他内核表的统计信息
-d          输出每一个块设备的活动信息
-b          显示I/O和传送速率的统计信息(相对-d 是汇总信息)
-r          输出内存和交换空间的统计信息
-R          输出内存页面的统计信息
-a          文件读写情况
-q          队列长度和平均负载
-c          输出进程统计信息,每秒创建的进程数
-y          终端设备活动情况
-w          输出系统交换活动信息
-x <pid>    显示给定进程的统计信息
-n <关键词>  统计网络信息
    关键词可以是:
        DEV    网卡
        EDEV   网卡 (错误)
        NFS    NFS 客户端
        NFSD   NFS 服务器
        SOCK   Sockets (套接字)    (v4)
        SOCK6  Sockets (套接字)    (v6)
        IP     IP 流    (v4)
        EIP    IP 流    (v4) (失败信息)
        ICMP   ICMP 流  (v4)
        EICMP  ICMP 流  (v4) (失败信息)
        TCP    TCP 流   (v4)
        ETCP   TCP 流   (v4) (失败信息)
        UDP    UDP 流   (v4)
        IP6    IP 流    (v6)
        EIP6   IP 流    (v6) (失败信息)
        ICMP6  ICMP 流  (v6)
        EICMP6 ICMP 流  (v6) (失败信息)
        UDP6   UDP 流   (v6)
  • 查看 CPU 使用情况:​​sar -u 1 2​

# sar -u  1 2
Linux 3.10.0-862.el7.x86_64 (8f57ec39327b)      07/11/2021      _x86_64_        (6 CPU)

07:02:04 PM     CPU     %user     %nice   %system   %iowait    %steal     %idle
07:02:05 PM     all     23.90      3.22      7.97      5.25      0.00     59.66
07:02:06 PM     all     26.53      4.76      8.84      5.95      0.00     53.91
Average:        all     25.21      3.99      8.40      5.60      0.00     56.79
------各项指标解析---------------------------------
%user     用户空间的CPU使用
%nice     改变过优先级的进程的CPU使用率
%system   内核空间的CPU使用率
%iowait   CPU等待IO的百分比 
%steal    虚拟机的虚拟机CPU使用的CPU
%idle     空闲的CPU
  • 查看内存使用情况​​sar -r​

# sar -r 1 2
Linux 3.10.0-862.el7.x86_64 (8f57ec39327b)      07/11/2021      _x86_64_        (6 CPU)

07:05:16 PM kbmemfree kbmemused  %memused kbbuffers  kbcached  kbcommit   %commit  kbactive   kbinact   kbdirty
07:05:17 PM    299596  32398396     99.08      2084   7615088  37900868    115.91  27267692   3809860       672
07:05:18 PM    298932  32399060     99.09      2084   7615848  37900100    115.91  27267828   3810252       488
Average:       299264  32398728     99.08      2084   7615468  37900484    115.91  27267760   3810056       580

------各项指标解析--------------------
kbmemfree   空闲的物理内存大小
kbmemused   使用中的物理内存大小
%memused    物理内存使用率
kbbuffers   内核中作为缓冲区使用的物理内存大小,kbbuffers和kbcached:这两个值就是free命令中的buffer和cache. 
kbcached    缓存的文件大小
kbcommit    保证当前系统正常运行所需要的最小内存,即为了确保内存不溢出而需要的最少内存(物理内存+Swap分区)
commit      这个值是kbcommit与内存总量(物理内存+swap分区)的一个百分比的值
  • 查看 IO 和传递速率:​​sar -b​

# sar -b 1 2
Linux 3.10.0-862.el7.x86_64 (8f57ec39327b)      07/11/2021      _x86_64_        (6 CPU)

07:06:08 PM       tps      rtps      wtps   bread/s   bwrtn/s
07:06:09 PM    171.00      0.00    171.00      0.00   3431.00
07:06:10 PM    163.00      0.00    163.00      0.00   2620.00
Average:       167.00      0.00    167.00      0.00   3025.50
------各项指标解析--------------------
tps      磁盘每秒钟的IO总数,等于iostat中的tps
rtps     每秒钟从磁盘读取的IO总数
wtps     每秒钟从写入到磁盘的IO总数
bread/s  每秒钟从磁盘读取的块总数
bwrtn/s  每秒钟此写入到磁盘的块总数
  • 网络接口信息:​​sar -n DEV​

# sar -n DEV 1 1
Linux 3.10.0-862.el7.x86_64 (8f57ec39327b)      07/11/2021      _x86_64_        (6 CPU)

07:06:57 PM     IFACE   rxpck/s   txpck/s    rxkB/s    txkB/s   rxcmp/s   txcmp/s  rxmcst/s
07:06:58 PM      eth0      2.00      4.00      1.45      0.56      0.00      0.00      0.00
07:06:58 PM        lo      0.00      0.00      0.00      0.00      0.00      0.00      0.00
07:06:58 PM     tunl0      0.00      0.00      0.00      0.00      0.00      0.00      0.00

Average:        IFACE   rxpck/s   txpck/s    rxkB/s    txkB/s   rxcmp/s   txcmp/s  rxmcst/s
Average:         eth0      2.00      4.00      1.45      0.56      0.00      0.00      0.00
Average:           lo      0.00      0.00      0.00      0.00      0.00      0.00      0.00
Average:        tunl0      0.00      0.00      0.00      0.00      0.00      0.00      0.00
------各项指标解析--------------------
IFACE    本地网卡接口的名称
rxpck/s  每秒钟接受的数据包
txpck/s  每秒钟发送的数据库
rxKB/S   每秒钟接受的数据包大小,单位为KB
txKB/S   每秒钟发送的数据包大小,单位为KB
rxcmp/s  每秒钟接受的压缩数据包
txcmp/s  每秒钟发送的压缩包
rxmcst/s 每秒钟接收的多播数据包  
  • 查看磁盘使用情况:​​sar -d​​。相对 -b 它可以看到各个设备的信息,-b 输出的是汇总信息

sar -d -p 1 1  
Linux 3.10.0-862.el7.x86_64 (8f57ec39327b)      07/11/2021      _x86_64_        (6 CPU)

07:08:41 PM       DEV       tps  rd_sec/s  wr_sec/s  avgrq-sz  avgqu-sz     await     svctm     %util
07:08:42 PM       sdb    160.00      0.00   2914.00     18.21      1.51      9.43      3.73     59.70
07:08:42 PM       sdc      0.00      0.00      0.00      0.00      0.00      0.00      0.00      0.00
07:08:42 PM       sda      0.00      0.00      0.00      0.00      0.00      0.00      0.00      0.00

Average:          DEV       tps  rd_sec/s  wr_sec/s  avgrq-sz  avgqu-sz     await     svctm     %util
Average:          sdb    160.00      0.00   2914.00     18.21      1.51      9.43      3.73     59.70
Average:          sdc      0.00      0.00      0.00      0.00      0.00      0.00      0.00      0.00
Average:          sda      0.00      0.00      0.00      0.00      0.00      0.00      0.00      0.00
------各项指标解析--------------------
DEV       磁盘设备的名称,如果不加-p,会显示dev253-0类似的设备名称,因此加上-p显示的名称更直接
tps       每秒I/O的传输总数
rd_sec/s  每秒读取的扇区的总数
wr_sec/s  每秒写入的扇区的总数
avgrq-sz  平均每次次磁盘I/O操作的数据大小(扇区)
avgqu-sz  磁盘请求队列的平均长度
await     从请求磁盘操作到系统调用完成处理,每次请求的平均消耗时间
svctm     I/O的服务处理时间,即不包括请求队列中的时间
%util     I/O请求占用的CPU百分比,值越高,说明I/O越慢
  • 统计socket连接信息:​​sar -n SOCK 1 1​

# sar -n SOCK 1 1
Linux 3.10.0-862.el7.x86_64 (8f57ec39327b)      07/11/2021      _x86_64_        (6 CPU)

07:09:18 PM    totsck    tcpsck    udpsck    rawsck   ip-frag    tcp-tw
07:09:19 PM     10910       261         0         0         0       562
Average:        10910       261         0         0         0       562
------各项指标解析--------------------
totsck   当前被使用的socket总数
tcpsck   当前正在被使用的TCP的socket总数
udpsck   当前正在被使用的UDP的socket总数
rawsck   当前正在被使用于RAW的skcket总数
if-frag  当前的IP分片的数目
tcp-tw   TCP套接字中处于TIME-WAIT状态的连接数量
  • TCP连接的统计:​​sar -n TCP​

# sar -n TCP 1 1
Linux 3.10.0-862.el7.x86_64 (8f57ec39327b)      07/11/2021      _x86_64_        (6 CPU)

07:09:39 PM  active/s passive/s    iseg/s    oseg/s
07:09:40 PM      1.00      0.00      5.00      7.00
Average:         1.00      0.00      5.00      7.00
------各项指标解析--------------------
active/s   新的主动连接
passive/s  新的被动连接
iseg/s     接受的段
oseg/s     输出的段

pidstat

  • pidstat是sysstat工具的一个命令,用于监控全部或指定进程的cpu、内存、线程、设备IO等系统资源的占用情况。命令格式:​​pidstat [options] [delay [count]]​

options 参数解析

-u         默认的参数,显示各个进程的cpu使用统计
-r         显示各个进程的内存使用统计
-d         显示各个进程的IO使用情况
-p <pid>   指定进程号
-w         显示每个进程的上下文切换情况
-t         显示选择进程的线程的统计信息
  • 查看所有进程的 CPU 使用情况:​​pidstat -u​

# pidstat -u
Linux 4.4.73-5-default (ceshi44)        2021年07月08日  _x86_64_        (40 CPU)

14时11分56秒   UID  PID  %usr %system  %guest    %CPU   CPU  Command
14时11分56秒     0    1  0.15    0.06    0.00    0.22    22  systemd
....
------各项指标解析----------------------------------------
UID      进程所属UID
PID      进程ID
%usr     进程在用户空间占用cpu的百分比
%system  进程在内核空间占用cpu的百分比
%guest   进程在虚拟机占用cpu的百分比
%CPU     进程占用cpu的百分比
CPU      处理进程的cpu编号
Command  当前进程对应的命令
  • 内存使用情况统计:​​pidstat -r​

# pidstat -r
Linux 4.4.73-5-default (ceshi44)        2021年07月08日  _x86_64_        (40 CPU)

14时13分08秒   UID       PID  minflt/s  majflt/s     VSZ    RSS   %MEM  Command
14时13分08秒     0         1     41.04      0.00  186020   5968   0.00  systemd
14时13分08秒     0       443      0.00      0.00    5828   3004   0.00  pidstat
....
------各项指标解析----------------------------------------
PID       进程标识符
Minflt/s  任务每秒发生的次要错误,不需要从磁盘中加载页
Majflt/s  任务每秒发生的主要错误,需要从磁盘中加载页
VSZ       虚拟地址大小,虚拟内存的使用KB
RSS       常驻集合大小,非交换区五里内存使用KB
Command   task命令名
  • 显示各个进程的IO使用情况:​​pidstat -d​

# pidstat -d
Linux 3.10.0-862.el7.x86_64 (8f57ec39327b)      07/11/2021      _x86_64_        (6 CPU)

06:42:35 PM   UID       PID   kB_rd/s   kB_wr/s kB_ccwr/s  Command
06:42:35 PM     0         1      0.05      0.00      0.00  java
06:42:35 PM     0       102      0.04      0.05      0.00  bash
------各项指标解析---------------------------
kB_rd/s   每秒从磁盘读取的KB
kB_wr/s   每秒写入磁盘KB
kB_ccwr/s 任务取消的写入磁盘的KB。当任务截断脏的pagecache的时候会发生
Command   进程执行命令
  • 显示每个进程的上下文切换情况:​​pidstat -w​

# pidstat -w
Linux 3.10.0-862.el7.x86_64 (8f57ec39327b)      07/11/2021      _x86_64_        (6 CPU)

06:43:23 PM   UID       PID   cswch/s nvcswch/s  Command
06:43:23 PM     0         1      0.00      0.00  java
06:43:23 PM     0       102      0.00      0.00  bash
06:43:23 PM     0       150      0.00      0.00  pidstat
------各项指标解析---------------------------
PID       进程id
Cswch/s   每秒主动任务上下文切换数量
Nvcswch/s 每秒被动任务上下文切换数量
Command   进程执行命令
  • 指定进程并( -t)显示进程的线程统计信息:​​pidstat -t -p 1211​

# pidstat -t -p 1211
06:44:37 PM   UID      TGID       TID    %usr %system  %guest    %CPU   CPU  Command
06:44:37 PM     0         1         -    0.00    0.00    0.00    0.00     3  java
06:44:37 PM     0         -         1    0.00    0.00    0.00    0.00     3  |__java
06:44:37 PM     0         -         6    0.00    0.00    0.00    0.00     5  |__java
06:44:37 PM     0         -         7    0.00    0.00    0.00    0.00     4  |__java
...
------各项指标解析---------------------------
TGID      主线程的表示
TID       线程id
%usr      进程在用户空间占用cpu的百分比
%system   进程在内核空间占用cpu的百分比
%guest    进程在虚拟机占用cpu的百分比
%CPU      进程占用cpu的百分比
CPU       处理进程的cpu编号
Command   当前进程对应的命令

pstree

  • ps 命令可以显示当前正在运行的那些进程的信息,但是对于它们之间的关系却显示得不够清晰,pstree 命令可以以树状图显示进程间的关系。命令格式:​​pstree [-p] <pid>​

# pstree -p 3169
mongod(3169)─┬─{mongod}(3170)
             ├─{mongod}(3173)
             ├─{mongod}(3174)
             ├─{mongod}(3175)
             ├─{mongod}(3177)
             ├─{mongod}(3178)
             ├─{mongod}(3179)
             ├─{mongod}(3180)

strace

  • strace 可以跟踪到一个进程产生的系统调用,包括参数,返回值,执行消耗的时间命令格式:​​strace [options] [command]​​。如果指定进程pid,要去掉 command

options 简单常用的参数解析

-c                统计每一系统调用的所执行的时间,次数和出错的次数等
-t                在输出中的每一行前加上时间信息
-tt               在输出中的每一行前加上时间信息,微秒级
-ttt              微秒级输出,以秒了表示时间
-T                显示每一调用所耗的时间
-e trace=         只跟踪指定的系统 调用.例如:-e trace=open,close,rean,write表示只跟踪这四个系统调用,默认是 all
-e trace=file     只跟踪有关文件操作的系统调用
-e trace=process  只跟踪有关进程控制的系统调用
-e trace=network  跟踪与网络有关的所有系统调用
-e trace=ipc      跟踪所有与进程通讯有关的系统调用
-o filename       将strace的输出写入文件filename 
-p pid            跟踪指定的进程pid
  • strace 示例

# strace ls
# strace cat /dev/null
# strace -o output.txt -T -tt -e trace=all -p 28979
  • 每一行都是一条系统调用,等号左边是系统调用的函数名及其参数,右边是该调用的返回值

pmap

  • pmap 提供了进程的内存映射,pmap命令用于显示一个或多个进程的内存状态。其报告进程的地址空间和内存状态信息
  • ​pmap [options] PID​

options 参数解析
-x extended显示扩展格式
-d device显示设备格式

# pmap -dx 1
Address  Kbytes Mode  Offset           Device    Mapping
00110000 1480K  r-x-  0000000000000000 008:00005 /usr/lib/libcrypto.so.1.0.0
00282000 80K    rw--  0000000000015000 008:00005 /usr/lib/libcrypto.so.1.0.0
00296000 12K    rw--  0000000000015000 008:00005 [ anon ]
.....
------各项指标解析----------------------------------------
Address: 内存开始地址
Kbytes:  占用内存的字节数(KB)
RSS:     保留内存的字节数(KB)
Dirty:   脏页的字节数(包括共享和私有的)(KB)
Mode:    内存的权限:read、write、execute、shared、private (写时复制)
Mapping: 占用内存的文件、或[anon](分配的内存)、或[stack](堆栈)
Offset:  文件偏移
Device:  设备名 (major:minor)

watch

  • watch 可以帮助实现定时输出的命令结果,比如 netstat 没有间隔输出结果的功能。​​watch [-options] <command>​

options 常用参数选项

-n <num> watch 默认每2秒运行一下程序,可以用 -n 来指定间隔的时间  
-d       watch 会高亮显示变化的区域

切换终端:Ctrl+x     退出watch:Ctrl+g
  • watch 示例

# watch -n 1 -d netstat -ant
# watch uptime




文章转载自公众号:潜行前行

分类
已于2023-11-27 11:19:39修改
收藏
回复
举报
回复
    相关推荐