程序和进程概要
程序:执行特定任务的一串代码,静态,存在硬盘中
进程:运行中的程序叫进程,动态,存在内存中
进程优先级
进程的优先级越小,则优先级越高
进程的优先级不能进行修改,只能修改程序的优先级
五大性能
性能 | 查看命令 |
---|---|
内存使用率 | free |
cpu使用率 | top,w,iostat,uptime,ps |
硬盘使用率 | df |
硬盘读写性能 | iostat |
网络带宽 | iftop |
进程的详细信息 | prtstat |
结束进程 | kill |
计划列表 | crontab -l |
查看进程 | ps aux 或者pstree |
一、Linux引导过程
bios — mbr ---- grup ----- 加载内核 ----启动程序
1.BIOS
bios就是开机自检程序
作用
1.开机检测硬件是否故障
2.指引硬件去找操作系统(根据bios中设置的启动顺序1.硬盘 2.外接设备 3.网卡)
2.MBR引导
mbr的作用:运行放在MBR扇区里的启动 GRUB引导程序
mbr(硬盘) 512字节
mbr中的开机引导程序 446字节
mbr中的分区表 64字节
3.GRUB
GRUB的作用:GRUB引导程序通过读取GRUB配置文件/boot/grub2/grub.cfg,来获取内核和镜像文件系统的设置和路径位置
4.加载内核(kernel)
把内核和镜像文件系统加载到内存中 可以使用
5.启动程序
加载硬件驱动程序,内核把init进程加载到内存中运行
centos7 启动第一个程序 systemd
centos6 启动第一个程序 init
二、服务
先启动systemd或init 再启动其他程序
1.systemd服务
负责在系统启动或运行时,激活系统资源,服务器进程和其它进程
简单来说systemd是管家式程序,管理系统中的其他程序
被systemd程序管理的程序
在/usr/lib/systemd/system/服务名.service的文件
yum rpm 会自动生成.service文件,天生可以被systemd管理
编译需要手写 服务名.service的文件
systemd进行管理的命令
systemctl start 服务名 开启服务
systemctl stop 服务名 关闭服务
systemctl status 服务名 查看状态
systemctl restart 服务 重启服务
systemctl reload 服务 重新加载,不影响客户使用
systemctl enable 服务 开机自启
systemctl disable 服务 关闭开机自启
systemctl enable --now 服务 开机自启,并且立即启动
systemctl disable --now 服务 关闭开机自启,并且立即关闭
systemctl damon reload
service unit file文件
service unit file文件通常由三部分组成:
1.[Unit]
定义与Unit类型无关的通用选项;用于提供unit的描述信息、unit行为及依赖关系等
2.[Service]
与特定类型相关的专用选项;此处为Service类型
3.[Install]
定义由“systemctl enable”以及"systemctl disable“命令在实现服务启用或禁用时用到
的一些选项
Unit段的常用选项
Description:描述信息
After:定义unit的启动次序,表示当前unit应该晚于哪些unit启动,其功能与Before相反
Requires:依赖到的其它units,强依赖,被依赖的units无法激活时,当前unit也无法激活
Wants:依赖到的其它units,弱依赖
Conflicts:定义units间的冲突关系
Service段的常用选项
Type:定义影响ExecStart及相关参数的功能的unit进程启动类型
EnvironmentFile:环境配置文件
ExecStart:指明启动unit要运行命令或脚本的绝对路径
ExecStartPre: ExecStart前运行
ExecStartPost: ExecStart后运行
ExecStop:指明停止unit要运行的命令或脚本
Restart:当设定Restart=1 时,则当次daemon服务意外终止后,会再次自动启动此服务
RestartSec: 设置在重启服务( Restart= )前暂停多长时间。 默认值是100毫秒(100ms)。 如果未指
定时间单位,那么将视为以秒为单位。 例如设为"20"等价于设为"20s"。
PrivateTmp:设定为yes时,会在生成/tmp/systemd-private-UUID-NAME.service-XXXXX/tmp/目录
Install段的常用选项
Alias:别名,可使用systemctl command Alias.service
RequiredBy:被哪些units所依赖,强依赖
WantedBy:被哪些units所依赖,弱依赖
Also:安装本服务的时候还要安装别的相关服务
二、进程
1.进程状态
1.运行态:running
2.就绪态:ready
3.睡眠态:分为两种,可中断和不可中断
4.停止态:暂时停于内存,但不会被调度,除非手动启动
5.僵尸态:结束进程,父进程结束前,子进程不关闭
(通过恢复父进程或者杀父进程可以让僵尸进程消失)
2.进程分类
1.守护进程
2.服务进程
3.查看进程相关命令
1.ps命令
ps常用选项
- a:显示当前终端下的所有进程信息,包括其他用户的进程。与“x”选项结合时将示系统中所有的进程信息。
- u:使用以用户为主的格式输出进程信息。
- x:显示当前用户在所有终端下的进程信息。
- o 属性… 选项显示定制的信息 pid、cmd、%cpu、%mem
- k|–sort 属性 对属性排序,属性前加 - 表示倒序 ps aux k -%cpu
ps aux 命令可以查看系统中所有的进程
例:
表头 | 含义 |
---|---|
USER | 该进程是由哪个用户产生的。 |
PID | 进程的 ID。 |
%CPU | 该进程占用 CPU 资源的百分比,占用的百分比越高,进程越耗费资源。 |
%MEM | 该进程占用物理内存的百分比,占用的百分比越高,进程越耗费资源。 |
VSZ | 该进程占用虚拟内存的大小,单位为 KB。 |
RSS | 该进程占用实际物理内存的大小,单位为 KB。 |
TIME | 该进程占用 CPU 的运算时间,注意不是系统时间。 |
COMMAND | 产生此进程的命令名。 |
进程状态(STAT)
-R:该进程正在运行。
-S:该进程处于睡眠状态,可被唤醒。
-T:停止状态,可能是在后台暂停或进程处于除错状态
-Z:僵尸进程:结束进程,父进程结束前,子进程不关闭
(通过恢复父进程或者杀父进程可以让僵尸进程消失)
2.top命令
top 命令可以动态地持续监听进程地运行状态
top选项:
-d # 指定刷新时间间隔,默认为3秒
-b 全部显示所有进程
-n # 刷新多少次后退出
top 命令的输出内容是动态的,默认每隔 3 秒刷新一次。命令的输出主要分为两部分:
- 第一部分是前五行,显示的是整个系统的资源使用状况,我们就是通过这些输出来判断服务器的资源使用状态的;
- 第二部分从第六行开始,显示的是系统中进程的信息;
第一部分
第一行为任务队列信息,具体内容如表 所示。
内 容 | 说 明 |
---|---|
18:31:36 | 系统当前时间 |
up 1:49 | 系统的运行时间.本机己经运行 1小时49分钟 |
3 users | 当前登录了三个用户 |
load average: 0.00,0.01,0.05 | 系统在之前 1 分钟、5 分钟、15 分钟的平均负载。如果 CPU 是单核的,则这个数值超过 1 就是高负载:如果 CPU 是四核的,则这个数值超过 4 就是高负载 (这个平均负载完全是依据个人经验来进行判断的,一般认为不应该超过服务器 CPU 的核数) |
第二行为进程信息,具体内容如表
内 容 | 说 明 |
---|---|
Tasks: 188 total | 系统中的进程总数 |
1 running | 正在运行的进程数 |
187 sleeping | 睡眠的进程数 |
0 stopped | 正在停止的进程数 |
0 zombie | 僵尸进程数。如果不是 0,则需要手工检查僵尸进程 |
第三行为 CPU 信息,具体内容如表
内 容 | 说 明 |
---|---|
Cpu(s): 0.1 %us | 用户模式占用的 CPU 百分比 个人用户开启的进程占用的 cpu 率 |
0.0%sy | 系统模式占用的 CPU 百分比 |
0.0%ni | 改变过优先级的用户进程占用的 CPU 百分比 |
100%id | 空闲 CPU 占用的 CPU 百分比 |
0.0%wa | 等待输入/输出的进程占用的 CPU 百分比 1 |
0.0%hi | 硬中断请求服务占用的 CPU 百分比 |
0.0%si | 软中断请求服务占用的 CPU 百分比 |
0.0%st | st(steal time)意为虚拟程序占用 cpu 时间百分比,就是当有虚拟机时,虚拟 CPU 等待实际 CPU 的时间百分比 |
第四行为物理内存信息,具体内容如表buff cache
内 容 | 说 明 |
---|---|
Mem: 20318888 total | 物理内存的总量,单位为KB |
used | 己经使用的物理内存数量 |
free | 空闲的物理内存数量。我们使用的是虚拟机,共分配了 628MB内存,所以只有53MB的空闲内存 |
buffers | 作为缓冲的内存数量 |
第五行为交换分区(swap)信息,如表
内 容 | 说 明 |
---|---|
Swap: total | 交换分区(虚拟内存)的总大小 |
Ok used | 已经使用的交换分区的大小 |
free | 空闲交换分区的大小 |
avail mem | 作为缓存的交换分区的大小 |
第二部分
top 命令的第二部分输出,主要是系统进程信息,各个字段的含义如下:
- PID:进程的 ID。
- USER:该进程所属的用户。
- PR:优先级,数值越小优先级越高。
- NI:优先级,数值越小、优先级越高。
- VIRT:该进程使用的虚拟内存的大小,单位为 KB。
- RES:该进程使用的物理内存的大小,单位为 KB。
- SHR:共享内存大小,单位为 KB。
- S:进程状态。
- %CPU:该进程占用 CPU 的百分比。
- %MEM:该进程占用内存的百分比。
- TIME+:该进程共占用的 CPU 时间。
- COMMAND:进程的命令名。
3.pgrep命令
查看指定的进程
- -U 指定用户
- -l: 显示进程名
例:统计张三打开了多少个进程
pgrep -u zhangsan | wc -l
4.pidof 命令
作用是查找已知程序名的pid号
5.pstree命令
以树形结构列出进程信息
常用选项:
-p 显示PID
6.lsof命令
lsof 命令,“list opened files”的缩写,直译过来,就是列举系统中已经被打开的文件。通过 lsof 命令,我们就可以根据文件找到对应的进程信息,也可以根据进程信息找到进程打开的文件。
lsof [选项]
选项 | 功能 |
---|---|
-c 字符串 | 只列出以字符串开头的进程打开的文件。 |
+d 目录名 | 列出某个目录中所有被进程调用的文件。 |
-u 用户名 | 只列出某个用户的进程打开的文件。 |
-p pid | 列出某个 PID 进程打开的文件。 |
过滤端口
lsof -i : 端口
如果有 就确定端口被打开
7.vmstat命令
是 Virtual Meomory Statistics(虚拟内存统计)的缩写,可用来监控 CPU 使用、进程状态、内存使用、虚拟内存使用、硬盘输入/输出状态等信息。
格式:vmstat [选项]
vmstat -d 可以列出硬盘有关读写总量的统计表。
8.iostat
iostat 可以提供更丰富的IO性能状态数据
9.prtstat
查看进程的详细信息
prtstat pid号
4.控制进程相关命令
命令 | 功能 |
---|---|
命令 & | 将前台命令放入后台运行 |
ctrl + z | 将运行中的命令放入后台挂起 |
jobs | 查看后台任务列表 |
bg 序号 | 继续运行后台的命令 |
fg 序号 | 将后台程序调回前台 |
kill命令 | 发信号给程序 |
格式: kill 信号 pid号
将前台程序放入后台可以并行执行,提高程序的运行效率
3.计划任务
一次性计划任务
周期性计划任务
crontab
crontab -e [-u 用户名] #编辑计划任务
crontab -l [-u 用户名] #查看计划任务
crontab -r [-u 用户名] #删除计划任务
(额外内容)进程题目
1.如何解决中毒
2.确定单线程,多线程
3.过滤僵尸进程
4.统计进程总数
1.top命令
2.ps aux | wc -l
统计某用户的进程总数
pgrep -u 用户名 | wc -l
或者
ps aux | grep 用户名 | wc -l
5.根据pid号能找到进程的具体位置
6.删除大文件不释放空间
7.误删恢复
8.服务器运行了3天非常卡
清除缓存:
echo 3 > /proc/sys/vm/drop_caches
9.确定远端服务器端口是否被打开
例:在192.168.91.1 确定192.168.91.100上的5555 端口是否打开
telnet 192.168.91.100 5555