Linux基础五(系统管理)

Linux 系统管理

1. 进程管理

1.1 进程管理简介

进程的简介:

  1. 一个程序在运行的时候会占用系统的资源,即系统分配资源给某个程序使用,进程就是正在运行中的某个程序或者命令。进程又可以细分为线程,即一个进程可以调用系统资源去进行多个任务并发执行。
  2. 对于使用源码包进行安装的 Apache,开启 Apache 服务时其一般会产生 6 个进程,并且每有一个客户端访问就会添加一个进程,一般 Apache 的默认并发连接数量是 400,可以手动改成 2048,即最多可以同时产生 2048 个进程。

进程管理的作用:

  1. 判断服务器的健康状态(最主要)
  2. CUP 的使用率
  3. 物理内存的占用
  4. 空闲内存的查看
  5. 查看系统中的所有进程
  6. 看看系统中运行了哪些程序
  7. 这些程序都占用了什么资源
  8. 进程树
  9. 杀死进程
  10. 杀死进程不是关闭程序的正确方式
  11. 只有程序不能正常关闭或者没有正确关闭方式的情况下再判断该进程是否是系统中的合理进程?若是非法进程,则找到文件位置并清理掉后杀死进程;若是合理进程,则考虑是否是服务器性能不足,想办法提升性能

优先级 1. > 2. > 3.

1.2 进程的查看(ps and pstree)

1.2.1 ps

ps 命令不在与怎么用,看得懂才是最重要的

ps aux	查看系统中的所有进程,使用 BSD 操作系统格式
ps -le	查看系统中的所有进程,使用 Linux 标准命令格式

选项:
	-a:显示一个终端的所有进程,除了会话引线
	-u:显示内存的归属用户及内存的使用状况
	-x:显示没有控制终端的进程
	-l:长格式显示(显示更加详细的信息)
	-e:显示所有进程,和 -a 作用一样

以 pa aux 为例,主要看系统当前运行了哪些程序:

ps aux 命令显示内容

USER:绝大部分进程都是 root 产生的,产生 Apache 的用户是 daemon 
PID:是进程的 ID 号,其中 /sbin/init 进程的 PID 号永远是 1,因为它是系统启动时的第一个进程,也是所有进程的父进程。PID 为 1000 以内的进程一般都是系统的默认进程
%CUP 和 %MEM 分别是进程占用的 CPU 和内存的百分比,比例越高说明占用的资源越多
VSZ:表示该进程占用的虚拟内存的大小(KB)
RSS:表示该进程占用的实际内存的大小(KB)
TTY:表示该进程是在哪个终端下运行的。其中,TTY1-TTY7 代表本地控制台终端,TTY1-TTY6 是字符界面终端,TTY7 是图形界面终端;
pts/0-255 代表虚拟终端;?代表不是从终端启动的进程,一般是内核启动的
STAT:进程状态。常见的有 睡眠(S) 运行(R) 停止(T) 包含子进程(s) 位于后台(+)
START:当前进程启动的时间
TIME:当前进程耗费 CPU 的时间,越大说明越耗费 CPU 资源
COMMAND:进程的名称(主要看这个),如果想看某个进程到底是什么,可以自行百度
1.2.2 patree

显示进程树,可以看到如下:

pstree 显示进程树

选项:
	-p 显示当前所有进程,(重叠进程展开)
	-u 显示进程所属用户

[root@localhost ~]# pstree
init─┬─abrtd
 ├─acpid
 ├─atd
 ├─auditd───{auditd}
 ├─automount───4*[{automount}]		// 多个一样的进程会放在一起显示,可以用 -p 参数显示全部进程
 ├─certmonger
 ├─console-kit-dae───63*[{console-kit-da}]
 ├─crond
 ├─cupsd
 ├─dbus-daemon───{dbus-daemon}
 ├─dhclient
 ├─hald─┬─hald-runner─┬─hald-addon-acpi
 │      │             ├─hald-addon-inpu
 │      │             └─hald-addon-rfki
 │      └─{hald}
 ├─login───bash
 ├─master─┬─pickup
 │        └─qmgr
 ├─mcelog
 ├─5*[mingetty]
 ├─rpc.statd
 ├─rpcbind
 ├─rsyslogd───3*[{rsyslogd}]
 ├─sshd───sshd───bash───pstree		// 其中,我们敲的这条 pstree 命令是通过 Linux Shell 的 bash 经过远程连接工具调用远程服务启动的进程
 ├─udevd───2*[udevd]
 └─xinetd

