Linux系统进程管理工具


对于Linxu系统运维工程师来说好的系统进程管理工具,就像一把利器,无坚不摧,可以使用这些工具发现造成性能问题可能原因,提升团队的工作效率,本篇知识提及一些简单常用系统管理工具包括了pstree、ps、pgrep、top、htop、pidof、vmstat、glances、dstat的简单实用例子及常用选项,希望能帮助一些热爱Linux的朋友们。

 

 

pstree:用来显示进程数的

pstree命令的用法格式

[root@Corazon ~]# pstree
init─┬─NetworkManager
     ├─abrtd
     ├─acpid
     ├─atd
     ├─auditd───{auditd}
     ├─automount───4*[{automount}]
     ├─console-kit-dae───63*[{console-kit-da}]
     ├─crond
     ├─cupsd
     ├─dbus-daemon
     ├─dhclient
     ├─hald─┬─hald-runner─┬─hald-addon-acpi
     │      │             └─hald-addon-inpu
     │      └─{hald}
     ├─irqbalance
     ├─login───bash
     ├─master─┬─pickup
     │        └─qmgr
     ├─5*[mingetty]
     ├─modem-manager
     ├─polkitd
     ├─rpc.statd
     ├─rpcbind
     ├─rsyslogd───3*[{rsyslogd}]
     ├─sshd───sshd───bash───pstree
     ├─udevd───2*[udevd]
     └─wpa_supplicant


ps [OPTION]...

选项支持组合:aux

u:以用户给为中心组织进程状态信息显示

a:与终端相关的进程

x:与终端无关的进程

 
[root@Corazon ~]# ps aux
USER        PID %CPU %MEM    VSZ   RSS TTY      STAT START   TIME COMMAND
root          1  0.0  0.0  19356  1528 ?        Ss   11:50   0:01 /sbin/init
root          2  0.0  0.0      0     0 ?        S    11:50   0:00 [kthreadd]
root          3  0.0  0.0      0     0 ?        S    11:50   0:00 [migration/0]
root          4  0.0  0.0      0     0 ?        S    11:50   0:00 [ksoftirqd/0]
root          5  0.0  0.0      0     0 ?        S    11:50   0:00 [stopper/0]
root          6  0.0  0.0      0     0 ?        S    11:50   0:00 [watchdog/0]
root          7  0.0  0.0      0     0 ?        S    11:50   0:00 [migration/1]
root          8  0.0  0.0      0     0 ?        S    11:50   0:00 [stopper/1]


 

#  USER:发起进程的用户

#  PID:进程的PID

#  %CPU:占用的CPU使用百分比

#  %MEM:占用的内存使用百分比

#  VSZ:虚拟内存集

#  RSS:常驻内存集

#  TTY:跟哪个终端相关

#  STAT:进程状态

R:运行中

S:interruptable sleeping 可中断睡眠

D:uninterruptable sleeping 不可中断睡眠

T:停止态

Z:僵死态

 

s:会话首进程

N:低优先级

<:高优先级

l:多线程进程

+:前台进程 

 

#  START启动时间

#  TIME:累计使用CPU时长

#  COMMADN:发起的命令

 

 

-ef组合:

-e:显示所有进程

-f:显示完整的进程信息

[root@Corazon ~]# ps -ef
UID         PID   PPID  C STIME TTY          TIME CMD
root          1      0  0 11:50 ?        00:00:01 /sbin/init
root          2      0  0 11:50 ?        00:00:00 [kthreadd]
root          3      2  0 11:50 ?        00:00:00 [migration/0]
root          4      2  0 11:50 ?        00:00:00 [ksoftirqd/0]
root          5      2  0 11:50 ?        00:00:00 [stopper/0]
root          6      2  0 11:50 ?        00:00:00 [watchdog/0]


# UID:发起进程的用户

# PID 进程的PID

# PPID 父进程的PID

# C:运行在哪科CPU

# STIME:启动时间

