Linux进程管理命令和性能监控工具的应用

概述

监控系统的各方面的性能,保障各类服务的有序运行,是运维工作的重要组成部分,本篇就介绍了一些常用的系统监控命令和相关参数的说明

具体包含一下几个部分 
1.进程管理基础 
2.进程管理工具(ps,top,htop,kill) 
3.内存监控类工具(vmstat,pmap) 
4.系统监控累工具(glances,dstat)


一,进程管理基础概念

  1. 进程

内核的功用:进程管理、文件系统、网络功能、内存管理、驱动程序、安全功能等

Process:运行中的程序的一个副本,是被载入内存的一个指令集合,因为程序可能会同时被运行 
多次,故可以理解为一个副本.

进程ID(Process ID,PID)号码被用来标记各个进程

UID,GID和SELinux语境决定进程对文件系统的存取和访问权限,通常从执行进程的用户来继承

每个进程都存在生命周期:从创建开始,到运行结束就是整个进程的一个生命周期,而程序是个静态的文件.

task struct(任务结构体):Linux内核存储进程信息的数据结构格式

task list(任务列表):多个任务的task struct组成的链表

  1. CPU的工作模式

CPU的工作模式:每台服务器有很多进程等待CPU来处理,每个进程都必须轮流让CPU来处理,如果第一个进程一直霸占着CPU不放,就会导致后面的进程一直无法处理,所以就有了优先级最大的内核来调度分配,所以可以总结为

CPU是分时的:一个进程可占用多少CPU的时长,一个CPU在同一时刻只能执行一个任务,CPU自身的寄存器中存放着正在运行的进程的状态信息,当该进程分配的时间片内没有完成任务时,也会被内核调度出去,去执行下一个进程,但是之前没有完成任务的进程数据不会就此丢失,而是会放到内核指定的一个task struct(任务结构体)来存放进程信息,这就称为保存现场,当再一次轮到这个没有完成的进程到CPU执行时,内核就会再度调回这个保存现场的数据(这就被称为恢复现场),来继续执行,直到完成任务.

保存现场就是当正在运行的进程,CPU运行时间到达之后,将进程运行的状态等信息,由内核调度存储到内存中,这就是保存现场

恢复现场就是之前保存过的进程的运行状态的信息,当该进程又获得CPU运行时间时,将保存的状态信息调度到CPU上,这样CPU就能根据保存的状态继续运行进程,而不是从头开始运行进程

存储的进程的任务结构体很多,所以就有了task list(任务列表),而进程ID就是来排序这个任务列表

  1. 内存的工作模式

内存的工作模式也是分空间的:一个进程可占用多少内存空间,内存分配方式有点类似磁盘,分成很多块,但内存不叫块,而是叫页框(page frame)用于存储页面数据,一般一个page的大小为4K。分配的页框可以有多个,且可以不连续。

进程需要用到内存数据的时候,怎么去找内存中不连续的数据? 
因为数据在实际内存中可以不连续,也就是离散的,故一般情况下,内核会虚拟一个内存空间面向进程,进程不需要直接与实际的物理存储的内存打交道,只需与内核虚拟出来的内存打交道,内核虚拟出来的内存的大小,与计算机平台的位数有关系,一般32位系统上,单个进程虚拟出来的内存大小为4G,1G给内核使用,3G给该进程使用;64位系统上,单个进程虚拟出来的内存大小为4G,内核虚拟出来的内存空间叫做线性地址空间,内核虚拟出来的内存对进程而言是连续,且独占的。这样,进程读写内存数据时就认为自己读取的是一个连续的地址空间,且是独占的,这段虚拟出来的空间中,只有真正被使用的部分,内核才会在物理内存上分配空间进行存储

swap分区:为了防止过多的进程将实际物理内存占满导致程序无法运行,从而有了swap交换分区的概念,swap分区实际是用来临时存放内存中暂时用不到的页面数据。置换时,通常采用LRU算法(最近最少使用)将最近最少用到的数据暂存在交换分区中

不能交换的进程称为常驻进程集,能够被交换的进程称为虚拟进程集

一次磁盘IO分为两段进行,第一段是将数据从磁盘拿到内存中内核空间,第二段时将内核空间的数据复制一份放到用户空间

LRU:Least Recently Used 近期最少使用算法,释放内存物理地址空间和线性地址空间

MMU:Memory Management Unit负责转换线性和物理地址

  1. Linux上进程创建模型

进程创建

