Linux学习49 资源管理三板斧-htop、vmstat、dstat实战
一、回顾
1、Linux OS基础概念,进程查看的几个工具
2、内核的功能:进程管理(进程调度)
进程调度:保存现场,恢复现场
task struct:任务结构
task list:任务列表
CPU:us,sy,ni,id,hi,si,cs,st
Memory:VSZ,RSS,SHM
3、命令
pstree,pgrep,pkill,ps,top,uptime
二、Linux进程管理及作业管理(2)
1、htop:top的升级版(支持鼠标点击)
a、htop而言默认是每一颗CPU分开单独显示
b、可按f1进入帮助界面,其它命令top命令基本都有,只是以下几个命令需要注意:
l:查看选定进程所打开的文件(可通过上下键选定进程)
s:跟踪一个进程所发起的系统调用,我们想了解这个进程发起过哪些系统调用选定这个进程然后敲s键即可查看
c、相应选项
-d #:指定延迟时间间隔
-u UserName:仅显示指定用户的进程
-s COLUME:以指定字段进行排序
d、子命令
l:显示选定的进程打开的文件列表(相当于使用lsof命令)
s:跟踪选定的进程执行的系统调用
t:以树状结构显示各进程间的父子关系(f5也可以)
a:将选定的进程绑定至某指定的CPU核心
2、vmstat命令:报告虚拟内存的统计数据
a、可以直接用vmstat命令
[root@node1 /]# 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 1126348 2224 625920 0 0 54 49 135 187 1 1 99 0 0
b、以动态形式刷新,2秒1次只显示2次
[root@node1 /]# vmstat 2 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 1126208 2224 625952 0 0 53 48 133 183 1 1 99 0 0 0 0 0 1126208 2224 625952 0 0 0 0 90 107 0 0 100 0 0
c、相应的字段意思
(1)、procs:进程
r:running,表示等待运行的进程的个数,也就是CPU中等待运行的任务队列长度
b:处于不可中断睡眠态的进程个数,也就是被阻塞的任务队列的长度,如果这个队列非常长通常意味着io能力很有限
(2)、memory:内存段
swpd:交换内存的使用总量,0表示没有启用交换内存
free:空闲的物理内存总量
buffer:用于buffer(缓冲)的内存总量
cache:用于cache(缓存)的内存总量
(3)、swap
si(swap in):数据进入swap中的数据的速率,单位是kb/s。
so(swap out):数据离开swap的速率,单位是kb/s,数据离开swap即数据重新载入内存中,如果数据过大的话通常意味着当前
如果我们si和so活动非常频繁就意味着我们的物理内存太小了,如果不频繁只是大量的进入到swap很少再出去或者出去的速率低的多的多就意味着问题还不是特别严重
(4)、io
bi:从块设备读入数据到系统(也就是加载数据到内存)的速率(kb/s)
bo:保存数据至块设备的速度(kb/s)
这个速率是无法评估我们io的性能的,因为如果你的进程需要频繁的用到数据的话这儿bi和bo的速率就会非常大。
(5)、system
in:interrupts,中断。即中断速率
cs:context switch,上下文切换的速率,也就是进程被内核调度来调度去的频率。
对很繁忙的服务器速率有可能上百或上万,但是如果上下文切换达到上万的话这就意味着需要运行的进程太多而你的CPU能力太弱,弱爆了
中断的速率一般而言有可能会比较大,尤其是网络服务器,任何一个数据报文到达当前主机时都会发生一个硬中断,任何磁盘发生io时也都会发生一个硬中断,更何况我们应用程序运行时从用户模式转为内核模式时也会发生中断,只不过系统调用是基于软中断模式进行的,用户进程运行时为了执行一些特权操作但是应用程序没这个功能他就需要系统调用来实现,我们当前程序运行过程中,本来是运行自己程序的,后来要进行系统调用,从当前用户模式转为内核模式这个过程是通过软中断的方式进行的。而任何硬件基本的一些事情的通知是通过硬中断来进行的。中断指的是什么呢?比如对于我们当前主机来讲,我们主板上集成的有很多io设备,当我们的io设备需要跟当前的CPU进行交互时,我们CPU怎么知道什么时候IO设备。当某一个设备需要与CPU交互时CPU怎么知道这个设备上有信号到达并处理它的信号呢?比如我敲一下键盘,他会在总线上产生一个电信号,这个电信号要被CPU用来控制和处理,否则的话没法把这个信号接进来,那这么多信号CPU怎么知道哪个是io设备呢?无非就是这样几种方式:
1、轮询
2、
(6)、CPU:CPU上等待运行的任务的队列长度
us(user space):用户空间
sy(system space):系统空间
id(idle):空闲值
wa(wait):等待的时间
st(stolen):被虚拟化技术所偷走的时间
d、vmstat命令是通过查看/proc相应的信息来进行显示的
e、常用选项
-s :显示当前内存统计数据
[root@node1 ~]# vmstat -s 2031912 K total memory 280604 K used memory 276672 K active memory 155808 K inactive memory 1122604 K free memory 2224 K buffer memory 626480 K swap cache 2097148 K total swap 0 K used swap 2097148 K free swap 5576 non-nice user cpu ticks 15 nice user cpu ticks 7609 system cpu ticks 2560603 idle cpu ticks 152 IO-wait cpu ticks 0 IRQ cpu ticks 213 softirq cpu ticks 0 stolen cpu ticks 429122 pages paged in 393344 pages paged out 0 pages swapped in 0 pages swapped out 1881955 interrupts 2499525 CPU context switches 1584352017 boot time 2403 forks
3、pmap命令
用来显示报告一个进程的内存映射表
a、pmap [options] PID
-x:显示详细格式的信息
b、另一种查看方式:cat /proc/PID/maps
4、glances命令
监控相应的系统信息
a、常用选项
-b:以Byte为单位显示网卡数据速率
-d:关闭磁盘I/O模块
-m:关闭mount模块
-n:关闭network模块
-t #:刷新时间间隔
-1:每颗cpu相关数据单独进行显示
-o:指定输出格式
-f /PATH/TO/SOMEDIR:设定输出文件的位置
b、如何在C/S模式下运行glances命令
服务模式:
glances -s -B IPADDR (-s是指服务器模式,-B是指监听地址)
IPADDR:本机的某地址,用于监听
客户端模式:
glances -c IPADDR
IPADDR:远程服务器地址
5、dstat
a、不带参数
[root@wohaoshuai1 ~]# dstat You did not select any stats, using -cdngy by default.(默认选项是-cdngy) ----total-cpu-usage---- -dsk/total- -net/total- ---paging-- ---system-- usr sys idl wai hiq siq| read writ| recv send| in out | int csw 1 1 96 2 0 0| 216k 182k| 0 0 | 0 0 | 130 217 0 0 100 0 0 0| 0 0 | 60B 874B| 0 0 | 81 82 0 0 100 0 0 0| 0 0 | 60B 346B| 0 0 | 80 85 0 0 100 0 0 0| 0 0 | 60B 346B| 0 0 | 82 89 0 1 99 0 0 0| 0 0 | 60B 346B| 0 0 | 86 84
b、常用选项
-c,--cpu:显示cpu相关信息
-C #,#...total:显示哪一颗cpu
-d,--disk:显示磁盘的相关信息
-D sda,sdb,...,total:显示哪一块磁盘的信息
-g:显示page相关的统计数据
-m:Memory的相关统计数据
-n:interface的相关统计数据
-p:显示process的相关统计数据
-r:显示io请求的相关的统计数据
-s:显示swap的相关统计数据
--tcp
[root@wohaoshuai1 ~]# dstat --tcp ----tcp-sockets---- lis act syn tim clo 7 2 0 0 0 7 2 0 0 0 7 2 0 0 0 7 2 0 0 0
--top-bio:查看最消耗磁盘io的进程
[root@wohaoshuai1 ~]# dstat --top-bio ----most-expensive---- block i/o process bash 87k 126k
--top-cpu:查看最耗cpu的进程是谁
[root@wohaoshuai1 ~]# dstat --top-cpu -most-expensive- cpu process vmtoolsd 0.1 vmtoolsd 1.0 glances 1.0
--top-int:产生的最多中断数量的进程是谁
--top-mem:最占用内存的进程
[root@wohaoshuai1 ~]# dstat --top-mem --most-expensive- memory process tuned 16.0M tuned 16.0M tuned 16.0M
--top-lantency:延时最大的进程
6、kill:终止一个进程
a、用于向进程发送信号,以实现对进程进行管理
b、显示当前系统可用信号
kill -l [signal]
[root@wohaoshuai1 ~]# kill -l 1) SIGHUP 2) SIGINT 3) SIGQUIT 4) SIGILL 5) SIGTRAP 6) SIGABRT 7) SIGBUS 8) SIGFPE 9) SIGKILL 10) SIGUSR1 11) SIGSEGV 12) SIGUSR2 13) SIGPIPE 14) SIGALRM 15) SIGTERM 16) SIGSTKFLT 17) SIGCHLD 18) SIGCONT 19) SIGSTOP 20) SIGTSTP 21) SIGTTIN 22) SIGTTOU 23) SIGURG 24) SIGXCPU 25) SIGXFSZ 26) SIGVTALRM 27) SIGPROF 28) SIGWINCH 29) SIGIO 30) SIGPWR 31) SIGSYS 34) SIGRTMIN 35) SIGRTMIN+1 36) SIGRTMIN+2 37) SIGRTMIN+3 38) SIGRTMIN+4 39) SIGRTMIN+5 40) SIGRTMIN+6 41) SIGRTMIN+7 42) SIGRTMIN+8 43) SIGRTMIN+9 44) SIGRTMIN+10 45) SIGRTMIN+11 46) SIGRTMIN+12 47) SIGRTMIN+13 48) SIGRTMIN+14 49) SIGRTMIN+15 50) SIGRTMAX-14 51) SIGRTMAX-13 52) SIGRTMAX-12 53) SIGRTMAX-11 54) SIGRTMAX-10 55) SIGRTMAX-9 56) SIGRTMAX-8 57) SIGRTMAX-7 58) SIGRTMAX-6 59) SIGRTMAX-5 60) SIGRTMAX-4 61) SIGRTMAX-3 62) SIGRTMAX-2 63) SIGRTMAX-1 64) SIGRTMAX
显示1号信号:
[root@wohaoshuai1 ~]# kill -l 1 HUP
c、信号的标识方法有三种
1)、信号的数字标识
kill -1 48599
2)、信号的完整名称
kill -SIGHUP 48599 #也可写作kill -s SIGHUP
3)、信号的简写名称
kill -HUP 48599
d、向进程发信号
kill [-s signal|-SIGNAL] pid...
[root@wohaoshuai1 ~]# ps -aux|grep httpd root 2355 0.0 0.2 230380 5232 ? Ss 04:49 0:00 /usr/sbin/httpd -DFOREGROUND apache 2356 0.0 0.1 232464 3180 ? S 04:49 0:00 /usr/sbin/httpd -DFOREGROUND apache 2357 0.0 0.1 232464 3180 ? S 04:49 0:00 /usr/sbin/httpd -DFOREGROUND apache 2358 0.0 0.1 232464 3180 ? S 04:49 0:00 /usr/sbin/httpd -DFOREGROUND apache 2359 0.0 0.1 232464 3180 ? S 04:49 0:00 /usr/sbin/httpd -DFOREGROUND apache 2360 0.0 0.1 232464 3180 ? S 04:49 0:00 /usr/sbin/httpd -DFOREGROUND root 2397 0.0 0.0 112712 964 pts/1 R+ 04:51 0:00 grep --color=auto httpd [root@wohaoshuai1 ~]# kill -s 15 2356 [root@wohaoshuai1 ~]# ps -aux|grep httpd root 2355 0.0 0.2 230380 5232 ? Ss 04:49 0:00 /usr/sbin/httpd -DFOREGROUND apache 2357 0.0 0.1 232464 3180 ? S 04:49 0:00 /usr/sbin/httpd -DFOREGROUND apache 2358 0.0 0.1 232464 3180 ? S 04:49 0:00 /usr/sbin/httpd -DFOREGROUND apache 2359 0.0 0.1 232464 3180 ? S 04:49 0:00 /usr/sbin/httpd -DFOREGROUND apache 2360 0.0 0.1 232464 3180 ? S 04:49 0:00 /usr/sbin/httpd -DFOREGROUND apache 2405 0.0 0.1 232464 3180 ? S 04:52 0:00 /usr/sbin/httpd -DFOREGROUND root 2407 0.0 0.0 112712 964 pts/1 R+ 04:52 0:00 grep --color=auto httpd
e、常用信号
1)、SIGHUP:无需关闭进程而让其重读配置文件,重读配置文件是需要由其主进程实现,即root运行的这个
[root@wohaoshuai1 ~]# ps -aux|grep httpd root 2355 0.0 0.2 230380 5232 ? Ss 04:49 0:00 /usr/sbin/httpd -DFOREGROUND apache 2357 0.0 0.1 232464 3180 ? S 04:49 0:00 /usr/sbin/httpd -DFOREGROUND apache 2358 0.0 0.1 232464 3180 ? S 04:49 0:00 /usr/sbin/httpd -DFOREGROUND apache 2359 0.0 0.1 232464 3180 ? S 04:49 0:00 /usr/sbin/httpd -DFOREGROUND apache 2360 0.0 0.1 232464 3180 ? S 04:49 0:00 /usr/sbin/httpd -DFOREGROUND apache 2405 0.0 0.1 232464 3180 ? S 04:52 0:00 /usr/sbin/httpd -DFOREGROUND root 2407 0.0 0.0 112712 964 pts/1 R+ 04:52 0:00 grep --color=auto httpd [root@wohaoshuai1 ~]# kill -1 2355
2)、SIGINT:终止正在运行的进程,相当于Ctrl + c。
比如可用先ping一个地址,然后再kill -2 ping 这个进程,这个ping就被中断了
9)、SIGKILL:杀死运行中的进程。直接强杀,一个进程运行过程中会打开很多文件,他打开一个文件正在写的过程中上去就是一刀。通过这种方式终止进程相应的文件有可能会被损坏。
15)、SIGTERM:终止运行中的进程;这个进程一般是一个后台进程。kill命令不带参数默认就是15号信号。一个进程运行过程中会打开很多文件,他打开一个文件正在写的过程中如果要杀死他就会提前进行说明,让进程死之前有准备送死的准备。
18)、SIGCONT:继续
19)、SIGSTOP:停止,即送到后台
比如我们打开一个文件/tmp/abc.txt,然后我们编辑了内容,此时我们想把它送到后台,我们可以使用Ctrl + Z键,此时我们可以在ps 中查看。而我们Ctrl + Z就相当于给其发送一个19号信号,如果要让其继续运行我们给其发送18号信号就可以了
[root@wohaoshuai1 ~]# vim aaa.txt [1]+ Stopped vim aaa.txt [root@wohaoshuai1 ~]# ps -aux|grep vim root 2922 0.3 0.2 151664 5340 pts/1 T 06:10 0:00 vim aaa.txt root 2924 0.0 0.0 112712 960 pts/1 R+ 06:10 0:00 grep --color=auto vim [root@wohaoshuai1 ~]# kill -18 2922 [root@wohaoshuai1 ~]# ps -aux|grep vim root 2922 0.0 0.2 151664 5340 pts/1 T 06:10 0:00 vim aaa.txt root 2931 0.0 0.0 112712 964 pts/1 R+ 06:11 0:00 grep --color=auto vim [1]+ Stopped vim aaa.txt
因为vim是在前台运行的因此我们唤不醒他,不过如果是copy命令等就可以,比如我们copy一个大文件,然后我们ctrl + Z让其后台运行,此时他就停止了,然后我们可以发送18号信号让其继续运行。
我们可以通过fg 命令继续进行我们vim的编辑
[root@wohaoshuai1 ~]# fg
7、killall命令
killall [-SIGNAL] program
[root@wohaoshuai1 ~]# ps -aux|grep httpd root 2355 0.0 0.2 230380 5268 ? Ss 04:49 0:00 /usr/sbin/httpd -DFOREGROUND apache 2430 0.0 0.1 232464 3172 ? S 04:55 0:00 /usr/sbin/httpd -DFOREGROUND apache 2431 0.0 0.1 232464 3172 ? S 04:55 0:00 /usr/sbin/httpd -DFOREGROUND apache 2432 0.0 0.1 232464 3172 ? S 04:55 0:00 /usr/sbin/httpd -DFOREGROUND apache 2433 0.0 0.1 232464 3172 ? S 04:55 0:00 /usr/sbin/httpd -DFOREGROUND apache 2434 0.0 0.1 232464 3172 ? S 04:55 0:00 /usr/sbin/httpd -DFOREGROUND root 2963 0.0 0.0 112712 964 pts/1 R+ 06:16 0:00 grep --color=auto httpd [root@wohaoshuai1 ~]# killall httpd [root@wohaoshuai1 ~]# ps -aux|grep httpd root 2972 0.0 0.0 112712 964 pts/1 R+ 06:16 0:00 grep --color=auto httpd
...