1.3 进程的查看(top)

动态显示系统中的进程信息(默认每隔3s刷新一次),用于查看系统健康状态

命令:

top	动态显示系统进程信息,但只能显示一个页面的进程而不能显示所有进程信息

选项:
	-d 秒数:指定 top 更新的时间间隔(默认3秒)
	-b 使用批处理模式输出,即能显示全部进程。一般和 "-n" 同时使用
	-n 次数:指定 top 执行的次数,一般和 "-b" 同时使用
交互:
	? 或者 h:显示交互模式的帮助
	P:以 CPU 的使用率进行排序(默认)
	M:以内存的使用率进行排序
	N:以 PID 进行排序
	q:退出 top 进程

top 前五行显示的信息:

top前五行信息

  1. 第一行:22:50:32 是当前系统时间;up 1:28 系统运行了1小时28分钟;2 users 系统登录了两个用户;load average:0.00,0.00,0.00 是系统在1分钟之前,5分钟之前,15分钟之前的平均负载情况,一般有CPU有几核则不大于几就可以了
  2. 第二行:Tasks 是当前系统中运行的进程,其中:共有91个进程,1个正在执行,90个在睡眠,0个被停止,0个是僵尸
  3. 第三行:Cpu:CPU状态;其中:us 是被用户占用CPU的百分比,sy 是被系统占用CPU的百分比,ni 是被改过优先级的进程占用CPU的百分比,id 是系统空闲的百分比(不能低于20%),wa 是等待输入/输出的进程占用CPU的百分比,hi 和 si 是硬/软中断请求服务占用CPU的百分比,st 是虚拟时间百分比
  4. 第四行:Mem:内存占用率;总共有多少,多少被用了,还剩多少,缓冲区有多大
  5. 第五行:Swap:交换分区的占比,总共有多少,多少被用了,还剩多少,有多少被用作缓存
缓冲(buffer):加速数据写入硬盘,即将要写入硬盘的数据先放到内存中,当缓冲区满了之后再一起向硬盘写入
缓存(cache):加速数据从硬盘中读取,即将硬盘中的热数据预先拿到内存中来,当 CPU 要用的时候就不用再到硬盘中去取了

1.4 杀死进程

只有在程序无法正确关闭的情况下才考虑去杀死进程,kill 只是最后被迫的选择。

kill 命令:杀死单一进程(后面跟进程号)
killall 命令:按照进程名杀死一类(组)进程
pkill 命令:按照进程名杀死一类(组)进程

命令格式:
kill [信号] 进程号(PID)
killall [选项][信号] 进程名
pkill [选项][信号] 进程名

进程信号(常用):
可用 kill -l 查看
	-1:平滑重启进程,即不断开已连接的用户重启进程
	-9:强制杀死进程

选项:
	-i:交互式,即执行时会询问是否杀死该进程
	-I:忽略进程名大小写
	-t:按照终端号剔除用户(只有超级用户可以剔除其他用户)

命令示例:
kill -1 2535		// 平滑重启 PID 为 2535 的进程
kill -9 2535		// 强制杀死 PID 为 2535 的进程
killall -9 httpd	// 杀死 Apache 进程
pkill -9 -t pts/1	// 剔除第二个远程登录的用户(-9和-t不能写反)

1.5 修改进程优先级