在系统启动成功之后内核就会创建第一个进程,它就是父进程,后续的进程都由其创建 
init进程:初始化进程,后续的所有用户空间进程管理者(所有进程的父进程)

其他进程:除了init进程之外,所有进程都由父进程创建,父进程利用fork()系统调用生成,每个进程都是由父进程fork()自身而来,会clone()自身的数据给子进程

当父进程创建子进程时,子进程和父进程使用的是同一段内存空间;一旦子进程需要对该段内存空间的数据进行修改时,就会复制该段内存空间的数据到另外一段内存空间,子进程就指向了该段新的内存空间

这种机制叫CoW(写时复制),如果子进程不对数据进程修改,跟父进程使用的内存空间都是同一个,但是一旦子进程要修改数据,就复制一份数据到另一块内存供子进程单独使用,而从此之后,子进程就一直使用新的内存空间了

进程的终止:子进程完成一定的任务之后,释放掉自己占用的资源,然后父进程对子进程进行回收

  1. 进程的优先级

基于linux2.6的内核将优先级划分为固定个数 
0-139 
1-99:实时优先级;

100-139:静态优先级; 
数字越小,优先级越高;

Nice值: 
-20-19分别对应100-139,进程初始时nice值默认都为0,普通用户只能调低自己的优先级,也就是加大自己的nice值,而管理员用户可以任意指定 
修改进程优先级:nice、renice 
可调整的区间为100-139

通过调整nice值可以调整进程的优先级:

nice值的范围为-20到19,分别对应进程优先级的100-139

进程启动时的默认nice值都为0,故其默认优先级为120

普通用户:只能调大nice值,也就是降低优先级,不能低于0 
管理员:可以任意调整nice值-20到19 
怎么调整优先级:

对于尚未启动的程序: 
nice -n 数字 COMMAND 
表示启动程序时,以指定的数字作为其nice值

1.[root@localhost ~]# >>nice -n -5 vim wang &
2.[2] 23107
3.[root@localhost ~]# >>ps axo ni,pri,pid,command| grep wang
4.-5  24  23107 vim wang
5.0  19  23111 grep --color=auto wang  

对于已经启动的进程: 
renice 数字 PID 
表示对指定的PID进程调整其nice值为指定数字

1.    [root@localhost ~]# >>vim mage &
2.    [1] 23045
3.    [root@localhost ~]# >>ps axo ni,pri,pid,command| grep vim
4.     0  19  23045 vim mage
5.     0  19  23047 grep --color=auto vim
6.    [1]+  Stopped                 vim mage
7.    [root@localhost ~]# >>renice -5 23045
8.    23045 (process ID) old priority 0, new priority -5
9.    [root@localhost ~]# >>ps axo ni,pri,pid,command| grep vim
10.    -5  24  23045 vim mage
11.    0  19  23050 grep --color=auto vim

Big O:时间复杂度,用时和规模的关系 
O(1), O(logn), O(n)线性, O(n^2)抛物线, O(2^n) 
大O 就是 时间复杂度。 
时间复杂度是大概的描述一个算法的用时(实际上从侧面的表达了他的效率) 
你可以 把它 看成函数 y = f(x)一样。 
O(n)中的n 代表 规模大小,这也表明了,时间复杂度 跟 规模的关系。 
最好时间复杂度,通常指在最好情形下,这个算法用时。反之,最坏情况下的就是最坏时间复杂度。

  1. 进程队列

Linux内核为了能够快速的实现这些优先级不同的进程的调度,将待运行的进程按照对应的优先级分成了140个运行队列,每个优先级相同的进程为同一个队列,这样,内核进行调度时,不需要遍历整个队列,而是按照优先级从高到低,取队列的第一个进程进行调度

同时也有140个过期队列,就是将上面运行队列中,调度过的进程,在为其分配的CPU时间片的时间内尚未运行完成,就放到了过期队列,当同优先级的运行队列中的进程都被调度完成后,就会重新调度过期队列,此时过期队列就变成了运行队列

  1. 进程间通信机制(IPC: Inter Process Communication)

同一主机上: 
signal:可以通过发送信号(通过kill命令) 
shm(shared memory):共享内存 
semerphor:信号量,一种计数器 
不同主机上: 
rpc(remote procedure call):远程过程调用 
socket:rpc也是基于socket调用,套接字通信机制.IP和端口号

  1. linux内核:抢占式多任务

进程类型 
守护进程:daemon,跟终端无关,由内核在系统引导过程中启动的进程 
用户前台进程:用户通过终端启动的进程,跟终端相关 
注意:也可把前台启动的进程收网后台,以守护模式运行