# TIME:累计使用CPU时长

# CMD发起了哪些命令

 

常用组合:-eFH
     -F: 显示完整格式的进程信息
     -H: 以进程层级格式显示进程相关信息

[root@Corazon ~]# ps -eFH
UID         PID   PPID  C    SZ   RSS PSR STIME TTY          TIME CMD
root          2      0  0     0     0   0 11:50 ?        00:00:00 [kthreadd]
root          3      2  0     0     0   0 11:50 ?        00:00:00   [migration/0]
root          4      2  0     0     0   0 11:50 ?        00:00:00   [ksoftirqd/0]
root          5      2  0     0     0   0 11:50 ?        00:00:00   [stopper/0]
root          6      2  0     0     0   0 11:50 ?        00:00:00   [watchdog/0]


 

SZ:虚拟内存集

RSS:常驻内存集

PSR:优先级

常用组合:-eo, axo
  -eo pid,tid,class,rtprio,ni,pri,psr,pcpu,stat,comm
 axo stat,euid,ruid,tty,tpgid,sess,pgrp,ppid,pid,pcpu,comm

可以让用户指定显示具体信息

 

[root@Corazon ~]# ps axo pid,time,command | head
   PID     TIME COMMAND
     1 00:00:01 /sbin/init
     2 00:00:00 [kthreadd]
     3 00:00:00 [migration/0]
     4 00:00:00 [ksoftirqd/0]
     5 00:00:00 [stopper/0]
     6 00:00:00 [watchdog/0]
     7 00:00:00 [migration/1]
     8 00:00:00 [stopper/1]
     9 00:00:00 [ksoftirqd/1]


 

pgrep, pkill :通过过滤显示和杀死进程的
  pgrep [options] pattern
  pkill [options] pattern
 -u uid: effective user  有效用户ID
     -U uid: real user 实际用户ID
     -t terminal: 与指定终端相关的进程
     -l: 显示进程名
     -a: 显示完整格式的进程名
     -P pid: 显示其父进程为此处指定的进程的进程列表

 

[root@Corazon ~]# pgrep -u root -l | tail
944 NetworkManager
1423 dhclient
1427 sshd
2552 master
2626 bash
2654 sshd
2658 bash
2773 kworker/0:0
2795 kworker/0:1


 

pidof:根据进程名获取其进程PID号

pidof PROCESSNAME

 

[root@Corazon ~]# pidof sshd
2654 1427
[root@Corazon ~]# pidof bash
2658 2626


 

 

top命令:性能分析工具,能够实时显示系统中各个进程的资源占用状况,

常用选项:

-d:指定刷新时间间隔,默认3秒刷新一次进程列表

-b:一批次进行显示

-n #:执行显示#次

  
 
wKiom1XpiMmwUEKwAANbBX-QK3w887.jpg

 

这五行显示的是系统整体的统计信息

top - 00:24:14 up  3:16,  2 users,  load average: 0.00, 0.01, 0.05
Tasks: 339 total,   2 running, 337 sleeping,   0 stopped,   0 zombie
%Cpu(s):  0.3 us,  0.3 sy,  0.0 ni, 99.3 id,  0.0 wa,  0.0 hi,  0.0 si,  0.0 st
KiB Mem :  1003164 total,   693700 free,   136556 used,   172908 buff/cache
KiB Swap:  2097148 total,  2097148 free,        0 used.   702336 avail Mem

 

 

 

top - 00:24:14 up  3:16,  2 users,  load average: 0.00, 0.01, 0.05


# top - 00:24:14 当前时间

# up  3:16 启动系统后运行的时间

# 2 users 当前登录的用户

# load average: 0.00, 0.01, 0.05 平局负载队列,分别是1分钟,5分钟,15分钟

 

Tasks: 339 total,   2 running, 337 sleeping,   0 stopped,   0 zombie


# Tasks: 339 total 当前系统上的任务数量