CPU 的每一个核在同一个时钟周期内只能运算一个指令,进程的优先级决定了每个进程处理的先后顺序。

  1. Intel(R) Core(TM) i5-5200 CPU @2.20GHz 表示该 CPU 的频率为 2.20GHz,代表一秒能运算(振动) 2.20G 次;如果系统是 64 位,则每次运算能运算 8 个字节,一秒就能运算 8Byte*2.20GB 的数据;若 CPU 是 4 核 8 线程,则一秒就能运算 8Byte*2.20GHz*8线程=140GB 的数据。系统中一般是有很多个进程按照优先级排序,CPU 为每个进程分配一定的时间,一遍又一遍地执行不同的进程,在宏观上看就是很多进程并行的(即一边听歌一边打游戏)。
  2. 而内存如 DDR4 3200 则表示读写速度可以达到 3200 MB/s 即 3.2 GB/s 左右
  3. 硬盘(机械)的读写速度看转速,5400 转大致在 60-90MB,7200 转大致在 130-190MB,接口(SATA or SCSI or IDE)与读写速度基本上是匹配的;硬盘(SSD)的工作机制与机械硬盘不同,并无较为准确的范围,一般为 200M-500M/s,目前仍不断被刷新。
  4. 所以可以有一个概念:CPU 130G/s >> 内存 3G/s >> 硬盘 400M/s

用 ps -le 可以看到每个进程的优先级:

ps -le 可以显示进程优先级

其中,PRI 和 NI 都是优先级,分别代表 Priority 和 Nice。对系统真正起作用的是 PRI,用户不能修改 PRI,但是 PRI 的值受 NI 的影响,用户可以通过修改 NI 来影响 PRI 的值从而影响进程的优先级。NI 的取值范围是 range(-20,20),其中只有 root 才能将 NI 的值改为负数,也就是说普通用户改了 NI 的值也对进程起不到作用。

说白了如果不涉及内核开发,基本上不用修改进程的优先级。

nice 命令:修改进程的优先级

命令格式:
nice -n [优先级]	PID	// 只能修改不存在的进程,即要先关闭进程再修改然后重新打开才生效
renice [优先级] PID	// 可以修改正在运行中的进程

命令示例:
nice -n -5 2535		// 将 2535 进程的 NI 优先级改为 -5
renice -10 2535		// 将 2535 进程的 NI 优先级改为 -10

2. 工作管理

2.1 工作管理简介

工作管理(任务管理或者进程管理)指的是在单个登录终端中(也就是shell界面中)同时管理多个工作的行为。实际上就是把任务(进程)放到后台执行,Windows 把任务放到后台处理就是通过最小化窗口实现的,而 Linux 要敲命令罢了,本质是一样的。

注意事项:

  1. 当前的登录终端,只能管理当前终端下的工作,而不能管理其他登录终端的工作
  2. 放入后台执行的命令必须能持续一段时间,这样我们才可以捕捉和操作这个任务
  3. 放入后台的任务不能与前台用户进行交互或者与需要前台输入,否则该任务放入后台只能暂停而不能执行,如 vi 命令等

操作方法:在命令后加上 "&" 符号就行了

2.2 工作管理方法

2.2.1 把进程放入后台的方法

把进程放入后台的方法有两种:一种是在命令后面加"&"符号;另一种是按组合键Ctrl+Z,二者的区别是:

"&" 符号法把命令放入后台,并在后台执行
Ctrl+Z 法把命令放入后台,并在后台暂停
2.2.2 查看后台命令

当我们把多个进程放入到后台执行,则可以使用 jobs 命令来查看后台的进程

jobs 命令:查看后台的工作

命令格式:
jobs [-l]	// 其中,-l 是选项,加上 -l 会显示工作的 PID

注意:"+" 号代表最近一个放入后台的工作,也是工作恢复时默认恢复的工作;"-" 号代表倒数第二个放入后台的工作
2.2.3 工作恢复
fg %工作号	// 将工作恢复到前台运行,其中 % 用来区别进程号
bg %工作号	// 将工作恢复到后台运行,其中 % 用来区别进程号
如果不加工作号,默认会操作带有 "+" 号的进程