进程的状态 
运行态:running,进程正在运行中 
就绪态:ready,可以运行但尚未被运行 
睡眠态:sleeping 
可中断睡眠:interruptible,调度到CPU上可立即运行起来 
不可中断睡眠:uninterruptible 通常是指被IO阻塞的进程,等待IO满足之前无法继续运行 
僵死态:zombie,找不到归属,父进程没有回收该进程,父进程就挂了 
停止态:stopped 暂停于内存中,不可被调度并运行

一次磁盘IO分为两段进行,第一段是将数据从磁盘拿到内存中内核空间,第二段时将内核空间的数据复制一份放到用户空间

  1. 线程相关概念

线程:是一个进程内部的多个执行流,一个执行流就叫一个线程

一个进程只有一个执行流,也可以有线程,这种模式就叫单进程单线程模型

一个进程有多个执行流,就叫单进程多线程模型

如果一个进程有多个执行流,也就是有多个线程,但是如果只有1个CPU,那么也多线程也没有任何意义,因为一个cpu在同一时刻只能同时执行一个任务

同一个进程内部的多个线程,可以共享内存空间。比如web服务,如果是单进程模型,一个进程相应一个用户请求,如果100个用户请求的都是index.html页面,那么在内存上就需要为每个进程存放都存放一个index.html的数据,这样就造成了内存浪费,但是如果是采用单进程多线程模式,这样利用一个线程相应一个用户请求,这样就只需要为这个进程在内存上存储一份index.html的数据,然后多个线程共享这段数据,这样就大大节约了内存的空间

Linux原生对线程的支持性不是特别好

一个进程的数据部分分为指令和数据,程序在执行时,内存中的数据也分指令数据和实际的数据,其中指令数据和部分的实际数据,是不能被交换到交换分区上的,称之为常驻内存集,而有些数据是可以被交换到交换分区上的,称之为虚拟内存集

第二章 进程管理类工具(ps、top、htop、kill)

1、ps命令(ps、pgrep、pidof) 
ps命令:显示系统当前进程的运行情况,实际是将/proc/目录下的各个进程相关的信息转换为我们易读模式展现出来

选项与参数

-A 所有的进程都显示出来,与-e具有同样的效果 
a 与终端无关的所有进程 
u 以用户为中心显示与用户相关的进程信息 
x 通常与a一起使用,可列出较完整的信息

输出格式定义:

l 列出详细的信息 
j 工作的格式 
-f 完整格式列表,做一个更为完整的输出 
o 属性选项显示定制的信息: 
psr 当前进程运行的CPU编号(四颗CPU就是0、1、2、3) 
pri 当前进程的优先级 
ni 当前进程的nce值(-20,19),nice值越低,优先级越高 
pid 进程号 
command 发起进程的命令 
state 进程状态 
%cpu 占用CPU的百分比 
%mem 占用内存的百分比 
tty 占用的终端 
euser 进程的有效用户 
ruser 进程的实际用户

有效用户和实际用户可用于验证设置了SUID权限的二进制程序文件运行时,有效用户为进程文件的属主用户,实际用户为运行程序文件的用户

常用的组合方式:

ps -ef 以完整的信息显示所有进程的信息 
ps aux 
ps axo 
ps aux的显示出来的参数的意义