# 2 running:当前在运行状态数量

# 337 sleeping:当前在睡眠状态数量

# 0 stopped:停止状态数量

# 0 zombie:僵死状态数量

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


# %Cpu(s):  0.3 us 用户空间占用CPU的百分比

# 0.3 sy:内核空间占用CPU的百分比

#  0.0 ni:用户进程空间内改变过优先级的进程占用CPU百分比

# 99.3 id:CPU空闲百分比

# 0.0 wa:等待输入输出的CPU时间百分比

# 0.0hi:硬件中断的时间占用的CPU百分比

# 0.0si:用来模式切换占用的CPU百分比

# 0.0st:被虚拟化偷走的CPU百分比

 

KiB Mem :  1003164 total,   693700 free,   136556 used,   172908 buff/cache


# KiB Mem :  1003164 total 内存的总大小

# 693700 free: 空间内存的大小

# 136556 used:已经使用的内存大小

# 172908 buff/cache:用于缓冲和缓存的内存大小

 

 

KiB Swap:  2097148 total,  2097148 free,        0 used.   702336 avail Mem


# KiB Swap:  2097148 total 交换分区的总大小

# 2097148 free:空间的交换分区大小

# 702336 avail:可用的交换分区大小

 

PID  USER      PR  NI    VIRT    RES    SHR S %CPU %MEM     TIME+ COMMAND                                                   
2654 root      20   0  133128   4864   3684 S  0.3  0.5   0:00.47 sshd

   

 

# PID:进程PID号码

# USER:进程所有者

# PR:进程优先级

# NI:进程Nice值

# VIRT:虚拟内存集

# RES:常驻内存集

# SHR:共享内存空间的大小

# S:进程状态

# %CPU:占用CPU百分比

# %MEM:占用内存百分比

# TIME+:累计运行时长

# COMMADN:进程拥有者发起的命令

 

top里可以设置按照某一项来排序,默认的情况下,是按照CPU的使用情况来排序,也可以设定刷新时间及终止指定进程

M:按内存使用情况排序

P: 根据CPU使用百分比大小进行排序

T: 根据时间/累计时间进行排序

s: 调整刷新时间,默认是5秒

q:退出top命令
 k:终止指定进程

 

htop:互动的进程查看器,一个文本模式的应用程序(在控制台或者X终端中),需要ncurses。

与Linux传统的top相比,htop更加人性化。它可让用户交互式操作,支持颜色主题,可横向或纵向滚动浏览进程列表,并支持鼠标操作。

top相比,htop有以下优点:

・ 可以横向或纵向滚动浏览进程列表,以便看到所有的进程和完整的命令行。

・ 在启动上,比top 更快。

・ 杀进程时不需要输入进程号。

・ htop 支持鼠标操作。

・ top 已经很老了

wKioL1XpiyXTL9P-AAuqNWP8JnQ795.jpg

 上面左上角显示CPU、内存、交换区的使用情况,右边显示任务、负载、开机时间,下面就是进程实时状况。

 下面是 F1~F10 的功能和对应的字母快捷键

 

wKiom1XpiTbwmSWFAAIqkRvKKGY305.jpg



获取帮助

鼠标点击Help或者按F1 显示自带帮助

wKioL1Xpi1vTGs3yAANcaP8FBfY854.jpg

wKiom1XpiaOCKHSYAAInNDOb6fI921.jpg



htop设定

鼠标点击一下Setup或按下键盘键F2

wKioL1Xpi_fhmtxWAAJp5zpcgmE521.jpg

从左侧开始第一列的Setup:

表示Left Column和Right Column显示的信息和次数,如果要新增选项 可以选择Available meters进行添加 F5是添加左侧,F6是添加右侧,也可以设定显示信息的输出方式 有LED(LED灯),Bar(进度条)、Text(文本格式)

wKiom1XpifHQv5ShAAIOI6X1iEA556.jpg

 

从左侧开始第一列的Display options:

