顽固的僵尸进程,这些高效神奇的 Linux 命令助你奇效
程序员面试吧
共 2558字,需浏览 6分钟
·
2022-07-01 04:49
Linux高手,其实都是玩儿命令行很熟练的人。
命令行的学习捷径
Linux 命令有许多强大的功能:从简单的磁盘操作、文件存取,到进行复杂的多媒体图像和流媒体文件的制作,都离不开命令行。
在 Linux 的学习中,新手都会遇到这么一个问题:自己对系统的每个命令都很熟悉,但是在系统出现故障的时候,就无从下手了。
说到底,就是学习的理论知识没有很好地与系统实际操作相结合。
5大系统运维状态
典型 Linux 命令行
Smem
是一款命令行下的内存使用情况报告工具,它能够给用户提供 Linux 系统下的内存使用的多种报告。内存状态检测工具
smem
这个工具,需要在系统上安装EPEL软件源,安装过程如下:[root@localhost ~]# yum install epel-release
[root@localhost ~]# yum install smem python-matplotlib python-tk
要显示系统中每个进程的占用内存状态,可执行如下图指令:
上图中,-k
参数用来显示内存单位,-s
是排序,uss
是对 uss 列进行排序,这样,就输出了系统中所有进行占用的内存大小,非常清晰明白。
smem
还支持以百分比形式显示每个进程占用系统内存的比率,如下图所示:
其中,-p
表示以百分比的形式报告内存使用情况,这样每个进程占用的系统内存比重一目了然。
smem
还可以显示系统中每一个用户的内存使用情况,如下图所示:
其中,-u
表示显示用户占用内存信息。
最后,smem
还支持查看某个进程占用内存大小,例如:
smem -P nginx
smem -k -P nginx
CPU/内存占用进程
[root@localhost ~]# ps aux | head -1;ps aux | sort -rn -k3 | head -10
head:-N
可以指定显示的行数,默认显示10行。a
指代 all,表示所有的进程,u
指代 user id,就是执行该进程的用户id,x
指代显示所有程序,不以终端机来区分。r
指代 reverse,这里是指反向比较结果,输出时默认从小到大,反向后从大到小。n
指代 numberic sort,根据其数值排序。k代表根据哪一列进行排序,后面的数字3表示按照第3列排序。本例中,可以看到%CPU在第3个位置,因此k3表示根据%CPU的数值进行由大到小的排序。清除僵尸过程
一个僵尸进程产生的过程是:父进程调用 fork 创建子进程后,子进程运行直至其终止,它立即从内存中移除,但进程描述符仍然保留在内存中。
要查找系统中的僵尸进程,有多种方法,这里给出一种命令行探测僵尸进程的方法:
[root@localhost ~]# ps -e -o stat,ppid,pid,cmd | egrep ‘^[Zz]’Z 10808 10812 [java]
介绍下几个参数:
-e
:参数用于列出所有的进程-o
:参数用于设定输出格式,这里只输出进程的stat(状态信息)、ppid(父进程pid)、pid(当前进程的pid),cmd(即进程的可执行文件。egrep
:是linux下的正则表达式工具^[Zz]
:这是正则表达式,^
表示第一个字符的位置,[Zz]
,表示小写z或者大写的Z字母,即表示第一个字符为Z或者z开头的进程数据,只所以这样是因为僵尸进程的状态信息以Z或者z字母开头。kill -9 pid
命令杀掉即可,但是如果僵尸进程很多的话,就会很繁琐,因此,还需要一个批量删除僵尸进程的办法:[root@localhost ~]# ps -e -o stat,ppid,pid,cmd | grep -e ‘^[Zz]’ | awk ‘{print $2}’ | xargs kill -9
grep -e
相当于egrep
命令。awk ‘{print $2}’
是将前面命令的输出信息进行过滤,仅仅输出第二列的值,而第二列就是进程的ppid。xargs kill -9
这是将得到的 ppid 传给kill -9
作为参数,也就是 kill 掉这些 ppid。xargs 命令可以将标准输入转成各种格式化的参数,这里是将管道的输出内容作为参数传递给 kill 命令。来源:https://os.51cto.com/article/592439.html
评论