1.[root@localhost ~]# >>ps aux
2.USER        PID %CPU %MEM    VSZ   RSS TTY      STAT START   TIME COMMAND
3.root          1  0.0  0.6 125948  6708 ?        Ss   Sep25   0:05 /usr/lib/systemd/systemd --switched-ro
4.root          2  0.0  0.0      0     0 ?        S    Sep25   0:00 [kthreadd]
5.root          3  0.0  0.0      0     0 ?        S    Sep25   0:00 [ksoftirqd/0]
6.root          6  0.0  0.0      0     0 ?        S    Sep25   0:01 [kworker/u256:0]
7.root          7  0.0  0.0      0     0 ?        S    Sep25   0:00 [migration/0]
8.root          8  0.0  0.0      0     0 ?        S    Sep25   0:00 [rcu_bh]
9.root          9  0.0  0.0      0     0 ?        S    Sep25   0:00 [rcuob/0]
10.root         10  0.0  0.0      0     0 ?        S    Sep25   0:00 [rcuob/1]
11.root         11  0.0  0.0      0     0 ?        S    Sep25   0:00 [rcuob/2]
12.root         12  0.0  0.0      0     0 ?        S    Sep25   0:00 [rcuob/3]
13.root         13  0.0  0.0      0     0 ?        S    Sep25   0:00 [rcuob/4]
14.root         14  0.0  0.0      0     0 ?        S    Sep25   0:00 [rcuob/5]
15.----------------------------------------------
16.USER:进程的发起者
17.PID:进程号
18.%CPU:进程占用掉的CPU资源的比例
19.%MEM:进程所占用的物理内存百分比
20.VSZ:进程使用掉的虚拟内存的大小,也就是内核虚拟出来的给该进程的线性地址空间的大小,
21.        假如分配给其1000k,或许实际并没有数据占用,单位为kb
22.RSS:进程占用的固定物理内存的大小,实际占用的内存的大小,常驻内存集,也就是不能交换到swap分区上的数据的大小,单位为kb
23.    一个进程的数据部分分为指令和数据,程序在执行时,内存中的数据也分指令数据和实际的数据,
24.    其中指令数据和部分的实际数据,是不能被交换到交换分区上的,称之为常驻内存集,而有些数
25.    据是可以被交换到交换分区上的,称之为虚拟内存集
26.TTY:进程在哪个终端运行
27.STAT:进程目前的状态
28.    各状态的值代表的意义
29.        R  运行状态
30.    S  可中断睡眠态
31.    D  不可中断睡眠态
32.    Z  僵死态
33.    T  停止态
34.    有的进程在进程状态之后还会有其他字母,其分别代表的含义为:
35.    s  seesion leader 会话领导者,主进程
36.    N  低优先级进程
37.    <  高优先级进程
38.    l  多线程进程(小写的L)
39.    +  前台进程,占据着某终端
40.START:进程被触发的时间
41.TIME:进程实际使用cpu的时间
42.COMMAND:触发此进程的命令

ps -ef显示出来的结果代表的意义

1.[root@localhost ~]# >>ps -ef
2.UID         PID   PPID  C STIME TTY          TIME CMD
3.root          1      0  0 Sep25 ?        00:00:05 /usr/lib/systemd/systemd --switched-root --system --de
4.root          2      0  0 Sep25 ?        00:00:00 [kthreadd]
5.root          3      2  0 Sep25 ?        00:00:00 [ksoftirqd/0]
6.root          6      2  0 Sep25 ?        00:00:01 [kworker/u256:0]
7.root          7      2  0 Sep25 ?        00:00:00 [migration/0]
8.root          8      2  0 Sep25 ?        00:00:00 [rcu_bh]
9.root          9      2  0 Sep25 ?        00:00:00 [rcuob/0]
10.root         10      2  0 Sep25 ?        00:00:00 [rcuob/1]
11.root         11      2  0 Sep25 ?        00:00:00 [rcuob/2]
12.root         12      2  0 Sep25 ?        00:00:00 [rcuob/3]
13.--------------------------------
14.UID:进程发起者的UID
15.PID:进程号
16.PPID:进程的父进程ID号
17.C:CPU利用率,使用时间
18.STIME:进程的启动时间,就是指从什么时候启动的进程
19.TTY:登录者的终端位置,远程则显示pts/N 本地则显示ttyN,?代表是系统进程
20.TIME:进程实际花费CPU的运行时间,不是系统时间
21.CMD:触发此进程的命令

pidof命令:根据进程名,取其PID(基于ps aux显示出来的结果过滤,只显示指定进程发起命令的PID)

1.[root@localhost ~]# >>pidof bash
2.22697 2722 905
3.[root@localhost ~]# >>ps axo pid,command|grep bash
4.905 /bin/bash /usr/sbin/ksmtuned
5.2722 -bash
6.22697 -bash
7.23280 grep --color=auto bash

2、top命令

top命令: 
语法:top [OPTIONS] 
选项: 
-d 数字 指定刷新时间间隔 
-n 数字 显示多少次 
-b 以批次显示top的刷新,要和-n 数字 一起使用,指定要显示多少批次

进入top命令显示界面下常用的交互式的子命令: 
M键:可以按内存占用百分比大小排序 
P键:可以按CPU占用百分比大小排序,默认就是此项 
T键:可以按累计占用CPU时长大小排序 
q键:退出top交互式界面 
k键:可kill某个进程,进入交互式杀死某个PID进程 
s键:可指定刷新时间间隔,默认是3秒刷新一次 
W键:将结果保存到/root/.toprc文件中 
l键:是否显示第一分栏的负载信息 
t键:是否显示第一分栏的CPU信息 
m键:是否显示定义芬兰的内存相关信息