选择要显示的内存,按空格x表示为显示,选择完后之后,需要按F10进行保存

 

为了演示我们增加了以树状格式显示进程 Tree view 这个选项

wKiom1XpijqTrcWhAAJfa1WliQ0787.jpg

wKioL1XpjGHRv0CpAAqggvxEiFQ132.jpg



从左侧开始第一列的Colors:

用来设定界面的显示颜色


wKiom1XpinHz94CNAAE2EReZCC0984.jpg

wKioL1XpjJfCpA-9AAFVgWRSKsE549.jpg



从左侧开始第一列的Colums:

作用是增加或取消要显示各项内存


  wKiom1XpiqmgZx--AAMyN7E1l_g398.jpg


搜索进程

鼠标点击一下Search或按下键盘键F3

 

搜索tail进程

wKioL1XpjPzyfeeTAAn6xx-bqfE638.jpg

 


  过滤器

     鼠标点击一下Filter或按下键盘键F4

    相当于模糊查找,不会区分大小写,例如:

    wKiom1XpizuRnlE0AAHpvqmVAIo251.jpg


树状方式

    鼠标点击一下Tree或按下键盘键F5

    开启/关闭树状显示进程

    

wKioL1XpjYShjG7iAASg-6OGOGw736.jpg

wKioL1XpjYXSHEHnAASGBGiK1SM916.jpg


排序方式:

    鼠标点击一下Exapand或按下键盘键F6

    按下后左侧会出现 Sort by 列表进行选择排序规则

    wKiom1Xpi4rBATdjAARYuZyYW6E652.jpg

  调整nice值

    选定某个进程之后直接可以使用,F7 减小nice值(增大优先级)F8增大nice值(减小优先级)

  杀死进程

    选择某个进程之后直接可以使用F9即可杀死

  退出htop

    鼠标点击一下Quit或按下键盘键F10

 

      选项:

    -d #: 指定延迟时间;

    -u UserName: 仅显示指定用户的进程;

    -s COLOMN: 以指定字段进行排序; 

   命令:

    s: 跟踪选定进程的系统调用;

    l: 显示选定进程打开的文件列表;

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



        选定sshd这个进程按下s键会显示出进程的系统调用

    

wKiom1XpjAjxbm4BAAG_066n2Jk666.jpg

wKioL1Xpji3BZOfhAADklRYmFwE814.jpg




vmstat:报告内核线程、虚拟内存、磁盘、陷阱和 CPU 活动的统计信息。

   

 [root@Corazon ~]# vmstat
    procs -----------memory---------- ---swap-- -----io---- -system-- ------cpu-----          r  b   swpd   free   buff  cache   si   so    bi    bo   in   cs us sy id wa st
 2  0      0 685360    764 176748    0    0     7     1   32   41  0  1 99  0  0


 

   proc:

     r: 等待运行的进程个数

     b: 处于不可中断睡眠态的个数(被阻塞的队列的长度)

 memory:

    swpd: 交换内存的使用总量

    free: 空间物理内存总量

    buffer: 用于buffer的内存总量

    cache: 用于cache的内存总量

 swap:

   si: 数据进入wap中的数据速率(kb/s)

   si: 数据离开wap中的数据速率(kb/s)

 io:

   bi: 从块设备读入数据到系统的速率(kb/s)

   bo:保存数据至块设备的速率(kb/s)

 system:

   in: interrupts,中断速率(kb/s)

   cs: context switch 进程切换速率(kb/s)

 

 

glances:系统监视和分析性能数据的功能,其中包括:

・ CPU 使用率

・ 内存使用情况

・ 内核统计信息和运行队列信息

・ 磁盘 I/O 速度、传输和读/写比率

・ 文件系统中的可用空间

・ 磁盘适配器

・ 网络 I/O 速度、传输和读/写比率

・ 页面空间和页面速度

・ 消耗资源最多的进程

・ 计算机信息和系统资源

