进程和计划任务管理
1. 程序
-
程序是一组计算机能识别和执行的指令,运行于电子计算机上,满足人们某种需求的信息化工具。
-
用于描述进程要完成的功能,是控制进程执行的指令集。
程序和进程的关系
- 程序
- 保存在硬盘、光盘等介质中的可执行代码和数据
- 静态保存的代码
- 进程
- 在CPU及内存中运行的程序代码
- 动态执行的代码
- 父、子进程
- 每个程序可以创建一个或多个进程
2. 进程
2.1 进程是什么?
运行中程序的副本,被载入内存的指令集合,资源分配的单位
- 进程ID(Process ID,PID)号码被用来标记各个进程
- 通常从执行进程的用户来继承
- 存在生命周期
- 由父进程创建
进程创建:
- init:第一个进程,centos 7的进程为systemd
- 进程:由父进程创建,有数据写入子进程需要新的内存空间
2.2 进程特征
-
动态性:进程是程序的一次执行过程,是临时的,有生命期的,是动态产生,动态消亡的
-
并发性:任何进程都可以同其他进程一起并发执行
-
独立性:进程是系统进行资源分配和调度的一个独立单位
-
结构性:进程由程序、数据和进程控制块三部分组成
问题 如何查看一个程序是多线程还是单线程?
pstree
grep -i threads /proc/进程的PID/status
prtstat 进程PID号
2.3 进程状态
- 创建状态:从硬盘拷贝到内存中的状态
- 就绪状态:进程准备好,排队状态,等待分配到cpu处理
- 执行状态:进程被调度后,进入执行状态
- 阻塞状态:进程由于一些事件(如I/O请求)无法运行,进程受到阻塞
- 终止状态:任务执行结束
进程更多状态:
运行态:running
就绪态:ready
睡眠态:可中断(interruptable)、不可中断(uninterruptable)
停止态:stopped,暂停于内存,只能手动启动
僵死态:zombie,僵尸态,结束进程,父进程不回收子进程
2.4 进程分类
进程类型
- 守护进程:只要系统在就在,与终端无关
- 前台进程:跟终端相关,通过终端启动
3. 查看进程信息
3.1 查看进程信息ps命令
-
ps命令(process state),可以查看进程当前状态的快照
- 查看静态的进程统计信息
[root@localhost ~]#ps aux #可以查看系统中所有的进程,当前状态,不会刷新
命令支持三种:长格式、短格式、unix风格
常用选项
a:显示当前终端下的所有进程信息,包括其他用户的进程。与“x”选项结合时将示系统中所有的进程信息。
u:使用以用户为主的格式输出进程信息。
x:显示当前用户在所有终端下的进程信息。
-e:显示系统内的所有进程信息。
-l:使用长(Long)格式显示进程信息。
-f:使用完整的(Full)格式显示进程信
k|--sort 属性 对属性排序,属性前加 - 表示倒序 ps aux k -%cpu
o 属性… 选项显示定制的信息 pid、cmd、%cpu、%mem
3.2 查看进程信息top命令
- top命令
- 查看动态的进程排名信息
[root@localhost ~]#top
top 即任务管理器 实时的
大部分系统信息都可以使用top来看
不建议在top中直接按k,想以什么排序就直接在top中按首字母
按小写l隐藏第一行
按数字1显示cpu
m命令进度条显示
选项
-d:秒数,指定top命令几秒更新一次,默认3秒
-b:使用批处理模式输出,一般和"-n"选项合用,用于把 top 命令重定向到文件中
-n:次数,用于指定 top 命令执行的次数。一般和"-"选项合用;
-p:进程PID:仅查看指定 ID 的进程
-s:使top命令在安全模式中运行,避免在交互模式中出现错误
-u:用户名:只监听某个用户的进程
问题
top的cpu在第几行?
第三行为 CPU 信息,具体内容如表
CPU 信息,具体内容如表
内 容 | 说 明 |
---|---|
Cpu(s): 0.1 %us | 用户模式占用的 CPU 百分比 个人用户开启的进程占用的 cpu 率 |
0.1%sy | 系统模式占用的 CPU 百分比 |
0.0%ni | 改变过优先级的用户进程占用的 CPU 百分比 |
99.7%id | 空闲 CPU 占用的 CPU 百分比 |
0.1%wa | 等待输入/输出的进程占用的 CPU 百分比 1 |
0.0%hi | 硬中断请求服务占用的 CPU 百分比 |
0.1%si | 软中断请求服务占用的 CPU 百分比 |
0.0%st | st(steal time)意为虚拟程序占用 cpu 时间百分比,就是当有虚拟机时,虚拟 CPU 等待实际 CPU 的时间百分比 |
3.3 查看进程信息pgrep命令
- pgrep命令
- 根据特定条件查询进程PID信息,过滤进程名,过滤出想要的信息
查看指定的进程
-U:指定用户
-l: 显示进程名
-a:显示完整格式的进程名
-P pid:显示指定进程的子进程
[root@localhost ~]#pgrep -l "log" #-l显示进程名
410 xfs-log/dm-0
600 xfs-log/sda1
700 systemd-logind
701 rsyslogd
740 abrt-watch-log
741 abrt-watch-log
[root@localhost ~]#pgrep -l -U 特定用户 -t 指定终端 #-U指定特定用户 -t指定终端
3.4 命令进程树pstree命令
- pstree命令
- 以树形结构列出进程信息
常用选项
-a:显示启动每个进程对应的完整指令,包括启动进程的路径、参数等
-p:显示PID
-T:不显示线程thread,默认显示线程
-u:显示用户切换
-H pid:高亮显示指定进程及其前辈进程
[root@localhost ~]#pstree -aup #-a:显示完整信息 -u:列出对应用户名 -p:列出对应ID号
3.5 查看进程信息prtstat命令
prtstat 19204
4. 监控系统资源 虚拟资源vmstat
查看虚拟信息 磁盘io
iostat是真正看磁盘io的
vmstat 1:1秒刷新1次
5. free命令
- free命令可以显示当前系统未使用的和已使用的内存数目,还可以显示被内核使用的内存缓冲区。
基本格式:
free [选项]
free -s 1:1秒刷新1次
常用选项:
-b:以bytes为单位来显示内存的信息
-k:以kb为单位来显示内存的信息
-m:以m为单位来显示内存的信息
-g:以G为单位来显示内存的信息
-h:以适于人类可读方式显示内存信息
-l:显示高低内存的利用率
-t:显示linux的全部内存
-s N:表示每隔N秒打印一次内存信息,使用ctrl+c结束
-c N:表示重复打印内存信息N次
-V:显示版本信息
- total:内存总数
- used:已使用内存数
- free:空闲内存,可用内存多少
- shared:多个进程共享的内存
- buff/cache:块设备数据缓冲/文件内容的缓冲
- available:真正剩余的可被程序应用的内存数
6.lsof
lsof(list opened files),列举系统中已经被打开的文件
lsof[选项]
操作系统五大性能:
1. 内存 用free top查看
2. 磁盘
剩余量 df、lsblk、fdisk -l
磁盘读写性能 dd、iostat、vmstat、iotop
3. cpu 使用率
top(实时)
ps(静态)
4. 网络:iftop
系统版本:cat/etc/redhat-release
ip地址:ifconfig
内核版本:uname -r
5. kill -9
killall
7 进程控制
7.1 进程的启动方式
- 手工启动
- 前台启动:用户输入命令,直接执行程序
- 后台启动:在命令行尾加入"$"符号
- 调度启动
- 使用at命令,设置一次性计划任务
- 使用crontab命令,设置周期性计划任务
7.2 进程的前后台调度
- ctrl+Z组合键
- 将当前进程挂起,即调入后台并停止执行
- jobs命令
- 查看处于后台的任务列表
- fg命令
- 将后台进程恢复到前台运行,可指定任务序号
7.3 终止进程的运行
- ctrl+C
- 中断正在执行的命令
- kill、killall命令
- kill用于终止指定PID号的进程
- killall用于终止指定名称的所有进程
- -9选项用于强制终止
8. 结束进程kill命令
格式
kill [信号] PID
kill发送信号
9. 进程使用内存的问题
内存泄露:Memory Leak
内存一直处于占用状态
内存溢出:Memory Overflow
程序申请了10M的空间,但这个空间写入了10M以上字节的数据
内存不足:OOM(Out Of Memory)
OOM使用解决方法
1.限制java进程的max heap,并且降低java程序的worker数量,从而降低内存使用
2.给系统增加swap空间
10. 计划任务管理
10.1 at命令
一次性计划任务
格式:
at [option] TIME
at [选项] 时间
不常用
10.2 crontab命令
10.2.1 crontab命令
- 按照预先设置的时间周期(分钟、小时、天……)重复执行用户指定的命令操作
- 属于周期性任务
- 主要配置文件
- 全局配置文件,位于文件/etc/crontab
- 系统默认的设置,位于目录/etc/cron.*/
- 用户定义的设置,位于文件/var/spool/cron/用户名
10.2.2 管理crontab计划任务
- 编辑计划任务
- crontab -e [u 用户名]
- 查看计划任务
- crontab -l [u 用户名]
- 删除计划任务
- crontab -r [u 用户名]
格式:
分钟 小时 日期 月份 星期
字段 | 说明 |
---|---|
分钟 | 取值 0 - 59 任意整数 |
小时 | 取值 0 - 23 任意整数 |
日期 | 取值 1 - 31 任意整数 |
月份 | 取值 1 - 12 任意整数 |
星期 | 取值 0 - 7 任意整数 |
时间数值特殊表示方法:
* 代表范围内的任意时间
,表示间隔的多个不连续时间点
- 表示一个连续的时间范围
/ 指定间隔的时间频率
在书写 crontab 定时任务时,需要注意以下几个事项:
- 6 个选项都不能为空,必须填写。如果不确定,则使用“*”代表任意时间
- crontab 定时任务的最小有效时间是分钟,最大有效时间是月。像 2018 年某时执行、3 点 30 分 30 秒这样的时间都不能被识别
- 在定义时间时,日期和星期最好不要在一条定时任务中出现,因为它们都以天为单位,非常容易让管理员混淆
- 在定时任务中,不管是直接写命令,还是在脚本中写命令,最好都使用绝对路径。有时使用相对路径的命令会报错