一、数据备份
1.Linux服务器中需要备份的数据
(1)Linux系统重要数据:/root/目录,/home/目录,/etc/目录
(2)安装服务的数据:Apache(配置文件,网页主目录,日志文件)
2.备份策略
(1)完全备份:把所有需要备份的数据全部备份(整块硬盘、整个分区或某个具体目录)
优点:数据恢复方便
缺点:备份数据量大,备份时间长,占据空间较多
(2)增量备份:先进行一次完全备份,后比较数据差异,只备份差异数据
优点:备份数据较少,耗时较少,占用空间较少
缺点:数据恢复比较繁琐(先恢复完全备份,后按照第一、第二.....增量备份数据恢复)
(3)差异备份:先进行一次完全备份,后每次备份都备份和原始完全备份数据不同的数据
优点:不需要备份所有数据,数据恢复也比较方便
缺点:随时间增加,差异备份也可能变得数据庞大,备份缓慢,占用较大空间
3.备份工具
命令格式:dd if="输入文件" of="输出文件" bs="数据块" count="数量"
- if:定义输入数据的文件,也可以是输入设备
- of:定义输出数据的文件,也可以是输出设备
- bs:指定数据块大小,默认512字节
- count:指定bs的数量
注:如果想要备份分区,则分区大小不能比原分区小,只能和原分区大小一致或比原分区大;如果需要恢复,只需要把输入项和输出项反过来即可
网络复制工具:rsync和scp
- rsync:可以实现服务器之间的备份数据,也可以增量备份,实现类似镜像的效果
- scp:在Linux之间传文件,基于ssh的cp
scp /root/本地文件 root@192.168.25.16:/root/ #上传
scp root@192.168.25.6:/root/本地文件 /root/ #下载
4.xfs文件系统的备份与恢复
注:xfs文件系统支持备份功能,使用xfsdump命令和xfsrestore可以完成备份与恢复
备份——可进行完全备份、增量备份、差异备份
注意事项
- 不支持对未挂载文件系统进行备份
- 必须使用root身份才有权限执行
- 只能备份xfs文件系统,默认只支持备份文件系统
- 备份数据只能被xfsrestore解析
- 通过UUID来辨别备份文件,不能备份两个具有相同UUID的文件系统
xfsdump选项
- -L:记录每次备份的说明标签
- -M:指定存储媒介的说明标签
- -l:指定备份级别(0-9),0是完整备份,1-9是增量备份
- -f:指定转储的目的地
- -I:从/var/lib/xfsdump/inventory列出目前备份的信息状态
(1)备份整个分区:xfsdump -f 备份文件路径 被备份路径或设备文件
注:被备份路径可以写成/dev/sda1或/disk1,不能写成/disk1/
(2)指定备份是免交互操作
语法:xfsdump -f /opt/dump_2 /disk1 -L dump_2 -M sda1
(3)指定只备份分区中的某个目录(-s 文件路径[相对路径])
语法:xfsdump -f /opt/dump_test -s test /disk1 -L dump_test -M sda1
(4)文件系统恢复
语法:xfsrestore -f 指定恢复文件的位置 指定存放恢复后的文件路径
(5)增量备份
全备:xfsdump -f /opt/dump_full /disk1 -L dump_full -M sda1
第n次:xfsdump -l n -f /opt/dump_backn /disk1 -L dump_backn -M sda1
二、进程管理
1.进程概述和PS管理进程
进程的组成部分:已分配内存的地址空间,进程ID(PID),程序代码,进程状态
进程管理包括:进程调度、中断处理、信号、进程优先级、进程切换、进程状态、进程内存等
进程的生命周期:
- 父进程复制自己的地址空间(fork)创建一个新的子进程结构
- 每个进程分配一个唯一的进程ID(PID),满足跟踪安全性之需
- PID和父进程(PPID)是子进程环境的元素,任何进程都可以创建子进程
- 所有进程都是第一个系统进程的后代
- Centos5或6 PID为1的是init,Centos7是systemd
僵尸进程:不执行代码,占用内存地址空间
- 当一个进程收到终止信号时,它结束之前需要一段时间来结束所有任务
- 在进程执行所有代码之后,它将相关终止报告发给父进程
- 父进程正常情况下会移除所有子进程的数据结构
- 如果父进程没能接收到子进程的退出信号,那么子进程就变为了僵尸进程
- 所以通常在某个很短的时间内,子进程是一个僵尸进程
- 使用kill命令不能杀死僵尸进程,因为它已经被认定为死亡
- 可尝试杀死僵尸进程的父进程,僵尸进程也会随之消失
- 如果一个进程为僵尸状态,父进程是init或systemd,那么需要重启系统来解决问题
2.进程、线程、协程
- 进程:是一个执行环境, 包含指令、用户数据、部分系统数据,以及运行期内获取的其他资源
- 线程:较小的轻量级实体,进程中产生的一个执行单位(线程直接可以共享资源,包括内存、地址空间、打开文件等)
- 协程:最小实体,可通过并发方式运行;协程的创建、切换和销毁开销非常低,因为它们在用户态完成,不涉及操作系统的内核切换(与线程相比,需要的系统资源少,能在更小的内存空间中运行)
3.上下文切换
- 在处理器执行期间,运行进程的信息被存储在处理器的寄存器和高速缓存中。
- 执行的进程被加载到寄存器的数据被称为上下文。
- 在实际处理器运行过程中,先存储运行进程的上下文。
- 然后将下一个要运行的进程的上下文恢复到寄存器,这个过程称之为上下文切换。
- 一般不能有太多上下文切换。
- 因为处理器每次要刷新寄存器和高速缓存,以便释放空间给新进程,可能导致性能下降。
4.中断处理
- 中断是优先级最高的任务之一。
- 通常由 I/O 产生,比如网络接口、键盘、磁盘控制器等。
- 当一个中断信号到达内核的时候,内核必须从当前执行的进程切换到一个新的进程,以便处理这个中断。
- 这意味着中断会导致上下文切换。也就是说大量中断会导致性能下降。
注:Linux中有硬中断和软中断。硬中断由硬件产生,需要快速响应(如磁盘I/O中断,键盘中断,鼠标中断等);软中断被用来处理可以推迟的任务(TCP/IP,SCSI协议操作等)
5.进程的属性
- 进程 ID(PID):是唯一的数值
- 父进程的 ID(PPID)
- 启动进程的用户 ID(UID)和所归属的组(GID)
- 进程状态:状态分为运行 R、休眠 S、僵尸 Z
- 进程执行的优先级
- 进程所连接的终端名
- 进程资源占用:比如占用资源大小(内存、CPU 占用量)
6.使用PS查看进程工具
常见选项组合:ps aux | more
- a:显示跟当前终端关联的所有进程
- u:基于用户的格式显示
- x:显示所有进程,不以终端来区分
- USER: 启动这些进程的用户
- PID: 进程的 ID
- %CPU 进程占用的 CPU 百分比
- %MEM 占用内存的百分比
- VSZ:进程占用的虚拟内存大小(单位:KB)
- RSS:进程占用的物理内存大小(单位:KB)
- STAT:该程序目前的状态,Linux 进程有 5 种基本状态:
R :该程序目前正在运行,或者是可被运行(在运行队列)
S :该程序目前正在睡眠当中 ,但可被某些信号唤醒
T :该程序目前是停止状态
Z :该进程应该已经终止,但是其父程序却没有正常的终止它
D 不可中断的睡眠状态,通常存在于 I/O 情况下
I:空闲的内核进程(Rocky9.X) - START:该进程被触发启动的时间
- TIME :该进程实际使用 CPU 运行的时间
- COMMAND:该程序的实际指令
基本状态后字符:
- <:进程运行在高优先级上
- N:进程运行在低优先级上
- l:进程有页面锁定在内存中
- s:进程是控制进程
- I:进程是多线程的
- +:当前进程运行在前台
- t:进程被调试器跟踪时会出现(在编程调试期间会出现)
实验——
步骤一:在一个终端下创建aaa.txt文件,并vim打开,不修改,另开一个终端查看当前状态
步骤二:在aaa.txt终端按下ctrl +z 停止进程,在另一个终端再次查看当前状态
步骤三:tar -zcvf usr.gz /usr/,然后在另一个终端不断查看状态,由 S+,R+变为 D+
常见选项组合:ps -ef
- e:显示所有进程
- f:显示完整格式输出
- UID: 启动这些进程的用户
- PID: 进程的 ID
- PPID: 父进程的进程号
- C: 进程生命周期中的 CPU 利用率
- STIME: 进程启动时的系统时间
- TTY: 表明进程在哪个终端设备上运行。如果显示?表示与终端无关,这种进程一般是内核态进程。另外,tty1-tty6 是本机上面的登入者程序,若为 pts/0 等,则表示运行在虚拟终端上的进程。
- TIME: 运行进程一共累计占用的 CPU 时间
- CMD: 启动的程序名称
实验——
步骤一:终端一:dd if=/dev/zero of=/a.txt count=10 bs=100M;终端二: ps -axu | grep dd
7.补充:free命令
第一行:total 是总内存量,used 是已经使用的内存量,free 是空闲的内存,shared 是多个进程共
享的内存总数,buffers 是缓冲内存数,cached 是缓存内存数。默认单位是 KB。
第二行开始:
- total 系统中有 972MB 的物理内存,
- used 是已经使用的内存数量。
- free 是空闲的内存数量。
- shared 是多个进程共享的内存数量。
- buff/cache 用来作为缓冲和缓存的空间,内核会在内存将要耗尽时释放这部分内存给其他进程使用。
- availble:可使用空间,评估有多少内存可用于启动新应用程序。
注:available 字段考虑了页缓存,而不是所有可回收的内存。正因为这个原因所以通常
free+buff/cache 的数值要比 available 的数值大。
第三行为 swap 虚拟内存。
- 在上面信息中我们可以看到,其实系统上并没有运行什么服务。但是有 1.4G 的 cache,这是因为在实验过程中进行过多次读写执行等操作。
- 这些文件会被系统暂时缓存下来,以便下次运行的时候能够快速的读取。
- 这种使用都是正常的情况,说明物理内存正在被合理的使用
- 但是如果我们发现 swap 区域一直被大量使用,这就说明物理内存不足。
- 可能需要考虑系统上 swap 使用比例或者添加物理内存。
三、uptime查看系统负载--top动态管理进程
1.uptime查看cpu负载工具
18:54:11 | 当前时间 |
48 | 系统运行时间,说明系统已经运行了48分钟 |
3 | 当前登录用户数 |
load average:0.08,0.17,0.25 | 系统负载均衡,即任务队列的平均长度。三个数值为1分钟、5分钟、15分钟前到现在的平均值 |
任务队列的平均长度(cpu队列数为3时):
注:如果服务器cpu为1核,则load average>=3为负载过高;如果服务器cpu为4核,则>=12为负载过高(通常单核一分钟平均负载不要超过3)
2.top命令动态管理
Cpu(s) | 系统用户进程使用cpu百分比 |
sy | 内核中的进程占用cpu百分比 |
ni | 用户进程空间内改变过优先级的进程占用cpu百分比 |
id | 空闲cpu百分比 |
wa | cpu等待I/O完成的时间总量 |
hi(硬中断消耗时间) | 硬中断占的cpu百分比 |
si(软中断消耗时间) | 软中断占的cpu百分比 |
st(steal偷) | 虚拟机偷取物理的时间 |
PID | 进程id |
USER | 进程所有者的用户名 |
PR | 优先级,由内核动态调整,用户不能修改。rt表示任务正在实时调度优先级下运行 |
NI | 进程优先级,nice值。负值表示高优先级 |
VIRT | 虚拟内存,是进程正在使用的所有内存 |
RES | 是进程所使用的物理内存,是实际使用内存 |
SHR | 共享内存大小,单位kb |
S | 进程状态 |
%CPU | 上次更新到现在的cpu占用百分比 |
%MEM | 进程使用的物理内存百分比 |
TIME+ | 进程使用的cpu时间总计,单位1/100s |
COMMAND | 命令名;命令行 |
快捷键
- 默认三秒刷新一次,按s修改刷新时间
- 按空格立刻刷新
- q退出
- P按cpu排序
- M按内存排序
- T:按时间排序
- 数字键1:显示每个内核的cpu使用率
- -p:进程pid,查看某个进程状态
- -u/U:指定显示用户
- h:帮助
注:lscpu命令可以查看cpu系统中cpu详细信息,并且在sockets字段表示物理cpu数量
实验——
步骤一:使用top动态只查看某个或某些进程的信息
步骤二:找出系统中使用cpu最多的进程
注:在一个linux进程中,最多可以使用的cpu占用百分比跟内核数有关,可以超过100%
3.fuser命令根据文件或端口号找相应进程
- -k:默认结束进程,也可以执行发送信号(可用信号与kill命令不同)
- -i:在结束进程前会交互式确认
- -u:在进程后显示进程所属用户名
- -c:查看有哪些进程访问挂载点下文件
实验——
步骤一:根据/media目录查看有哪些进程正在访问目录,并列出进程用户名称
步骤二:查看 boot 分区下有哪些进程在访问文件
步骤三:查看 tcp 协议 22 号端口有哪些进程
注:对文件或目录执行会输出相应的进程号(c表示执行进程的用户在当前查询目录中;f表示文件,但通常文件默认不显示;r表示root目录;e表示正在运行的可执行文件)
4.lsof命令:用于查看进程打开的文件、端口(TCP,UDP)
- -i:列出符合条件的进程。IPv4或IPv6(4,6,协议,:端口,@ip)
- -p:列出指定进程号所打开的文件
一般用于进程在读哪些文件,或哪个进程在使用端口
四、前后台进程切换-nice进程优先级
1.Linux后台进程与前台进程的区别
- 前台进程:是在终端中运行的命令,命令执行过程中持续占用前台。
- 依赖终端:那么该终端就为进程的控制终端,一旦这个终端关闭,这个进程也随之消失。
- 脱离终端:一旦这个终端关闭,这个进程不会消失。
- 后台进程: 进程放入后台运行,通常不会影响当前终端后续命令执行。如:tar -cf 命令等。
- 后台运行并脱离终端:其中有一类进程也叫守护进程(Daemon),是运行在后台的一种特殊进程,不受终端控制,它不需要终端的交互。
- Linux 的大多数服务器就是用守护进程实现的。比如,Web 服务器 httpd 等。
2.进程前台与后台运行(跟系统任务相关的几个进程)
& | 跟在命令最后,可以把命令放在后台执行 |
ctrl+z | 将前台命令放在后台,并且暂停 |
jobs | 查看当前后台运行进程(作业控制命令) |
fg | 将后台命令调至前台继续运行(fg %命令序号) |
bg | 将后台暂停命令变为继续执行(bg %命令序号) |
nohup | 脱离终端 |
注:虽然bg 1使得后台暂停命令继续运行,但vi命令无法在后台执行,因此很快就停止运行
补充
- 进程调度:操作系统决定哪个就绪进程获得cpu的执行权的过程
- 中断处理:cpu响应硬件或软件中断,暂停当前任务,转而去执行中断服务程序,完成后恢复原任务
- 信号:内核或进程向目标进程发送的异步通知
- 进程优先级:决定进程被调度执行的优先顺序
- 进程切换:CPU从一个进程切换到另一个进程时,保存当前进程的上下文,并加载新进程的上下文
- 进程状态:运行、就绪、阻塞
- 进程内存:进程运行时分配的地址空间