top命令显示出来的内容的各个参数代表的意义

1.[root@localhost ~]# top -n 1    
2.top - 01:44:06 up 10:15,  2 users,  load average: 0.05, 0.04, 0.05
3.Tasks: 144 total,   1 running, 143 sleeping,   0 stopped,   0 zombie
4.Cpu(s):  0.0%us,  0.0%sy,  0.0%ni, 99.9%id,  0.0%wa,  0.0%hi,  0.0%si,  0.0%st
5.Mem:   1004136k total,   295800k used,   708336k free,    26872k buffers
6.Swap:  1023996k total,        0k used,  1023996k free,   166232k cached
7.
8.PID USER      PR  NI  VIRT   RES   SHR  S   %CPU   %MEM    TIME+   COMMAND                                                                                      
9.3700 root      20   0 15028  1152   836  R    2.0    0.1   0:00.01  top                                                                                                
10. 1 root      20   0 19352  1548  1228  S    0.0    0.2   0:01.55  init                                                                                
11. 2 root      20   0     0     0     0  S    0.0    0.0   0:00.04  kthreadd                      
12. —————————————————————————————————————————
13.
14.
15.top - 01:44:06 up 10:15,  2 users,  load average: 0.05, 0.04, 0.05
16.分别表示:系统当前时间;持续多长时间;当前有多少个用户;
17.平均负载1515分钟的平均负载,是指cpu上等待运行的队列长度的负载,一般不会超过1
18.如果每个CPU内核的当前活动进程数不大于3的话,那么系统的性能良好。
19.如果每个CPU内核的任务数大于5,那么这台机器的性能有严重问题
20.如果linux主机是1个双核CPU的话,当Load Average 为6的时候说明机器已经被充分使用了
21.不想显示改行,就按l(小写的L)键
22.
23.利用uptime命令,显示出来的结果就是该行的结果
24.
25.Tasks:
144 total,   1 running, 143 sleeping,   0 stopped,   0 zombie
26.分别表示:总共的进程数,正在运行进程数,睡眠状态进程数,停止状态进程数,僵尸状态进程数
27.
28.Cpu(s):  0.0%us,  0.0%sy,  0.0%ni, 99.9%id,  0.0%wa,  0.0%hi,  0.0%si,  0.0%st
29.分别表示cpu的占用时长百分比:
30.us-用户空间占用百分比;
31.sy-内核空间占用百分比;
32.ni-调整nice值之后的进程占用的百分比;
33.id-空闲百分比;wa-等待I/O完成的进程占用的百分比(该值大,代表硬盘速度慢);
34.hi-为了处理硬件中断占用的百分比;
35.si-为了处理软中断占用的百分比;
36.st-被偷走的百分比,例如启动虚拟化后,虚拟化占用的cpu在主机看来就是被偷走的
37.如果有多个CPU,显示的时候按1可以列出每颗CPU的占用情况,不想显示CPU相关信息,就按t键
38.
39.Mem:
  1004136k total,   295800k used,   708336k free,    26872k buffers
40.分别表示内存占用的相关信息:总内存大小;已用内存大小,空闲内存大小,缓冲大小
41.(往硬盘上写时,硬盘速度慢,故先放到内存缓冲,再往硬盘上写;
42.    或许多小数据集中放在内存中,然后集中的往硬盘写,降低磁盘IO次数)  
43.不想显示内存和swap的信息可以按m键
44.
45.Swap:
 1023996k total,        0k used,  1023996k free,   166232k cached  
46.表示swap交换分区的占用情况:总大小,已用大小,空闲大小,
47.cache缓存大小,实际还是物理内存的cache,放在swap这里显示而已
48.    (硬盘上的数据往内存里存,方便CPU调用时的读取速率)
49.
50.PID:进程号
51.USER:进程发起者
52.PR:进程优先级,越小优先级越高
53.NI:进程的nice值,越小优先级越高
54.VIRT:进程需要的虚拟内存大小,而非实际使用的虚拟内存大小
55.RES:进程当前使用的内存大小,不包括swap
56.SHR:进程与其他进程共享的内存大小,可以通过RES-SHR来计算进程所占用的物理内存大小
57.S:进程的状态
58.%CPUCPU的占用率
59.%MEM:内存的占用率
60.TIME+:CPU使用时间的累加

