系统监控

1. 系统见识和进程控制工具

1.1 top 命令

top 命令时 Linux 下常用的性能分析工具,能够实时显示系统中各个进程的资源占用状况,类似于 win 中的任务管理器,默认 5 s 刷新一次结果。

代码被 cpu 调用运行的过程 —— 进程

杀死进程:释放 cpu、内存的过程

僵尸进程:即父进程被杀死,子进程没有被杀死,没有占用 CPU,但占用内存

父进程可以生成一堆子进程,杀死父进程,子进程会被回收

(父进程)bash - (子进程)bash

00. 第一行为任务队列信息

12:38:33 当前时间
up 50days 系统运行时间,格式为 时:分
1 user 当前登录用户数
load average:0.06,0.60,0.48 系统负载,三个数值分别为 1 分钟,5分钟,15分钟前到现在的平均值

01. 第二、三行为进程和 CPU 的信息

Tasks:29 total 进程总数
1 running 正在运行的进程数
28 sleeping 睡眠的进程数,不占 cpu
0 stopped 停止的进程数
0 zombie 僵尸进程数
cpu(s):0.3% us 用户空间占用 cpu 百分比
1.0% sy 内核空间占用 cpu 百分比
0.0% ni 用户进程空间内改变过优先级的进程占用 cpu 百分比
98.7% id 空闲 cpu 百分比
0.0% wa(wait) 等待输入输出的 cpu 时间百分比
0.0% hi 硬件中断占用 cpu 时间的百分比
0.0% si 软件中断占用 cpu 时间的百分比
0.0% st 被偷走的 cpu 占用百分比(如虚拟机使用物理机的内存,大于 0 表示运行虚拟机)

02. 第四、五行为内存信息:

Mem:   2050284k total,   552424k used,  1497860k free,    25576k buffers(缓冲区)	# 内存
Swap:  4095996k total,        0k used,  4095996k free,   186724k cached	(缓存)	# 交换分区

内存中有一块单独的空间 buffer,叫缓冲区,从硬盘中加载到内存,先加载到 buffer

cache 是高速缓存区,为了解决 cpu 与内存的速度差,存在于内存中,将 cpu 经常要用访问的数据放在 cache中,避免了频繁加载同一类型数据。

03. 进程信息:

列名 含义 列名 含义
PID 进程 id TIME 进程使用的 cpu 时间总计,单位秒
PPID 父进程 id TIME+ 进程使用的 cpu 时间总计,单位 1/1000秒
RUSER real user name %MEM 进程使用的物理内存百分比
UID 进程所有者的用户 id VIRT 进程使用的虚拟内存总量,单位 kb,VIRT=SWAP+RES
USER 进程所有者的用户名 SWAP 进程使用的虚拟内存中,被换出的大小,单位 kb
GROUP 进程所有者的组名 RES 进程使用的、未被换出的物理内存大小,单位 kb, RES=CODE+DATA
TTY 启动进程的终端名,不是从终端启动的进程为 ? CODE 可执行代码占用的物理内存大小,单位 kb
PR 优先级 DATA 可执行代码一位的步伐(数据段+栈)占用的物理内存大小,单位 kb
NI nice 值,负值表示高优先级,正直表示低优先级 SHR 共享内存大小,单位 kb
P 最后使用的 cpu,仅在多 cpu 环境下有意义 nFLT 页面错误次数
%CPU 上次更新到现在的 cpu 时间占用百分比 nDRT 最后一次写入到现在,被修改的页面数
s 进程状态:D = 不可中断的睡眠状态,R=运行,S=睡眠,T=跟踪/停止,Z=僵尸进程 COMMAND 命令名/命令行
WCHAN 若该进程睡眠,则显示睡眠中的系统函数名 Flags 任务表示,展开 sched.h

1.2 free 命令

查看内存的使用状态

free
echo 'scale=2;1906280/1024/1024' | bc -l	# 内存换算(scale=2 保留2位)
free -m		# 以 M 为单位
free -h		# 以 G 为单位
[root@hj ~]# free
				1			2		3			4			5			6
             total       used       free     shared    buffers     cached
1	Mem:       2050284     552720    1497564       3172      26712     186776
2	-/+ buffers/cache:     339232    1711052
3	Swap:      4095996          0    4095996

  • total:总计、used:使用、free:剩余、shared:共享
  • 内存使用的就是 buffer 和 cache
  • 其中 f(1)(1) = 2050284 kb ,为内存总大小,f(1)(1) + f(1)(2)
  • f(1)(2) = 552720 kb,为总共分配出去的 buffer 和 cache,f(1)(2) = f(1)(5) + f(1)(6) + f(2)(2) = 26712 + 186776 + 339232
  • f(1)(5)、f(1)(6) 26712 kb、 186776 kb,为还没有用的 buffer 和cache
  • f(2)(2) = 339232 kb,为被使用的 buffer 和 cache,那么内存使用率 = f(2)(2) / f(1)(1) = 339232 / 2050284(echo 'scale=2;339232/2050284 | bc -l'
  • f(2)(3) = 1711052 kb,为内存的真实剩余量,f(2)(3) = f(1)(5) + f(1)(6) + f(1)(3) = 26712 + 186776 + 1497564

2. 进程监控

进程是程序的一次动态进行

守护进程是在后台运行并提供系统服务的一些进程

父进程、子进程:当一个进程创建另一个进程时,第 1 个进程被称为新进程的父进程,而新进程被称为子进程

2.1 ps 命令

ps(process search)命令用于查看当前进程的状态

ps 
ps aux		# 详细查看,all、user_id、x 在哪个终端
ps aux | head -2	# 查看第一行,每行就是一个进程、TTY表示在哪个终端运行,?表示在后台不在任何终端

一般显示出的进程很多,要想精确找到想要的进程,可以与 grep 命令搭配使用

ps aux | grep 'init'	# 找到进程中包含 init 字符的进程
ps aux | grep 'init' | grep -v 'grep'	# 过滤掉包含 grep 的行,grep -v 反向匹配

ls /test | grep 'txt'		# 过滤包含 txt 的文件
grep 'root' /etc/passwd		# 过滤,包含 root 的行

2.2 pgrep 命令

除了可以利用管道符搭配 grep 命令过滤查看进程的 PID 外,还可以使用 pgrep 命令,它可以用于查询正在运行的进程的 PID 信息等。

语法:

pgrep [选项] '进程名'

选项:

  • -l:同时显示进程名和 PID
  • -o:当匹配多个进程时,显示进程号最小的那个
  • -n:当匹配多个进程时,显示进程号最大的那个

查看终端、火狐浏览器的 PID:

pgrep -l 'bash' 
pgrep -l 'firefox'

2.2 kill 命令

杀死进程,要想杀死一个进程,需要先找到进程的 PID(精确),或进程名(不精确),kill 实际上是发信号,要 cpu 挂起进程。

kill -9	PID	# 强制杀死

杀死终端:

ps asx | grep 'bash' | grep -v 'grep'	# 找到终端的 PID
kill -9 PID		# 强制杀死终端	(精确)

杀死 Firefox

ps -asx | grep 'firefox' | grep -v 'grep'
kill PID	# 杀死火狐
firefox &   # 运行在后台
jobs	# 查看后台运行的程序
fg %1	# 将后台调到前台运行,其中 1 为 工作号
bg %1	# 直接在后台运行
pstree  # 进程树
pkill -9 'bash'	# 按照进程名杀(全杀)

posted @ 2019-06-19 09:32  Hubery_Jun  阅读(234)  评论(0编辑  收藏  举报