Linux进程管理工具详解:htop、glances、dstat
1.进程相关知识
1.操作系统的功能:文件系统、网络功能、进程管理、内存管理、安全功能、驱动程序(Linux是一个多任务的操作系统,而且是抢占式的多任务操作系统);.OS其实就是提供虚拟的计算机,进而能够将有限的资源借助于“保护”机制分配多个同时运行的程序,即“进程”使用,从而实现了所谓的多任务
2.程序执行环境有2种:
内核模式:cpu运行内核级指令
用户模式:cpu运行普通指令
3.应用程序运行普通指令,其实是直接运行于cpu上;应用程序运行特权指令,是通过系统调用(system call)
4.特权指令是指操作硬件的指令。即总线、I\O,控制器;普通指令:计算加、减、乘、除等
5.进程调度(多个进程进行运行时,CPU就要分配时间片给各个进程运行),是有一定的进程调度算法来调优的。
6.进程分类:
CPU bound(CPU密集型):需要跟多的cpu来运行
I/O bound(I/O密集型):需要更多的I/O来运行
7.进程优先级(优先级越高越有资源分配的权利),Linux中进程 优先级有140个优先级,
范围是0-139.其中1-99是实时优先级,数字越大优先级越高;
100-139是静态优先级,数字越小优先级越高。
动态优先级是有内核在维护的。
8.进程的创建是由创建父进程开始的,即进程的请求发出者。由内核负责创建:fork()---创建父进程,然后再创建子进程clone()
9.进程的状态分为:
1.运行态(running)
2.睡眠态(sleeping):分为可中断睡眠态和不可中断睡眠态(后者是通常是被I/O阻塞的进程)
3.就绪态
4.停止态
5.僵死态
10.进程任务结构(task struct:用于保存每个进程的元数据信息,例如:pid、ppid、memory、thread、files)。进程内部组织结构,即进程的线性地址空间
11.task list:用一种称作“链表”的数据结构来保存每个进程的task struct
12.进程切换(context switch),切换进程一定要保存现场,等下一次运行或切换到此进程时,要恢复现场。进程切换是有确定的切换频率(比如100HZ--1S可以切换100次)
13线程(thread):让一个进程中有多个流水线,是进程中的子单位,进而实现运行在多个cpu上。线程是更轻量的、可被单独调用的运行单元,而且还可以共享进程的资源,如打开文件等。线程不能同时运行.线程只适用与多核cpu上,而且是跟进程同级被调度的单位
14.进程常见专用术语
LWP(Light Weight Process)---轻量级线程
COW(Copy On Writing)---时复制
CFS---完全公平调度器
PID---进程的标识号
2.工具详解
1.htop命令
用法:htop [-dChusv]
交互式命令:
u:过滤仅显示用户的进程
s:跟踪选定的进程所发起的系统调用
l:显示选定进程所打开的文件
a:设定进程的cpu的亲缘性(将选定的进程绑定在指定的cpu上)
t:显示进程的进程树
选项:
-d #:延迟时常
-u USERNAME:仅显示指定用户的进程
-s COLUMN:根据指定的字段进行排序
监测界面各参数代表含义
然后,右上角的:
Tasks:96,86:进程总数,当前运行进程数 ;
Load average:表示1分钟、5分钟、15分钟系统的平均负载情况,
Uptime:系统运行的时间
再然后,PID表示:进程的标识号;USER表示该运行进程的用户;
PRI:该进程的优先级;NI:该进程的nice值,进程的优先级别值,默认为0;
VIRT: 进程占用虚拟内存值;RES:进程占用的物理内存值 ;SHR:进程占用的共享 内存值;
S:进程的运行状态,R:表示正在运行。S:表示睡眠状态,等待唤醒。Z:表示僵死状态;
CPU%: 进程占用的cpu 百分比 ;MEM%: 进程占用的内存百分比 ;
TIME+:该进程启动后占用cpu的时间 ;
Command:启动该进程的进程命令名称
2.glances命令
用法:glances [-bdehmnrsvyz1] [-B bind] [-c server] [-C conffile] [-p port] [-P password] [--password] [-t refresh] [-f file] [-o output]
常用选项:
-b:以Bytes/s为单位显示网卡设备数据交换律
-d:禁用显示磁盘I/O的统计数据
-f /PATH/TO/SOMEFILE:设置输出文件的位置及格式
-o {HTML|CSV}:设定输出格式即:HTML|CSV格式
-m:关闭mount功能模块
-n:关闭网络功能模块
-r:禁止显示进程列表
-t #:指定延迟时长,默认为3s
-1:单独显示每颗cpu相关负载数据信息
:
glances支持远程模式,即可以以C/S模式工作:
Server: 以监听模式启动glances;
Client: 以远程模式启动glances,远程连入指定服务器,并Server上的相关性能数据;
服务模式:
glances -s -B IPADDR
-B: 用于指明监听的本地地址;
客户端模式:
glances -c IPADDR
-c: 用于连入的服务器的地址;
监测界面
监测界面各参数含义:
从上到下,依次表现cpu的使用情况、用户占用cpu的情况、系统占用cpu的情况、空闲的cpu情况
从上到下,依次表现为1min、5min、15min系统的平均负载情况
从上到下,第一列表现为内存使用情况、总共的内存打下、用户使用的内存大小、空闲的内存大小;第二列表现为活跃的内存大小、不活跃的内存大小、缓冲区的内存大小、缓存区的内存大小
从上到下,交换分区的使用情况(代表着系统)、swap总共大小、已用大小、空闲部分大小
从上到下依次表现为网络接口的状态,第二行:第一块网卡eth0的接收到的数据速率、发出去的数据速率;第3行:回环网卡lo的接收到的数据速率、发出的数据速率
从左到右:进程的总数(264thr)、1个进程处于正在运行状态、177个进程处于 睡眠状态、0个处于其他状态
分别挂载设备的内存使用情况,例:第二行分别表示"\"设备的名称、此设备已使用的内存大小、总共的内存大小。
分别表示:进程占用的虚拟内存大小、进程占用的物理内存大小、进程占用的cpu百分比、进程占用的内存百分比、进程的PID号、运行此进程的用户、启动该进程的进程命令名称
3..dtat命令
用法:dstat [-afv] [options..] [delay [count]]
选项:
-c:显示cpu性能指标相关的统计数据
-d:显示disk相关的速率数据
-g:显示page相关的速率数据
-i:显示中断(interrupt)相关的速率数据
-l:显示load average相关的统计数据(即负载)
-m:显示内存相关的统计数据
-n:显示网络的收发的数据的速率
-N eth#:显示指定接口的
-p:显示进程的相关的统计数据(新建进程的速率等)
-r:io请求的速率
-s:显示swap的相关数据
-y:显示系统相关的数据,包括终端和进程切换
--top-cpu:显示最占用cpu的进程
--top-bio:显示最消耗block io的进程
--top-mem:显示最占用内存的进程
--top-io:最占有cpu的进程
--ipc:显示用于进程间通信相关的速率数据
--raw:显示raw套接字的相关数据
--tcp:显示tcp套接字的相关数据
--udp:显示udp套接字的相关数据
--unix:显示inux sock接口相关统计数据
--socket:显示上面所有的统计相关统计数据(total, tcp, udp, raw)
ip-fragments)
-a:即-cdngy
4.vmstat命令
用法:
vmstat [-a] [-n] [-t] [-S unit] [delay [ count]]
vmstat [-s] [-n] [-S unit]
vmstat [-m] [-n] [delay [ count]]
vmstat [-d] [-n] [delay [ count]]
vmstat [-p disk partition] [-n] [delay [ count]]
vmstat [-f]
vmstat [-V]
监测界面
监测界面各参数代表含义
procs
r:运行的和等待(CPU时间片)运行的进程数,这个值也可以判断是否需要增加CPU(长期大于1)
b:处于不可中断状态的进程数,常见的情况是由IO引起的
Memory
swpd: 切换到交换内存上的内存(默认以KB为单位)。如果 swpd 的值不为0,或者还比较大,比如超过100M了,但是 si, so 的值长期为 0,这种情况我们可以不用担心,不会影响系统性能。
free: 空闲的物理内存
buff: 作为buffer cache的内存,对块设备的读写进行缓冲
cache: 作为page cache的内存, 文件系统的cache。如果 cache 的值大的时候,说明cache住的文件数多,如果频繁访问到的文件都能被cache住,那么磁盘的读IO bi 会非常小。
Swap
si: 交换内存使用,由磁盘调入内存
so: 交换内存使用,由内存调入磁盘
【注意:内存够用的时候,这2个值都是0,如果这2个值长期大于0时,系统性能会受到影响。磁盘IO和CPU资源都会被消耗。观察系统性能应结合空闲内存(free)、si、so,如果free很少,但是si,so也很少(基本上为0),那么不用担心,系统性能这时不会受到影响】
磁盘IO
bi: 从块设备读入的数据总量(读磁盘) (KB/s)
bo: 写入到块设备的数据总理(写磁盘) (KB/s)
【注意:随机磁盘读写的时候,bi、bo 值越大(如超出1M),能看到CPU在IO等待的值也会越大
System
in: 每秒产生的中断次数
cs: 每秒产生的上下文切换次数
【注意:上面这2个值越大,会看到由内核消耗的CPU时间会越多Cpu】
cpu
usr: 用户进程消耗的CPU时间百分比
【注意:usr的值比较高时,说明用户进程消耗的CPU时间多,但是如果长期超过50% 的使用,就该考虑优化程序算法或者进行加速了】
sys: 内核进程消耗的CPU时间百分比
【注意:sys 的值高时,说明系统内核消耗的CPU资源多,这并不是良性的表现】
wa: IO等待消耗的CPU时间百分比
【注意:wa 的值高时,说明IO等待比较严重,这可能是由于磁盘大量作随机访问造成,也有可能是磁盘的带宽出现瓶颈(块操作)】
idl: CPU处在空闲状态时间百分比
郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。