3、htop命令:top命令的升级版,功能比top强大很多,默认没安装,只在epel yum源中有安装包,支持鼠标操作

进入htop显示界面后的子命令: 
u 显示指定用户的进程 
H 显示或隐藏用户的进程 
K 显示或隐藏系统内核的进程 
M 可以按内存占用百分比大小排序 
P 可以按CPU占用百分比大小排序,默认就是此项 
T 可以按累计占用CPU时长大小排序 
l 显示进程所打开的文件列表 
s 显示进程执行的系统调用 
a 绑定进程到指定的CPU上,如果不指定则由内核调度

数字 快速将光标定位至指定的PID进程上 
F1 显示帮助信息 
F2 进入交互式选定第一分栏中要显示的字段和字段内容的显示格式 
F3 搜索指定的内容 
F4 过滤只显示指定的内容 
F5 以tree方式显示进程的树形关系 
F6 指定排序的字段

Linux进程管理命令和性能监控工具的应用

4、kill命令 
进程间通信(IPC): 
同一主机进程间通信的几种机制: 
1、signal 信号 
2、semaphore 旗语 
3、share memory 共享内存 
不同主机上的进程间通信机制: 
1、跨主机的进程间通信 RPC (远程过程调用) 
2、socket 基于套接字通信,套接字就是IP和端口的集合

kill命令:能够实现想起他进程发送信号,可使用的信号类型:(可用kill -l查看 或man 7 signal查看) 
常用的信号有: 
1信号 SIGHUP :通知程序重读配置文件,而不必重启程序来实现重读配置文件 
2信号 SIGINT :中断信号,Ctrl+c就是发送此信号给进程 
9信号 SIGKILL :杀死进程,直接杀死该进程 
15信号 SIGTERM :终止进程,让进程释放资源后杀死该进程

向进程发信号的方法: 
kill -SIGNAL PID kill 不指定发送哪个信号,则默认发送15信号 
SIGNAL可以是: 
数字代号,如1,9,15等 
信号名称,如SIGHUP等 
简写的信号名称,如HUP等 
如:kill -15 3132 对PID为3132的进程发送15号信号

1.[root@localhost ~]# >>vim mage &
2.[1] 23461
3.[root@localhost ~]# >>ps -aux |  grep vim      
4.root      23461  0.0  0.4 151280  4844 pts/0    T    21:54   0:00 vim mage
5.root      23477  0.0  0.0 112644   952 pts/0    S+   21:54   0:00 grep --color=auto vim
6.[root@localhost ~]# >>kill -9 23461
7.[root@localhost ~]# >>ps -aux |  grep vim
8.root      23479  0.0  0.0 112644   952 pts/0    S+   21:55   0:00 grep --color=auto vim
9.[1]+  Killed                  vim mage

killall -SIGNAL 进程名 
可以一次性对所有进程名为指定名称的进程发送信号 
如: 
killall -15 vim

1.[root@localhost ~]# >>vim mage1 &
2.[1] 23500
3.[root@localhost ~]# >>vim mage2 &
4.[2] 23501
5.[1]+  Stopped                 vim mage1
6.[root@localhost ~]# >>ps -aux |  grep vim
7.root      23500  0.2  0.4 151280  4840 pts/0    T    21:57   0:00 vim mage1
8.root      23501  0.5  0.4 151280  4848 pts/0    T    21:57   0:00 vim mage2
9.root      23503  0.0  0.0 112644   948 pts/0    S+   21:57   0:00 grep --color=auto vim
10.[2]+  Stopped                 vim mage2
11.[root@localhost ~]# >>killall -9 vim  
12.[root@localhost ~]# >>ps -aux |  grep vim
13.root      23517  0.0  0.0 112644   952 pts/0    S+   21:57   0:00 grep --color=auto vim
14.[1]-  Killed                  vim mage1
15.[2]+  Killed                  vim mage2

第三章 内存监控类工具(vmstat、pmap)

1、vmstat命令

vmstat语法: 
直接运行vmstat 显示当前的系统相关的使用信息,显示完成自动退出 
vmstat 数字 表示指定多少秒钟刷新一次,连续显示系统相关的信息,不会自动退出 
vmstat 数字1 数字2 表示指定数字1的秒数刷新一次,连续显示数字2指定的次数后自动退出 
vmstat -s 显示内存使用的摘要统计信息

vmstat命令显示内容详解