常用选项:

          -b:以Byte为单位显示网卡数据速率,默认也是以字节显示

          -d:关闭磁盘I/O模块

          -f /path/to/somefile: 设定输入文件位置

          -o {HTML|CSV}:输出的格式

          -m: 禁用mount模块,

          -n: 禁用网络模块 n

          -t # : 延迟时间间隔

          1: 每个CPU的相关数据单独显示

 

 

 

内键命令快捷键:

wKioL1Xpjr3griPMAAKtrmzn_zM850.jpg

        

a �C 对进程自动排序

c �C 按 CPU 百分比对进程排序

m �C 按内存百分比对进程排序

p �C 按进程名字母顺序对进程排序

i �C 按读写频率(I/O)对进程排序

d �C 显示/隐藏磁盘 I/O 统计信息

f �C 显示/隐藏文件系统统计信息

n �C 显示/隐藏网络接口统计信息

s �C 显示/隐藏传感器统计信息

y �C 显示/隐藏硬盘温度统计信息

l �C 显示/隐藏日志(log)

b �C 切换网络 I/O 单位(Bytes/bits)

w �C 删除警告日志

x �C 删除警告和严重日志

1 �C 切换全局 CPU 使用情况和每个 CPU 的使用情况

h �C 显示/隐藏这个帮助画面

t �C 以组合形式浏览网络 I/O

u �C 以累计形式浏览网络 I/O

q �C 退出(‘ESC‘ 和 ‘Ctrl&C‘ 也可以)

 

 

C/S模式下运行glances命令:

服务模式:

Glances -s -B IPADDR

IPADDR:监听于服务器端的本机哪个地址

客户端模式:

Glances -c IPADDR

IPADDR:要连接哪个服务器端的地址

 

例如:首先在192.168.99.102上服务商监听本机的这个地址,然后在通过192.168.99.104进行远程测试就看到如下:

        

wKioL1XpjubwwKn-AACxBaK-zuI431.jpg

wKiom1XpjMLhAVk4AAc7gctVkUk121.jpg


   

dstat:dstat 是一个用来替换 vmstat, iostat, netstat, nfsstat 和 ifstat 这些命令的工具,是一个全能系统信息统计工具

 

格式: dstat [-afv] [options..] [delay [count]]

常用选项:

          -c: 显示CPU相关信息,默认已经开启

              -C #,# total 显示从哪个CPU到哪个CPU

          -g: 显示page相关统计数据

          -d:显示磁盘读写速率,默认已经开启

              -D total,sda,sdb...

          -m:显示memory相关统计数据

          -n:显示network相关的统计数据

          -p:显示process相关统计数据

          -r: 显示I/O请求相关的统计数据

          -s: 显示交互内存的相关统计数据

          --tcp:显示tcp协议

          --udp:显示udp协议

          --socket:显示socket相关数据

          -ipc:进程间通信相关统计数据          

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

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

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

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

    wKioL1XpjxOgNZVCAAEaBgooS8w382.jpg

        

total-cpu-usage:CPU使用状态

     usr:用户空间使用状态

     sys:内核空间使用状态

     idl:空闲空间状态

     wai:等待I/O操作状态

     hiq:硬中断状态

     siq:软中断状态

 

dsk/total:磁盘状态

     read:读速率

     writ:写速率

 

net/total:网络状态

     recv:收速率

     send:发速率

paging:页面状态

     in:页面换进速率

     out:页面换出速率

 

system:系统状态

     int:中断速率

 

 

只显示磁盘sda和CPU0,1的相关信息

wKiom1XpjRGx65twAAHxibQANx4854.jpg

Dstat的选项的整体演示测试结果

wKioL1Xpj1ahTur_AAGyPCW4QZY334.jpg



    

完。

 

今天Linux系统管理管理分享完毕,感谢大家,谢谢!


你可能感兴趣的:(linux,性能,工程师,管理工具,系统工具)