2020年5月12日星期二

进程监控类命令

进程监控类命令


liunx中各种监控工具,量大.本篇全是命令介绍,笔者把各个命令的都实验一遍,给同学们看看.

进程监控类命令

 

本篇全是命令介绍,笔者把各个命令的都实验一遍,给同学们看看.

 

一. PSTREE命令

pstree - display a tree of processes

选项:

  -p 显示进程的PID

  -T 隐藏线程信息

  -u 显示切换过程

  -H PID 高亮显示指定PID进程的父进程

示例:

 

 

 

 

 

 

 

 

 

 

 

 

 

 

二. PS命令

ps - report a snapshot of the current processes.

选项:

PS有三种风格的选项写法:

  BSD风格写法 ps aux

  UNIX风格写法 ps -ef

  GNU风格写法 ps --pid PID

 

BSD风格选项:

  a 显示所有与终端有关的进程

  x 显示所有与终端无关的进程

  u 显示进程所有者相关的信息

  f 命令列把相关的进程显示成进程树

  k 对属性进行排序,属性前加上-表示倒序

  o 选择显示的字段pid cmd psr ni(nice) pri rtprio tid class %cpu %mem user ruser euser等等

  euser 表示显示有效用户字段

  ruser 表示显示真是用户字段

  psr 表示显示CPU与进程的绑定关系

  pcpu CPU的利用率

  ppid 父进程的PID

  pri 系统优先级值

  ni NICE优先级

  rtprio 表示显示实时优先级

  L 显示支持的字段

UNIX风格选项:

  -e 显示所有进程

  -f 显示完整格式程序信息

  -F 显示更完整格式程序信息

  -H 以进程层级格式显示进程相关信息

  -u userlist 指定有效用户ID

  -U userliset 指定真正用户ID

  -g gid 指定有效的gid

  -G gid 指定真的很的gid

  -p PID 显示指定pid的进程

  -t TTY 显示指定TTY终端的进程,相当于BSD风格的t选项

GNU风格选项:

  --sort 等同于BSD风格的k选项,对指定属性进行排序,-表示倒序显示

  --ppid 等同与UNIX风格的-p选项,指定显示某PID的进程

 

字段介绍:

  USER 那个用户执行的命令

  PID 进程的PID

  %CPU CPU占用的百分比

  %MEM 内存占用百分比

  VSZ 是申请的内存(占用的虚拟内存大小)

  RSS 是实际使用内存(指的是常驻内存中的大小.不包括交换分区中的)

  TTY 哪个终端启动的

  STAT 状态信息

  START 什么时间启动的

  TIME 使用时间片的累计值

  COMMAND 命令

    带中括号的表示内核的线程

  PPID 父进程的PID

  C CPU的占用百分比

  SIIME 启动时间

  PSR 运行在哪个CPU核心上

 

 

STAT进程状态:

  R 运行态

  S (大写S)可打断的睡眠态 interruptable sleeping

  D 不可打断的睡眠态 uninterruptable sleeping

  T 停止态stopped

  Z zombie僵尸态

 

  s (小写s)会话的发起者,子进程的创建者

  + 前台进程,运行在终端上的并且占据命令提示符的

  I 空闲内核线程(大写i)

  l 多线程进程(小写的L)

  < 高优先级进程

  N 低优先级进程

示例:

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

EXAMPLES

       To see every process on the system using standard syntax:

          ps -e

          ps -ef

          ps -eF

          ps -ely

 

       To see every process on the system using BSD syntax:

          ps ax

          ps axu

       To print a process tree:

          ps -ejH

          ps axjf

       To get info about threads:

          ps -eLf

          ps axms

       To get security info:

          ps -eo euser,ruser,suser,fuser,f,comm,label

          ps axZ

          ps -eM

       To see every process running as root (real & effective ID) in user format:

          ps -U root -u root u

       To see every process with a user-defined format:

          ps -eo pid,tid,class,rtprio,ni,pri,psr,pcpu,stat,wchan:14,comm

          ps axo stat,euid,ruid,tty,tpgid,sess,pgrp,ppid,pid,pcpu,comm

          ps -Ao pid,tt,user,fname,tmout,f,wchan

 

 

