【讲清楚,说明白!】资源管理三板斧之--htop、vmstat、dstat
(一)htop命令
(二)vmstat命令
(三)pmap命令
(四)glances命令
(五)dstat命令
(一)htop命令
(1.1)EPEL(Extra Packages for Enterprise Linux)是由Fedora社区打造,为RHEL及衍生发行版如CentOS等提供高质量软件包的项目。装上了EPEL,就像在Fedora上一样,可以通过yum install的方式安装,即可安装很多以前需要编译安装的软件、常用的软件或一些比较流行的软件,比如现在流行的nginx、htop、ncdu、vnstat等等,都可以使用EPEL很方便的安装更新。
(1.2)在管理进程时通常要借助一些工具,比较常用的就是ps和top了,不过CentOS还为我们提供了一个更加强大的工具htop,htop是一个Linux下的交互式的进程浏览器,可以用来替换Linux下的top命令。我们使用CentOS 7系统,并通过aliyun下载epel源,按照如下的操作方式进行。
# cd /etc/yum.repos.d/---进入到/etc/yum.repos.d/目录
# mv /etc/yum.repos.d/CentOS-Base.repo /etc/yum.repos.d/CentOS-Base.repo.backup---将CentOS-Base.repo重命名为CentOS-Base.repo.backup
# wget -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo ---下载Centos-7.repo的源
# wget -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/epel-7.repo ---下载epel-7的源
注意:我们也可以使用163的源https://mirrors.163.com/.help/ ,或者直接通过官方源安装:# rpm -Uvh https://dl.fedoraproject.org/pub/epel/epel-release-latest-7.noarch.rpm
(1.3)然后将缓存清理一下,并重新建立缓存。此时我们通过“# yum repolist”可以查看当前系统的YUM源的情况。
# yum clean all---将缓存清理一下
# yum makecache---重新建立缓存
# yum repolist---查看当前系统的YUM源的情况
(1.4)CPU在实现查看其分配和利用率的过程中主要有如下的一些关键指标:其中第一个us表示用户空间占用CPU百分比,第二个sy表示的是内核空间占用CPU百分比,第三个ni表示的是用户进程空间内改变过优先级的进程占用CPU百分比,第四个id表示的是空闲CPU百分比,第五个hi表示的是硬件中断百分比,第六个si表示的是软件中断百分比,第七个cs表示处理上下文切换百分比,第八个st表示的是被虚拟化分走所占用的百分比,第九个wa表示的是等待输入输出的CPU时间百分比。
对于内存Memory衡量的关键指标主要有:第一个VSZ表示虚拟内存集,第二个RSS表示常驻内存集,第三个SHM表示共享内存集。
(1.5)接着我们在系统中安装htop软件包。
(1.6)我们在命令行输入“# htop”直接打开进入到一个浏览器的界面,在图中将输出的界面划分成了四个区域,其中上左区:显示了每颗CPU、物理内存和交换分区的信息;上右区:显示了任务数量、线程数量、平均负载和连接运行时间等信息;进程区域:显示出当前系统中的所有进程;操作提示区:显示了当前界面中F1至F10功能键中定义的快捷功能。
# htop
(1.7)界面支持鼠标操作,我们在键盘上按F1或者在屏幕上进行点击,可以显示帮助信息,其中CPU usage bar即CPU显示当中low-priority表示低优先级,normal表示正常,kernel表示内核的,virtualiz表示被虚拟化拿走的时间。而Memory bar中绿色used表示使用的内存,紫色buffers表示缓冲,橙色cache表示缓存。Status状态部分中:R表示运行,S表示睡眠,T表示被跟踪或者停止状态,Z表示僵尸态,D表示不可中断的睡眠。
(1.8)其中在htop主界面中我们可以使用如下的按键进行操作
按键u:显示指定用户的进程
按键q:退出,可以最后退出htop程序
按键Esc:退回到前一步
按键H:隐藏用户线程
按键K:隐藏内核线程
按键F:跟踪光标所在的线程
按键M:按照内存使用百分比排序,对应MEM%列
按键P:按照CPU使用百分比排序,对应CPU%列
按键T:按照进程运行的时间排序,对应TIME+列
按键c:能够标记处一个进程以及这个进程的子进程来
按键a:能够设置CPU的亲和性
按键U:取消所有选中的进程
按键l:能够显示光标所在进程的文件列表(小写字母L)
按键s:显示光标所在进程执行的所有系统调用,按F8键可以自动滚屏刷新当前系统新生成的系统调用。
按键T或者F5键:可以以进程树的形式展现出各进程之间的父子关系。
按键F2:配置界面中的显示信息
(1.9)htop命令的选项参数如下:
# htop -d 2---设置刷新时间,单位为秒
# htop -u root---显示指定用户的进程
# htop -s TIME---以指定的列排序
# htop -C---设置界面为无颜色
(二)vmstat命令
(2.1)vmstat命令是用来报告虚拟内存的统计数据的,vmstat命令报告关于内核线程、虚拟内存、磁盘、陷阱和CPU活动的统计信息。由vmstat命令生成的报告可以用于平衡系统负载活动,系统范围内的这些统计信息都计算出以百分比表示的平均值,或者计算其总和。
(2.2)我们执行vmstat命令后会发现产生了五列的内容,主要包括procs进程,memory内存,swap交换分区,io为块级别的io,system系统包括中断和上下文切换,cpu主要包括用户空间、内核空间、空闲百分比、等待输入输出百分比、被虚拟化分走的百分比。
(2.3)如果我们希望当前的输出数据能够每2秒动态输出一次,此时我们可以使用“# vmstat 2”命令。而如果我们希望输出数据能够每2秒动态输出一次,并且总共显示3次,此时我们可以使用“# vmstat 2 3”
# vmstat 2---输出数据能够每2秒动态输出一次
# vmstat 2 3---输出数据能够每2秒动态输出一次,并且总共显示3次
(2.4)每一列的详细含义
(2.4.1)procs进程,如果这个队列非常长,那么等待io的时间很长,io的能力有限。
r:等待运行的进程的个数;CPU上等待运行的任务队列的长度
b:处于不可中断睡眠态的进程个数;被阻塞的任务队列的长度
(2.4.2)memory内存
swap:交换内存使用量,0表示没有启用交换内存,实际使用的是硬盘容量
free:空闲的物理内存总量
buffer:用于buffer的内存总量
cache:用于cache的内存总量
(2.4.3)swap交换分区,如果我们发现系统有大量的交换分区的使用换进,但是换出的频率不是很频繁那么对我们系统的影响还不是很大,但是如果我们大量的交换分区在换进换出操作,即si与so之间活动的速率非常频繁,这也就意味着我们的物理内存太小,需要扩充内存。
si:数据进入swap中的数据速率(kb/s)
so:数据离开swap的速率(kb/s)
(2.4.4)io
bi:从块设备读入数据到系统的速度(kb/s)
bo:保存数据至块设备的速率(kb/s)
(2.4.5)system
in:interrupts,中断速率
cs:context switch,上下文切换的速率,如果上下文切换的速率太高说明需要运行的进程太多,CPU的性能太弱
(2.4.6)CPU
us:user space,用户空间
sy:system,内核空间
id:idle,空闲CPU百分比
wa:wait,等待输入输出的CPU时间百分比
st:stolen,被虚拟化分走所占用的百分比
(2.5)如果我们需要显示内存统计数据
# vmstat -s
(2.6)如果我们希望将执行的5行结果保存到test文件中,我们可以使用如下的方式操作。
# vmstat 5 >> test &
(三)pmap命令
(3.1)pmap命令用于报告进程的内存映射关系,是Linux调试及运维的一个很好的工具。命令的语法为“pmap (选项) (参数)”,其中参数一般有如下的种类:
-x:显示扩展格式
-d:显示设备格式
-q:不显示头尾行
-V:显示指定版本
(3.2)我们如果想要查看1号systemd进程的内存映射关系,可以按照如下的方式操作。其中anon表示的是匿名页,stack表示的栈。
# pmap 1---显示systemd进程的内存映射关系
(3.3)如果我们需要显示更详细的信息,可以使用-x的参数,其中多出来了3列数据,其中RSS表示长度内存集,Dirty表示的是脏数据。当然我们也可以通过查看内核的信息方式实现详细信息的提取,
# pmap -x 1---显示详细格式信息
# cat /proc/1/maps---通过内核查看详细内存映射信息
(四)glances命令
(4.1)glances工具可以在用户的终端上实时显示重要的系统信息,并动态地对其进行更新。这个高效的工具可以工作于任何终端屏幕。另外它并不会消耗大量的CPU资源,通常低于百分之二。glances在屏幕上对数据进行显示,并且每隔两秒钟对其进行更新。你也可以自己将这个时间间隔更改为更长或更短的数值,glances工具还可以捕获到一个文件,便于以后对报告进行分析和绘制图形,输出文件可以是电子表格的格式(.csv)或者html格式。
(4.2)我们首先将glances命令安装起来。
# yum install glances -y
(4.3)我们运行glances命令后发现,其中系统中第1个表示的是CPU的相关参数,第2个表示的是内存相关的参数信息,第3个表示的是交换分区的参数信息,第4个表示的是系统在一分钟、五分钟、十五分钟的平均负载情况,第5个表示的是网络的相关交换速率,其中Rx表示接收的,Tx表示发送的,第6个表示的是磁盘的读写速率信息,第7个表示的是挂载的文件系统,其中Used表示的是医用的空间大小,Total表示总的空间大小,其中第8个中VIRT标示的是虚拟内存集、RES表示的是常驻内存集、NI表示nice值、S表示的是状态、“TIME+”表示的是累计时间、IOR/s表示的io读每秒的速率、IOW/s表示的是io写每秒的速率、Command表示的是进程名称
(4.4)我们需要了解glances命令的帮助信息,我们可以使用按键h获取帮助
(4.5)glances常用选项
-b:以Byte为单位显示网上数据速率
-d:关闭磁盘I/O模块
-m:关闭mount模块
-n:关闭network模块
-C file:设置配置文件默认是/etc/glances/glances.conf
-e:显示传感器温度
-p PORT:设置运行端口默认是61209
-P password:设置客户端/服务器密码
-t sec:设置屏幕刷新的时间间隔,单位为秒,默认值为2秒,数值许可范围:1~32767
-s:设置glances运行模式为服务器
-h:显示帮助信息
-v:显示版本信息
# glances -1---表示每个CPU都单独显示出来
(4.6)如果我们希望将输出的文本信息保存到一个我们指定的文件中,则可以使用如下的操作方式,我们需要先安装python-jinja2软件包,然后在指定glances将输出的文本指定到对应的文件中。
# yum install python-jinja2 -y---安装python-jinja2软件包
# glances -f /tmp/ -o HTML---指定glances会输出到/tmp/目录下html格式的文件
# glances -f /tmp/ --export-csv CSV---指定glances会输出到/tmp/目录下csv格式的文件
# yum whatprovides */libreoffice---安装libreoffice的calc工具
# libreoffice --calc %U /tmp/CSV---使用libreoffice的calc工具打开csv格式文件
(4.7)我们还可以使用C/S模式运行glances命令,其中服务端模式为“glances -s -B IPADDR”,其中IPADDR为本机的某地址用于监听(图3-9),而在客户端模式为“glances -c IPADDR”,其中IPADDR是远程服务器的地址(图3-10)。我们在vms001主机上连接CentOS 7主机后,发现可以正常的显示CentOS 7主机上的glances信息。
# glances -s -B 192.168.26.131---在CentOS 7服务器端主机上执行
# glances -c 192.168.26.131---在vms001客户端主机上执行
(五)dstat命令
(5.1)dstat是一个可以取代vmstat、iostat、netstat和ifstat这些命令的多功能产品。dstat克服了这些命令的局限并增加了一些额外的功能,增加了监控项,也变得更灵活了。dstat可以很方便监控系统运行状况并用于基准测试和排除故障,dstat可以让你实时的看到所有系统资源,例如,你能够通过统计IDE控制器当前状态来比较磁盘利用率,或者直接通过网络带宽数值来比较磁盘的吞吐率(在相同的时间间隔内)。dstat将以列表的形式为你提供选项信息并清晰地告诉你是在何种幅度和单位显示输出,这样更好地避免了信息混乱和误报。更重要的是,它可以让你更容易编写插件来收集你想要的数据信息,以从未有过的方式进行扩展。dstat的默认输出是专门为人们实时查看而设计的,不过你也可以将详细信息通过CSV输出到一个文件,并导入到Excel生成表格。
(5.2)我们打开dstat命令后,会以动态的效果一直在屏幕上滚动刷新。如果我们希望每隔两秒显示一个批次,一共显示五次,则可以使用下面的方式进行显示。默认情况下dstat的参数自动含有“-cdngy”的参数,分别表示的是“total-cpu-usage”、“dsk/total”、“net/total”、“paging”、“system”。
# dstat 2 5
(5.3)其中第一个“total-cpu-usage”表示CPU状态,CPU的使用率,这项报告更有趣的部分是显示了用户、系统和空闲部分,这更好的分析了CPU当前的使用状况。如果你看到“wait”一栏中,CPU的状态是一个高使用率值,那说明系统存在一些其它问题。当CPU的状态处于“waits”时,那是因为它正在等待I/O设备(例如内存,磁盘或者网络)的响应而且还没有收到。第二个“dsk/total”表示的是磁盘统计,磁盘的读写操作,这一栏显示磁盘的读、写总数。第三个“net/total”表示的是网络统计,网络设备发送和接收的数据,这一栏显示的网络收、发数据总数。第四个“paging”表示分页统计,系统的分页活动,分页指的是一种内存管理技术用于查找系统场景,一个较大的分页表明系统正在使用大量的交换空间,或者说内存非常分散,大多数情况下你都希望看到page in和page out的值是0。第五个“system”这一项显示的是中断(int)和上下文切换(csw)。这项统计仅在有比较极限时才有意义,这一栏中较高的统计值通常表示大量的进程造成拥塞,需要对CPU进行关注,你的服务器一般情况下都会运行一些程序,所以这项总是显示一些数值。
(5.4)dstat命令可跟的常用选项:
-c,--cpu:显示cpu相关信息
# dstat -C 1---显示1号cpu的信息
# dstat -C total---显示所有cpu的信息
-d,--disk:显示磁盘的相关信息
# dstat -D total---显示系统总的磁盘信息
-g:显示page相关的速率数据
-m:Memory的相关统计数据
-n:Interface的相关统计数据
-p:显示process的相关统计数据
-r:显示io请求的相关的统计数据
-s:显示swapped的相关统计数据
-l:显示负载统计量
-t:将当前时间显示在第一行
--tcp:显示tcp状态的统计数据
--udp:显示udp状态的统计数据
--socket:显示网络统计数据
--ipc:进程间通信的相关数据
--top-cpu:显示最占用CPU的进程
--top-mem:显示最占用内存的进程
--top-lantency:显示延迟最大的进程
--fs:显示文件系统统计数据(包括文件总数量和inodes值)
--nocolor:不现实颜色(有时候会用)
--disk-util:显示某一时间磁盘的忙碌状况
--freespace:显示当前磁盘空间使用率
--proc-count:显示正在运行的程序数量
--top-bio:指出块I/O最大的进程
--top-cpu:图形化显示CPU占用最大的进程
--top-io:显示正常I/O最大的进程
--top-mem:显示占用最多内存的进程
(5.5)示例:查看全部内存都有谁在占用
# dstat -g -l -m -s --top-mem
(5.6)示例:显示一些关于CPU资源损耗的数据
# dstat -c -y -l --proc-count --top-cpu
—————— 本文至此结束,感谢阅读 ——————