1.[root@localhost ~]# >>vmstat 2 5
2.procs -----------memory---------- ---swap-- -----io---- -system-- ------cpu-----
3. r  b   swpd   free   buff  cache   si   so    bi    bo   in   cs us sy id wa st
4. 2  0      0 401192   1200 412540    0    0     2     0   22   35  0  0 100  0  0
5.0  0      0 401176   1200 412572    0    0     0     0   38   58  0  0 100  0  0
6. 0  0      0 401176   1200 412572    0    0     0     0   25   38  0  0 100  0  0
7. 0  0      0 401176   1200 412572    0    0     0     0   38   57  0  0 100  0  0
8. 0  0      0 401052   1200 412572    0    0     0     1   30   42  0  0 100  0  0
9.[root@localhost ~]# >>
10.-----------------------------------------------------
11.procs:进程队列
12.    r:运行或等待CPU时间片的进程的个数(数值大,说明CPU不够用,或者跑的进程过多)
13.    b:不可中断睡眠的进程,被阻塞的进程队列长度(通常为等待IO完成的应用)
14.
15.memory:内存的相关信息
16.    swpd:从物理内存交换到swap上的数据量大小(有值或者值大,说明物理内存不够用)
17.    free:未使用的物理内存大小
18.    buff:缓冲空间大小,通常与缓存写操作相关
19.    cache:缓存空间大小,通常与缓存读操作相关
20.
21.swap:swap分区的相关信息
22.    si:swap in  从swap交换进内存的数据速率,通常是速率,kb/s
23.    so:swap out  从内存交换至swap的数据速率,通常是速率,kb/s
24.
25.io:跟磁盘IO相关的信息
26.    bi:block in 从块设备读入内存的数据量,通常是速率,kb/s
27.    bo:block out  从内存读出保存到块设备的数据量,通常是速率,kb/s
28.
29.system:跟系统相关的信息
30.    in:中断发生速率,也就是每秒钟产生的中断次数
31.    cs:context switch  上下文切换,也就是进程切换的速率,也就是每秒钟切换的次数
32.
33.cpu:跟cpu相关的信息(与top中的cpu的几个指标类似)
34.    us:用户空间占用的cpu的百分比
35.    sy:系统内核空间占用的cpu的百分比
36.    id:空闲的cpu百分比
37.    wa:等待IO完成所消耗的cpu百分比
38.    st:被偷走的cpu百分比(虚拟机偷走)

2、pmap命令:显示指定PID进程所占用的内存地址空间的使用情况

如:pmap 10 显示PID为10的进程所占用的内存的地址空间的情况 
也可以用过cat /proc/进程号/maps 来查看,pmap实际就是抽取这个文件里面的信息进行显示的

1.[root@localhost ~]# >>vim mage &
2.[1] 23619
3.[root@localhost ~]# >>pmap 23619
4.23619:   vim mage
5.0000000000400000   2112K r-x-- vim
6.000000000080f000      4K r---- vim
7.0000000000810000     88K rw--- vim
8.0000000000826000     56K rw---   [ anon ]
9.0000000000ae1000   2160K rw---   [ anon ]
10.00007f06bbb58000 103580K r---- locale-archive
11.00007f06c207f000      8K r-x-- libfreebl3.so
12.00007f06c2081000   2044K ----- libfreebl3.so
13.00007f06c2280000      4K r---- libfreebl3.so
14.00007f06c2281000      4K rw--- libfreebl3.so
15.00007f06c2282000      8K r-x-- libutil-2.17.so
16.00007f06c2284000   2044K ----- libutil-2.17.so
17.00007f06c2483000      4K r---- libutil-2.17.so
18.00007f06c2484000      4K rw--- libutil-2.17.so
19.00007f06c2485000     32K r-x-- libcrypt-2.17.so
20.00007f06c248d000   2044K ----- libcrypt-2.17.so

第四章 系统监控类工具(glances、dstat)

1、glances工具,系统上默认没有安装,需要通过EPEL源进行安装,功能强大,支持C/S架构模式进行远程查看 
内建命令:跟htop类似,可通过h进行查看

命令的常用选项: 
-b 以byte为单位显示网上数据速率 
-d 关闭磁盘I/O模块 
-m 关闭mount模块 
-n 关闭network模块 
-t 数字 设定刷新时间间隔 
-1 每个cpu的相关数据单独显示 
-o 指定将显示结果输出到文件中,可支持html格式或csv格式,一般与-f选项一起使用,指定输出的路径,如: 
glances -o {HTML|CSV} -f /PATH/TO/SOMEDIR 
只要glances不退出,输出的文件就会一直更新