三. PRTSTAT命令

prtstat PID 显示指定PID进程的相信信息

 

示例:

 

 

 

 

四. nice命令

nice命令只能调整非实时优先级

nice的调整优先级的范围是-20~19,对应的系统优先级就是100~139

 

nice  -n  #  COMMAND 以指定的优先级来启动进程

  选项-n 最好不要省略

普通用户只能往后调整优先级,root即可以提高优先级,也可以降低优先级

 

 

 

 

 

 

 

五. renice命令

renice 同样也只能调整非实时优先级,

renice只能调整正在运行的进程的优先级

renice的调整范围还是-20~19,即使超出了也不会报错,但是最大是19

 

renice -n # PID 重新调整指定PID进程的优先级

  选项-n  可以省略

 

 

 

 

 

 

 

 

六. pgrep命令

 

pgrep [options] pattern

 

选项:

-u uid 根据UID查询进程,UID是指生效用户的UID

-U uid 根据UID查询进程,UID是指真正进程发起者的UID

-t 终端 根据指定终端查找进程

-l 显示出进程名

-a 显示完整格式的进程名

-P PID 限制指定PID进程的子进程

 

示例:

 

 

 

 

 

 

七. pidof命令

根据进程名查找进程的PID

 

pidof   [OPTION]   COMMAND

选项:

  -x 根据脚本名称查找PID

 

示例:

 

 

 

 

八. uptime命令

负载查询

系统启动时长

空闲进程的总时长

当前时间

当前上线人数

系统平均负载

CPU的个数*3   这个数字超过5就很忙了

 

 

 

 

 

 

九. mpstat命令

详细统计了CPU的使用情况,

mpstat # ##   可以每#秒刷新一下,一共统计##次

 

 

 

 

 

十. top命令

动态追踪进程信息

选项:

-d # 指定刷新间隔为#秒

-n # 指定刷新次数为#次

-b 以批次的方式显示

交互式命令:

M 按照内存排序

P 按照CPU排序

T 按照时间片累计进行排序

l 显示或隐藏top的第一行

t 显示或隐藏top的第二行第三行

1  汇总显示CPU还是分开显示CPU核心

m 显示或隐藏TOP的第四行第五行

q 退出

s 调整刷新间隔

k 终止进程

W 另存为文件

 

top - 05:45:41 up 1 day,  8:54,  1 user,  load average: 0.00, 0.00, 0.00

# 当前时间        运行时长  当前登录用户数    平均负载  过去1分钟 5分钟 15分钟的平均队列长度

 

Tasks: 181 total,   1 running, 180 sleeping,   0 stopped,   0 zombie

#    一共的进程数   正在运行数  睡眠进程数    停止进程数    僵死进程数

 

%Cpu(s):  0.0 us,  0.0 sy,  0.0 ni,100.0 id,  0.0 wa,  0.0 hi,  0.0 si,  0.0 st

# 用户空间   系统空间  NICE    空闲     等待IO  硬件中断  软件中断  被虚拟程序偷走的

 

MiB Mem :    957.1 total,    147.3 free,    211.6 used,    598.1 buff/cache

# 总内存大小 空闲内存大小  已使用内存   用于缓冲和缓存的内存空间

 

MiB Swap:   2048.0 total,   2048.0 free,      0.0 used.    592.1 avail Mem

#     总交换空间 空闲交换空间    已使用交换空间   可用内存空间

 

 

 

 

 

 

十一. HTOP命令

增强版的top命令,需要额外安装.而且最最重要的,竟然支持鼠标操作.而且还支持搜索

-d # 指定刷新间隔

-u USERNAME 仅显示指定用户的进行

-s COLUME 以指定字段进行排序

 

-h   人性化显示

-m 以M为显示单位

-g 以G为显示单位

 

交互式选项:

H 显示或隐藏线程

K 显示或隐藏内核线程,默认是隐藏的

P 以占用CPU百分比排序

M 以占用内存百分比排序

