进程和计划任务管理
一、进程管理相当于Windows的任务管理:
程序是没有运行的代码。进程是运行起来的代码。
线程:线程相当于复制了进程的部分代码,程序运行起来之后,真正执行的是线程执行。
一个进程多个线程。
Linux系统当中
启动程序的过程:
父进程先启动--------子进程。
子进程的资源由父进程进行分配。
结束的过程:
子进程先结束------父进程收回子进程的资源----------父进程才会终止。
特殊情况:
父进程结束了,子进程还在?僵尸进程。
查看进程信息: 静态查看 、动态查看
ps--------------静态查看进程信息
方法一:ps -aux 静态查看进程信息的方法(常用)
a:显示终端上所有进程,包括其他用户的进程。
u:列出进程的执行用户。
x:显示当前终端进程的详细信息。
[root@localhost ~]# ps -aux 查看进程占用系统资源的情况
USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND
USER:进程的用户
PID:进程号,每个进程在系统运行中的唯一标识,每个pid不重复
%cpu:进程占用的cpu百分比
%MEN:进程占用物理内存的百分比
VSZ:进程使用的虚拟内存大小(KB)
RSS:进程占用物理内存的量(KB)
TTY:表示终端。?表示该进程不是从用户端启动,而是系统自启动
STAT:status 状态 进程的状态(以下五种状态比较重要)
S:处于休眠状态,但随时可唤醒。
D:处于不可唤醒的休眠状态。
R:运行
T:停止状态,后台进程暂停或者进程处于跟踪调试状态。
z:僵尸进程,父进程先结束,子进程还活着。
补充说明:
状态后面的字符含义:
s:该进程包含子进程
l:该子进程有多个线程
<:进程优先级高
N:底优先级
+:该进程位于前台
L:该进程有一部分被锁进了内存
START:进程启动的时间
TIME:进程实际使用CPU运行的时间
COMMAND:进程启动命令
方法二、ps -elf 静态查看进程的方法
e:显示系统内的所有进程
l:显示进程的详细信息
f:完整的格式展示进程的信息
F:表示
S:进程的状态
UID:该进程的用户
ppid:该进程的父进程,谁启动的这个进程
c:进程在生命周期当中的CPU利用率
PRI:优先级,数字越大优先级越低
NI:谦让值
ADDR:进程在内存当中的地址
SZ:假如该进程被换出,需要交换空间的大小**(swap交换空间)**
WCHAN:如果进程处于休眠状态,显示睡眠中的系统函数名。
STIME:进程启动时间
time:进程实际使用cpu的时间
CMD:进程启动的详细命令
[root@localhost ~]# ps -elf
F S UID PID PPID C PRI NI ADDR SZ WCHAN STIME TTY TIME CMD
使用方法(配合管道符 | 使用)
ps -aux | grep nginx
方法三、动态获取进程信息
top
1(显示CPU数和状态)
c(根据CPU占用量的百分比大小,从大到小排列)
q (退出top)
top -b -n 1 (只运行一次之后退出)
[root@localhost opt]# top
top - 11:02:56 up 7:15, 2 users, load average: 0.00, 0.01, 0.05
Tasks: 222 total, 2 running, 220 sleeping, 0 stopped, 0 zombie
%Cpu(s): 0.0 us, 0.0 sy, 0.0 ni,100.0 id, 0.0 wa, 0.0 hi, 0.0 si, 0.0 st
KiB Mem : 3861508 total, 910064 free, 864292 used, 2087152 buff/cache
KiB Swap: 4063228 total, 4063228 free, 0 used. 2530636 avail Mem
top - 11:02:56 up 7:15, 2 users, load average: 0.00, 0.01, 0.05
11:02:56 系统时间
up:系统运行的市场
3 user :当前登录系统的用户
load average: 0.00(1分钟), 0.01(5分钟), 0.05(15分钟)系统处理任务数的平均数
Tasks: 222 total, 2 running, 220 sleeping, 0 stopped, 0 zombie
进程信息:总共222个进程 2个正在运行 220个正在休眠 0个终止进程 0个僵尸进程
%Cpu(s): 0.0 us, 0.0 sy, 0.0 ni,100.0 id, 0.0 wa, 0.0 hi, 0.0 si, 0.0 st(必会看)
us :系统用户占用CPU的百分比
sy : 内核占用CPU的百分比
ni :优先级的调用占用的CPU
id :当前系统空闲的CPU的百分比(主要看)
wa : 磁盘的读写性能
hi:1分钟内CPU使用率si:5分钟内CPU使用率st:15分钟内CPU使用率
KiB Mem : 3861508 total, 910064 free, 864292 used, 2087152 buff/cache
KiB Swap: 4063228 total, 4063228 free, 0 used. 2530636 avail Mem
等同于 free -h
进程信息区各列的作用:
pid:进程号
user:进程的用户
pr:优先级
ni :谦让值
VIRT:进程使用的虚拟内存 KB
RES:进程使用的物理内存 KB
SHR:共享进程的内存
%MEM:进程占用物理内存的百分比
TIME+:进程使用CPU的时间
CMD:进程启动的详细命令
运维的指标:
五大负载:
CPU负载:监控CPU的使用率 工具:top htop 了解CPU是否过载
占用85%需要注意 90%告警
**内存负载:**监控内存 free/top 内存占用比一般是90%告警。
优化:关闭不需要的服务,清除缓存(echo 1 > /proc/sys/vm/drop_caches)
[root@localhost opt]# echo 1 > /proc/sys/vm/drop_caches #清楚缓存文件命令
硬盘负载:I/O 磁盘读写命令
iostat 查看硬盘读写性能
网络负载:带宽利用率,流量的使用情况。 iftop ifconfig 需要epel源才可以下载
进程负载:监控进程使用资源的情况 top ps.
pgrep 查找进程ID 一般配合kill 一起使用。
-a 显示进程名和pid号
[root@localhost opt]# pgrep -a nginx
17082 nginx: master process /usr/sbin/nginx
18940 nginx: worker process
[root@localhost opt]# pgrep -a nginx | kill -9 17082
-c 仅显示匹配进程的数量(不常用)
[root@localhost opt]# pgrep -c nginx
3
-f 匹配进程名及其参数
[root@localhost opt]# pgrep -f nginx
18934
18935
18940
jobs 列出位于后台进程的状态信息
-l 列出后台所有进程的PID号,进程名
[root@localhost opt]# jobs -l
[1] 17429 停止 (信号) top
[2] 17569 停止 (信号) top
-p 列出后台进程组ID,只有pid
[root@localhost opt]# jobs -p
17429
17569
-n 仅列出最近运行中的后台进程
-r 仅显示正在运行的后台进程
-s 仅显示已停止的后台进程
如何把运行的程序调度到后台:
在命令行的结尾加一个 & 符号,就是把进程调度到后台运行。
fg 可以把后台的任务调度到前台。
进程管理:
结束进程的命令:kill -9 进程号 强制结束该进程
面试:kill进程是用什么来结束进程的?
kill 只是传递信号 -9是表示强制和立即执行 系统立即杀死此进程
僵尸进程(面试):
面试题:如果有僵尸进程应该怎么办?
1、少量的僵尸进程影响不大,僵尸进程占用资源很少,可以忽略
2、大量的僵尸进程怎么办? 僵尸进程使用kill命令杀不掉无法强制终结 重启
运维(运行,保证运行,维护正常运行)
二、计划任务:定时任务
***** ***** ***** ***** ***** 分(0-59) 时(0-23) 日(1-31) 月(1-12) 周(0-7 0/7都表示周日)
***************** +一般可执行的脚本或者命令
crontab
“ * ”表示该范围内的任意时间
“ , ”表示 间隔 多个不连续的时间点
1,3,5 * * * * ls 每个小时的第一分钟,第三分钟,第五分钟 都执行一次ls
“ / ” 表示间隔频率
*/5
30 8 * * * ls 每天的8点30分执行一次ls
30 13-16 * * * ls 每天的13-16点30分,执行一次ls
30 6 * /10 * ls 每个月,每隔十天的早上6点30分执行ls
30-35 17 * * 3 ls 每周三的下午17点的30-35分钟执行ls
创建定时任务:后台执行
crontab -e 创建定时任务,默认就是当前用户执行一般为root
crontab -e -u 用户名 指定用户创建定时任务
crontab -l -u 展示指定用户的定时任务
删除定时任务:
crontab -r 是全部清空 (不要用啊)
crontab -e 进去不需要那个dd删除哪个
crontab -l 查看定时任务