系统管理之进程管理
程序,进程,守护进程;
特殊类型进程
僵尸进程;
孤儿进程;
命令:ps,top
后台管理命令
结束进程三命令(杀手三剑客)
系统负载及故障排查;
程序,也叫代码,在磁盘里存着的代码;
进程:运行起来的程序,命令,服务(远程连接服务,网络服务),运行在内存中;
守护进程:守护进程,一直运行的进程,也可以叫做服务;
进程分类(异常进程):
僵尸进程:是当子进程比父进程先结束,而父进程又没有收回子进程,释放进程占用的资源,此时子进程将成为一个僵尸进程;
查找:通过ps aux过滤,Z状态即可找出僵尸进程;
解决:找出僵尸进程上级进程,结束进程;(主进程重启Linux,其他进程结束这个进程即可);
或者如果上级进程是主进程(pid为1进程,需要重启Linux);
kill -9 pid
[root@web01 ~]# ps aux | grep Z
或者
[root@web01 ~]# top//查看第二行
...
Tasks: 101 total, 1 running, 100 sleeping, 0 stopped, 0 zombie
...
孤儿进程:父进程没了,子进程还在运行,形成了孤儿进程;孤儿进程会被系统直接接管;
命令讲解:
ps -ef
[root@web01 ~]# ps -ef
UID PID PPID C STIME TTY TIME CMD
重要的:
UID 用户
PID 进程ID
PPID 父进程
CMD 进程名字
ps aux
比ef多了CPU使用率,内存使用率,占用内存大小,进程状态
[root@web01 ~]# ps aux
USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND
第一列:用户,user
第二列:PID
第三四列:CPU,内存使用率
第五六列:VSZ RSS,占用虚拟内存和物理内存;
第七列:TTY,占用终端,问号? 代表不占用终端;
STAT:进程状态;
START:启动时间
TIME:占用CPU的时间;
COMMAND:命令名;
STST进程状态:
R(running):进程运行;
S:可中断进程(可随时停止);
T(terminate):进程被暂停(挂起)Ctrl + z;
D:不可中断进程(IO读写);
Z(zombie):僵尸进程;
STAT状态+符号(附加状态):
s:进程是控制进程,Ss进程的领导者,父进程/子进程;
<:进程运行的高优先级上,S<优先级较高的进程;
N:进程运行在低优先级上,SN优先级较低的进程;
+:当前进程运行在前台,R+表示进程在前台运行;
l(小写l):进程是多线程的,Sl表示进程以线程方式运行(与程序);
top
默认是个交互式命令,可以展示系统负载信息,进程信息,CPU,内存信息;类似于windows中的任务管理器;内容太多,主要掌握核心;
top命令的输出,上面默认五行;相对较固定;
第一行:开头叫top,和w/uptime类似;不再解释;
top - 21:50:44 up 1:18, 1 user, load average: 0.00, 0.01, 0.05
第二行:开头Tasks:
Tasks: 102 total, 3 running, 99 sleeping, 0 stopped, 0 zombie
102进程,3个running,99个sleeping休眠,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;
显示的是CPU的细节;主要关注使用率:
0.0 us,用户占用的CPU,
0.0 sy,系统占用的CPU,系统和用户占用CPU高的话,就可能需要分析了,是否有异常?
0.0 ni,nice高优先级占用的CPU;
100.0 id,空闲率;
0.0 wa,waie,IO等待;
0.0 hi,硬中断;
0.0 si,软中断;
0.0 st,虚拟机steal占用的CPU;
第四行:内存信息:KiB Mem : 2027864 total, 1671504 free, 229724 used, 126636 buff/cache
126636 buff/cache:缓存/缓冲占用内存;
第五行:swap使用情况,KiB Swap: 2097148 total, 2097148 free, 0 used. 1654520 avail Mem
第四行第五行,查看内存,可以用free -h 查看
案例1:过滤出crond进程信息
[root@web01 ~]# ps -ef | grep crond
root 1011 1 0 20:32 ? 00:00:00 /usr/sbin/crond -n
root 1979 1759 0 22:04 pts/0 00:00:00 grep --color=auto crond //grep 把自己过滤了,也显示了,可以再过滤一次,不显示grep本身
[root@web01 ~]# ps -ef | grep crond | grep -v grep
root 1011 1 0 20:32 ? 00:00:00 /usr/sbin/crond -n
案例2:按照树形结构查看进程信息
[root@web01 ~]# pstree
[root@web01 ~]# pstree -p //-p,显示进程号(pid)
[root@web01 ~]# ps auxf
案例3:只显示某些内容
ps aux | awk '{print $1}'
ps aux | awk '{print $2}'
ps aux | awk '{print $3}'
ps aux | awk '{print $1,$2,$3,$NF,$(NF-1)}' //$NF,最后一列,$(NF-1)例数第2列
ps axo user,%cpu,stat //o显示指定信息,ax,显示完整信息
ps -ef --no-heading //不显示标题
ps --no-heading axo user,%cpu
排除第1行,从第二行开始
ps aux | awk 'NR>1{print $1,$3}'
案例4:取出某一个服务(crond)信息(pid,%cpu,%mem,command)
ps aux | grep 'crond' | awk '{print $2}'
ps --no-heading -o pid,%cpu,%mem,command -C crond //-C过滤,-o指定列
案例5:取出所有进程中内存使用率最高的前五
[root@web01 ~]# ps aux --no-heading | sort -rnk3|head -5
ps aux --sort=%mem | head -5 //ps也能自己排序,不常用,默认升序
ps aux --sort=-%mem | head -5 //--sort=-%mem,指标前面加-号,表示降序
top案例:交互与非交互模式
交互式:
默认3秒刷新一次,空格立即刷新;
P:按照CPU排序;默认就是按CPU;
M:按照内存排序;
top输入z进入颜色模式,按x标记出当前是按照哪列排序;
shift + > 向右
shift + < 向左
htop
htop是epel源中的
非交互式:想获取top命令结果,
-b:非交互式;
-n:只输出一次结果;
top -bn1 | awk 'NR==2' | awk '{print $(NF-1)}'//取第2行的倒数第2个值,也就是僵尸进程的数量
top -bn1 | awk 'NR==2{print $(NF-1)}'