2.3 后台命令脱离终端执行

放入后台的进程会和将其放入后台的终端绑定,若终端被关闭,则后台进程也被终结。但实际上我们把任务放到后台进行,同时也会希望即使我的终端关闭,该任务也能继续进行下去,最常见的就是 MySQL 服务。MySQL 服务被放入后台后,即使终端被关闭,它也能继续进行下去。原因是 MySQL 服务被设置成了守护进程 deamon 。

所以如果我们想让一个服务放入后台运行后,不会因为终端的退出而终止,可以将该服务设置为守护进程。是不可以的!

原因有三个:1. 会非常复杂;2. 会让 Linux 中的守护进程变得太多而无法管理;3. 速度也会下降

那么使后台命令能脱离终端执行的方法有其他三种:

  1. (推荐)把需要后台执行的命令加入 /etc/rc.local 文件,适合随着系统启动自启的服务
  2. 使用系统的定时任务,让系统在指定时间执行某个后台命令(有时候不能生效)
  3. 使用 nohup 命令(标准方法,每次重启系统要手动输入一遍。也推荐)
	nohup 命令:
>	
	命令格式:
	nohup [命令] &

3. 系统资源查看

3.1 监听系统资源

vmstat 命令:查看 CPU | 内存 | 硬盘 | 进程 的信息汇总

命令格式:
vmstat [刷新延时 刷新次数]

命令示例:
vmstat 1 3

vmstat 1 3

显示信息:

procs:进程信息字段
	-r:等待运行的进程数,进程数越大,系统越繁忙
	-b:不可被唤醒的进程数量,数量越大,系统越繁忙
memory:内存信息字段(KB)
	-swpd:虚拟内存的使用情况
	-free:空闲的内存容量
	-buff:缓冲的内存容量
	-cache:缓存的内存容量
swap:交换分区的信息字段(KB)
	-si:从磁盘中交换到内存中的数据量
	-so:从内存中交换到磁盘中的数据量
	这两个数越大,证明数据需要在磁盘和内存之间交换频繁,系统性能越差
io:磁盘读写信息字段(块)
	-bi:从块设备读入的数据总和
	-bo:写入到块设备的数据总和
	这两个数越大,系统性能越差
system:系统信息字段
	-in:每秒钟被终端的进程数
	-cs:每秒钟进行事件切换的次数
	这两个数越大,系统性能越差
CPU:CPU字段
	-us:非内核进程消耗 CPU 运算时间的百分比
	-sy:内核进程消耗 CPU 运算时间的百分比
	-id:空闲 CPU 的百分比
	-wa:等待 I/O 所消耗的 CPU 的百分比
	-st:被虚拟机所盗用的 CPU 百分比

3.2 显示内核自检信息

dmesg 命令:

命令示例:
dmesg | grep CPU

3.3 查看内存使用状态

free 命令:

命令格式:
free [选项]

选项:
	-b:以 Byte 位单位显示
	-k:以 KB 为单位显示(默认)
	-m:以 MB 为单位显示
	-g:以 GB 为单位显示

命令示例:
free -m

[root@localhost ~]# free -m
			 total       used       free     shared    buffers     cached
Mem:           980        240        740          0         50         57
-/+ buffers/cache:        133        847
Swap:         1983          0       1983

3.4 查看 CPU 信息

cat /proc/cpuinfo // 其中,/proc目录用于保存内存相关的信息,CPU 的信息也存在这儿

3.5 uptime 命令

实际上就是 top 命令的第一行

3.6 uname 查看系统与内核相关信息

uname 命令:查看系统与内核相关信息

命令格式:
uname [选项]

选项:
	-a:查看系统所有信息
	-r:查看内核版本
	-s:查看内核名称

4. 系统定时任务

原文地址:https://www.cnblogs.com/myyd/p/7822975.html