T 以使用时间片累计时长排序

l 显示指定进程打开的文件列表

s 追踪进程发起的系统调用

t 以树状结构显示进程父子关系或者使用F5键

a 将选定的进程绑定指定的CPU核心

 

 

 

 

 

看到有没有眼前一亮的感觉.真的太好用了.推荐大家使用安装,资源管理的三板斧不是白叫的.

 

十二. free命令

显示交换分区和内存空间的使用情况

选项:

-h 人性化显示

-m 以M为单位显示

-g 以G为单位显示

-b 以字节为单位显示

-o 隐藏不显示cache/buffer行,在centos6及以前版本有效

-s # 指定刷新间隔

-c  # 指定刷新次数

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

十三.PMAP命令

pmap PID 查看指定进程的物理内存映射表

 

 

 

 

 

 

pmap命令实际上就是调用了/proc/PID/maps文件的内容.只不过这个文件不太好理解.使用pmap命令来简化查看过程

 

 

十四.strace命令

stracem COMMAND 用来追踪COMMAND命令执行过程中产生的系统调用

 

 

 

 

 

 

十五.ltrace命令

ltrace COMMAND 查看COMMAND命令在执行时调用了那些库文件

 

 

 

 

 

 

strace和ltarce建议好好学学,避免成为背锅侠

 

十六.vmstat命令

查看虚拟内存的情况

 

选项:

      vmstat # ##  间隔#秒刷新一次   一共显示##次

      -s 汇总

 

 

 

 

 

字段介绍:

procs

r 等待运行的进程个数,也就是CPU等待运行的队列长度

b 处于不可中断睡眠的进程个数,被阻塞的任务队列的长度.如果这个数字很大,可能等待IO数很大

 

memory

swpd 交换内存使用的总量,如果这个swpd的有使用,或者有增长趋势就说明内存不够用了.

free 空闲的内存总量

buffer 用于缓冲内存总量

cache 用于缓存内存总量

 

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 平均每秒钟的中断次数 interrupt

cs 进程切换速率 context switch

 

cpus

us 用户空间中进程占用CPU的百分比

sy 内核占用CPU的百分比

id 空闲时段消耗的CPU百分比

wa 消耗在等待IO操作完成时消耗CPU的百分比

steal 虚拟程序(偷走的)消耗的cpu百分比

 

 备注:vmstat命令也是通过查看/proc目录下内核输出的参数来统计各个进程的相关数据

 

 

十七.IOSTAT命令

iostat #  ## 指定刷新间隔为#秒,指定刷新次数##次

选项:

-c 仅显示CPU统计信息

-d 仅显示硬盘统计信息

-x 显示更加详细的统计信息,包括CPU和硬盘的

-k 以K为单位显示

-m 以M为单位显示

字段介绍:

kB_read/s 读的速率

kB_wrtn/s 写的速率

kB_read 读的总量

kB_wrtn 写的总量

 

 

 

 

 

 

 

 

 

 

 

 

十八.DSTAT命令

dstata命令默认是每秒刷新一次的.带颜色显示.同时强大到没有朋友的工具

dstat # ## 指定刷新时间为#秒,指定刷新次数为#次

选项:

  -c 仅显示CPU信息

-C # 显示在哪个CPU核心上的信息

-d 仅显示硬盘信息

-n 仅显示网络流量信息

-g 仅显示内存页信息

-y 显示系统有关信息,包括中断和进程切换速率

-i 显示软硬中断

-m 显示内存相关

-p 显示进程统计信息

-r 显示IO请求信息

-s 显示swap信息

-t 输出当前时间

-v 等同与vmstat输出结果

--tcp 显示tcp相关数据

--udp 显示Udp相关数据

--raw 显示raw相关数据

--top-cpu 显示最占用cpu的进程

--top-io 显示最占用Io的进程

--top-mem 显示最占用内存的进程

--top-latency 显示延迟最大的进程

示例:

 

 

 

 

 

 

 

 

 

 

十九.IOTOP命令