Linux进程管理命令和性能监控工具的应用

C/S模式下运行glances命令: 
服务模式: 
glances -s -B IPADDR -B指明本机所监听的地址 
客户端模式: 
glances -c IPADDR IPADDR为远程服务器的地址

2、dstat命令,非常强大的工具,对系统各类资源进行统计,可以实时的监控cpu、磁盘、网络、IO、内存等使用情况

语法:dstat [-afv] [options..] [delay [count]] 
选项: 
-c:显示CPU系统占用,用户占用,空闲,等待,中断,软件中断等信息。 
-C:当有多个CPU时候,此参数可按需分别显示cpu状态, 
例:-C 0,1 是显示cpu0和cpu1的信息。 
-d:显示磁盘读写数据大小。 
-D sda,sdb,…total:显示指定磁盘的使用情况 
-n:显示网络状态。 
-N eth1,total:有多块网卡时,指定要显示的网卡。 
-l:显示系统负载情况。 
-m:显示内存使用情况。 
-g:显示内存页面使用情况,显示的是速率数据。 
-p:显示进程相关统计数据状态。 
-s:显示swap交换分区使用情况。 
-S:类似D/N。 
-r:显示I/O请求相关情况。 
-y:系统状态。 
–ipc:显示ipc进程间通信的相关数据,消息队列,信号,旗语等信息。 
–tcp 显示tcp相关统计数据 
–udp 显示udp相关统计数据 
–socket:用来显示tcp udp端口状态。 
–top-cpu 显示最占用CPU的进程 
–top-mem 显示最占用内存的进程 
–top-io 显示最占用I/O的进程 
-top-latency 显示延迟最大的进程 
-a:此为默认选项,等同于-cdngy。 
-v:等同于 -pmgdsc -D total。 
–output 文件:此选项也比较有用,可以把状态信息以csv的格式重定向到指定的文件中,以便日后查看。 
例:
dstat –output /root/dstat.csv & 此时让程序默默的在后台运行并把结果输出到/root/dstat.csv文件中

Linux进程管理命令和性能监控工具的应用

Linux进程管理命令和性能监控工具的应用

Linux进程管理命令和性能监控工具的应用

Linux进程管理命令和性能监控工具的应用

Linux进程管理命令和性能监控工具的应用

Linux进程管理命令和性能监控工具的应用

Linux进程管理命令和性能监控工具的应用

原创文章,作者:Kartik,如若转载,请注明出处:http://www.178linux.com/47914

(1)
上一篇 2016-09-26 18:17
下一篇 2016-09-27 08:48

相关推荐

  • linux 根文件系统层级FHS

    下面介绍认识一下FHS FHS: Filesystem Hierarchy  Standard /bin:所有用户可用的基本命令程序文件; /sbin:供系统管理使用的工具程序; /boot:引导加载器必须用到的各静态文件: kernel,   initramfs(initrd),  grub 等 dev:存储特殊文件或设备文件…

    Linux干货 2016-10-28
  • 计算机组成及功能简介

    计算机(computer)       当今它已经走进千家万户,应用在各个领域,没有用过计算机的朋友应该很少了吧?但是,你真正了解计算机是什么吗?(我也是刚刚了解的,(*^__^*)嘻嘻……)那么,接下来,让我们一起探究一下它的具体构造吧!       所谓的计算机就是…

    Linux干货 2016-10-25
  • 马哥教育网络班22期+第十二周课程练习

    1、请描述一次完整的http请求处理过程。    (1) 客户端与服务端通过TCP三次握手建立或处理连接:接收请求或拒绝请求    (2) 接收请求:接收来自于网络上的主机请求报文中对某特定资源的一次请求的过程    (3) 处理请求:对请求报文进行解析,获取客户端请求…

    Linux干货 2016-12-29
  • 相关练习

    1、请使用命令行展开功能来完成以下练习:    (1)、创建/tmp目录下的:a_c, a_d, b_c, b_d  mkdir /tmp/{a,b}_{c,d}    (2)、创建/tmp/mylinux目录下的:  mkdir -pv /tmp/mylinux/{bin,boot/grub,de…

    Linux干货 2016-11-05
  • linux常见命令示例

    1、复制/etc/skel目录为/home/tuser1,要求/home/tuser1及其内部文件的属组和其它用户均没有任何访问权限。 ############################################################################# cp -ar /etc/skel/ /home/tuser1 [ro…

    Linux干货 2017-12-25