linux 的设计哲学
- 一切皆文件:目录、字符、套接字等都看作文件
- 配置管理文本化:所有配置都保存在一个文件中,修改配置只需要修改对应的文件
linux 的构成:内核、外壳Shell、实用工具
linux 内核具备的功能:
- 进程调度
- 内存管理
- 虚拟文件系统
- 网络接口
- 进程间通信
目录结构
proc 目录:提供 用户与系统内核 交互的通道
重要文件
口令文件 /etc/passwd,存放 用户ID等信息,不存放密码信息
口令影子文件 /etc/shadow,存放用户ID 对应密文 等相关信息
用户组文件 /etc/group
1. 进程管理
查看硬件信息
cat /proc/cpuinfo
- processor 当前 CPU 号
- model name 型号
- cpu MHz 主频
查看CPU利用率
mpstat -P ALL l
top -d l CPU 使用率高的进程排行
ps aux 查看所有进程及状态
1.1 进程
资源分配的最小单位,而线程是 CPU 调度的最小单位
查看进程id getpid()
进程优先级
静态优先级:不会随着时间而改变,内核不会修改它,只能通过系统调用 nice 去修改
动态优先级:运行过程中动态改变程序优先级的值,保证调度的公平性,低优先级的进程在长时间得不到运行状况下会暂时调高其动态优先级。
守护进程
在终端中运行的程序都依赖于该终端,如果终端关闭,则该程序结束
daemon() 函数可实现该功能
1.2 调度策略
linux进程调度 基于分时技术的抢占式调度
一般情况下,用 SCHED_NORMAL 调度策略
- 实时进程优先级高于普通进程
- 普通进程保证公平占用CPU时间片
- 调度器以进程优先级为调度依据,总是选择就绪队列中优先级最高的进程作为候选进程
1.3 线程
CPU 调度的最小单位
线程有线程ID :pthread_self()
线程库:LinuxThreads 与 NPTL
注意线程栈的大小,默认是 4K
2. 内存管理
查看内存硬件信息
cat /proc/meminfo | more
2.1 free命令
查看内存使用情况
2.2 pmap命令
作用:比较细致的看进程的内存分布情况
pmap -x 1 #1表示进程号
2.3 Valgrind
内存泄露检测工具
3.4 OOM Killer 机制
Out-Of-Memory killer
- 在系统可用内存较少的情况下,内核为保证系统还能够继续运行下去,会选择杀掉一些进程释放掉一些内存
触发流程
- 进程 A 想要分配物理内存(通常是当进程真正去读写一块内核已经“分配”给它的内存) -> 触发缺页异常 -> 内核去分配物理内存 -> 物理内存不够了,触发 OOM
2.5 vmstat 命令
vmstat命令是最常见的Linux/Unix监控工具,可以展现给定时间间隔的服务器的状态值,包括服务器的CPU使用率,内存使用,虚拟内存交换情况, IO 读写情况
vmstat 2 1 #2表示每2s采集一次服务器状态,1表示只采集1次
2.6 确认 linux 系统内存不足
通过 free、vmstat 等命令
3. 文件系统
通过文件的形式,将数据以文件的形式进行展示
3.1 lsblk 查看硬盘信息
查看硬盘信息
3.2 smartctl 检测硬盘信息
Smartmontools是一种硬盘检测工具,通过控制和管理硬盘的SMART(Self Monitoring Analysis and Reporting Technology),自动检测分析及报告技术)技术来实现的,SMART技术可以对硬盘的磁头单元、盘片电机驱动系统、硬盘内部电路以及盘片表面介质材料等进行监测。
3.3 存储性能指标
- IOPS:每秒输入输出量,单位时间内系统能处理的 I/O 请求数量
- 时延:存储过程中花费的时间
- 吞吐:单位时间内通过某个网络或接口的数据量
3.4 iosata 统计硬盘IO情况
统计硬盘的 IO 情况
iostat -d -x 1
- rrqm/s : 每秒合并读操作的次数
- wrqm/s: 每秒合并写操作的次数
- r/s :每秒读操作的次数
- w/s : 每秒写操作的次数
- rMB/s :每秒读取的MB字节数
- wMB/s: 每秒写入的MB字节数
- avgrq-sz:每个IO的平均扇区数,即所有请求的平均大小,以扇区(512字节)为单位
- avgqu-sz:平均未完成的IO请求数量,即平均每一扇的请求队列长度
- await:平均每个IO所需要的时间,包括在队列等待的时间,也包括磁盘控制器处理本次请求的有效时间。
- r_wait:每个读操作平均所需要的时间,不仅包括硬盘设备读操作的时间,也包括在内核队列中的时间。
- w_wait: 每个写操平均所需要的时间,不仅包括硬盘设备写操作的时间,也包括在队列中等待的时间。
- svctm: 表面看是每个IO请求的服务时间,不包括等待时间,但是实际上,这个指标已经废弃。实际上,iostat工具没有任何一输出项表示的是硬盘设备平均每次IO的时间。
- %util: 工作时间或者繁忙时间占总时间的百分比
3.5 IO 慢定位手段
- 先看util,100%说明硬盘可能存在瓶颈,其值过低,说明压力不够,瓶颈可能不在IO
- await 如果超过10ms,则业务会感知到IO慢,时延过低则瓶颈可能不在IO
- svctm如果大于10ms,则可能硬盘寿命或raid卡故障
- avgqu如果大于60,则说明业务压力过大
3.6 进程 IO 统计
pidstat -d 1 # 1s统计1次
pidstat -d
3.7 使用一块新的硬盘
分区 - LV(Logical Volume)- 格式化文件系统 - 挂载文件系统 - 呈现可访问的文件
3.7.1 创建分区
分区命令
- fdisk:512字节对齐,最大支持 2T,使用 MBR 的方式
- parted:GPT的方式,最大支持 18EB
LVM(Logical Volume Manager)
LVM(逻辑卷管理)是 Linux 环境下对 磁盘分区 进行管理的一种机制。能够解决 文件不能跨分区存储的问题。
LVM 逻辑卷管理器技术由物理卷、卷组和逻辑卷组成
易于管理,方便扩展,管理多设备
PV:Physical volume
VG:Volume group
LV:Logical volume
pvcreate
创建 pv(物理卷),是管理磁盘的第一个环节
pvdisplay命令
用于显示物理卷的属性。显示的物理卷信息包括:物理卷名称、所属的卷组、物理卷大小、PE大小、总PE数、可用PE数、已分配的 PE数 和 UUID
vgcreate
创建 vg(卷组)
vgdisplay命令 查看创建的 vg
lvcreate
创建 LV(逻辑卷)
lvs命令查看创建的 LV
3.7.2 文件系统格式化
mksf
3.7.3 文件系统 mount挂载
mount命令挂载
挂载是文件存储位置 的意思吗
3.8 查看文件占用情况
df -h # 查看文件占用大小,挂载情况
du -d 1 -h # 查看日志分区,-d表示目录深度,1表示只统计1级目录,-h表示用 K,M,G做单位计算文件大小
3.9 硬盘中数据的分布
只要数据区的数据不被破坏,就能够将数据恢复
疑问
- 为什么 Start 是 1049kB
- 问题
知识补充
分区对齐:是指将分区的起始位置 对齐到一定的扇区