前线一些工具都是一些综合类型的工具,什么都能监控,单有好像专一了又不太满足需求,向iostat命令,只能查看到磁盘的读写很高,但是就是不知道哪个程序带来的大IO.这个款专一好男人的工具iotop

iotop命令可以不停的刷新显示当前那些进程频繁读写.放张图片看看

第一行是磁盘的读写的总速率

第二行是实际产生的读写速率

第三行参数如下:

TID 线程ID,这里默认的TID,可是使用交互命令p切换成PID的显示

PRIO 优先级,

USER 进程发起者

DISK READ 磁盘读速率

DISK WRITE 磁盘写速率

SWAPIN 交换分区写入速率

IO IO等待的百分比

 

 

 

 

有一个很有意思的设定,第三行上有一个<或者>,这说明正在以这一行进行排序

  大于号表示降序序排序

  小于号表示升序排序

可以使用r键进行切换

 

交互式选项:

left和right方向键 可以改变排序列

r 方向排序

o 只实际上有IO请求的线程

p 在PID和TID之间进行切换,默认是TID显示

i 改变线程或进程的优先级

q 退出

 

选项:

-o 只显示正在产生IO请求的进程

-b 以批形式显示,非交互式模式,主要用作与记录在文件

-t 加上时间戳,主要用作记录日志

-n # 需要结合-b一起使用,显示几批次,同样主要用来记录日志,如果不指定# 表示无限次

-d # 指定刷新间隔,默认刷新是1秒

-p PID 指定监控的进程

-u USER 指定监控哪个用户的进程

-P 以进程的方式显示,默认是线程TID

  -q 只在第一次检测时显示列名和IO汇总,主要用于记录日志

  -qq 永远不显示列名,但是还显示IO汇总,主要用作记录日志

  -qqq 列名和IO汇总都不显示,主要用作记录日志

 

示例

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

二十.IFTOP命令

监控网络链接和流量

选项:

  -n 以数字方式显示

 

 

 

 

 

二十一.NLOAD命令

监控网络链接和流量

选项:

  -t # 指定刷新间隔

  -u {h|b|k|m|g|H|B|K|M|G} 指定显示单位

    h:auto   b:Bit/s   k:kBit/s   m:mBit/s   g:gBit/s

    H:auto   B:Byte/s   K:kByte/s   M:mByte/s  G:gByte/s

 

 

 

 

 

 

 

 

二十二.LSOF命令

    lsof:list open files    查看当前系统正在使用的文件,在linux中一切皆文件,所以通过lsof命令不仅可以查看正在使用的普通文件,还可以访问套接字等等,无比强大的工具.
    
    查看当前系统文件的工具,跟踪某个进程正在使用哪个文件

    可以利用losf恢复已经删除的文件,前提这个文件正在访问
    选项:
        -a                列出打开文件的进程
        -c    COMMAND        列出指定进程打开的文件,这里跟的是进程名
        -g    GID            列出GID用户的进程详情
        -d     文件号        列出占用该文件号的进程
        +d    目录        列出目录下被打开的文件
        +D    目录        递归列出目录下被打开的文件
        -n    目录        列出使用NFS的文件
        -i    条件        列出符合条件的进程
                            4    显示IPV4的进程
                            6    显示ipv6的进程
                            :80    显示占用80端口的进程
                            @IPADDR    显示和IPADDR链接的进程
        -p  PID            列出指定PID进程所打开的文件
        -u    UID            列出UID用户的进程锁使用的文件
        -n                不反向解析
}

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

小技巧:

利用lsof找回误删除且正在被打开的文件.

第一步,现在终端持续打开一个文件,模拟这个文件正在被使用

 

第二步,在终端二上删除正在使用的文件

 

第三步,使用lsof查找刚才删除的文件是哪个程序使用的

 

第四步,进入/proc/PID/fd目录中,其中PID就是刚才查找到使用误删除文件进程的PID

 

第五步,就会发现其中的3号文件描述符就是指向刚才误删除的文件.利用重定向恢复

 

 

文件已经找回来了,只有某个文件正在被使用才能找回来,因为删除文件后,系统不会立即释放类删除的空间.


没有评论:

发表评论