杀死僵尸进程,你需要这些神奇高效的Linux命令行

转载 南非蚂蚁  2019-03-05 09:30  阅读 4,152 次 评论 5 条 百度已收录
摘要:

神奇高效的Linux命令行,内存、CPU及僵尸进程的查找及处理

Linux高手,其实都是玩儿命令行很熟练的人。

命令行的学习捷径

Linux命令有许多强大的功能:从简单的磁盘操作、文件存取,到进行复杂的多媒体图像和流媒体文件的制作,都离不开命令行。

在Linux的学习中,新手都会遇到这么一个问题:自己对系统的每个命令都很熟悉,但是在系统出现故障的时候,就无从下手了。

说到底,就是学习的理论知识没有很好地与系统实际操作相结合。

5大系统运维状态

对运维来说,查看系统运行状态是最基础的工作之一。

要了解CPU、内存、进程、磁盘、网络,这五大运维系统的运行状态,需要掌握的运维命令有ls、ps、free、top、uptime、ifconfig、su/sudo、dmesg、iostat、vmstat、sar、htop、iotop、smem等命令。

这些命令有的非常简单,不做过多介绍,重点介绍几个高效、神奇的命令,它能帮助我们快速了解系统运行状态,绝对是运维神器。

典型Linux命令行

Linux使用到了虚拟内存,因此要准确的计算一个进程实际使用的物理内存就不是那么简单。

Smem 是一款命令行下的内存使用情况报告工具,它能够给用户提供 Linux 系统下的内存使用的多种报告。

内存状态检测工具

要安装smem这个工具,需要在系统上安装EPEL软件源,安装过程如下:

[root@localhost ~]# yum install epel-release -y
[root@localhost ~]# yum install smem python-matplotlib python-tk -y

要显示系统中每个进程的占用内存状态,可执行如下指令:

[root@localhost ~]# smem -k -s uss

其中: “-k”参数用来显示内存单位,“-s”是排序,uss是对uss列进行排序,这样,就输出了系统中所有进行占用的内存大小,非常清晰明白。

smem还支持以百分比形式显示每个进程占用系统内存的比率,如下命令:

[root@localhost ~]# smem -p -s uss

其中,“-p”表示以百分比的形式报告内存使用情况,这样每个进程占用的系统内存比重一目了然。

smem还可以显示系统中每一个用户的内存使用情况,如下命令:

[root@localhost ~]# smem -u -k

其中,“-u”表示显示用户占用内存信息。

最后,smem还支持查看某个进程占用内存大小,例如:

smem -P nginx
smem -k -P nginx

由此可知,通过smem,对每个进程占用的内存资源可以很轻松的获取。绝对是运维必备工具。

CPU/内存占用进程

这个应用需求在服务器的问题排查和故障处理上使用率非常高,要获取这些信息,只需要一些命令组合即可实现,可以说非常简单。

首先,获取当前系统占用CPU最高的前10个进程最简单的方式是通过ps命令组合实现,例如:

[root@localhost ~]# ps aux|head -1;ps aux|sort -rn -k3|head -10 


其中,第一句主要是为了获取标题(USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND)信息。而“head:-N”可以指定显示的行数,默认显示10行。

第二个命令是一个输出加排序组合,ps参数的a指代all,表示所有的进程,u指代user id,就是执行该进程的用户id,x指代显示所有程序,不以终端机来区分。


接下来是sort命令,其中:r指代reverse,这里是指反向比较结果,输出时默认从小到大,反向后从大到小。n指代numberic sort,根据其数值排序。k代表根据哪一列进行排序,后面的数字3表示按照第3列排序。本例中,可以看到%CPU在第3个位置,因此k3表示根据%CPU的数值进行由大到小的排序。


接下来的“|”为管道符号,将查询出的结果导到下面的命令中进行下一步的操作。


最后的“head -10”命令获取默认前10行数据。

清除僵尸过程

一个僵尸进程产生的过程是:父进程调用fork创建子进程后,子进程运行直至其终止,它立即从内存中移除,但进程描述符仍然保留在内存中。

要查找系统中的僵尸进程,有多种方法,这里给出一种命令行探测僵尸进程的方法:

[root@localhost ~]# ps -e -o stat,ppid,pid,cmd | egrep ?'^[Zz]'Z ? ?10808 10812 [java] <defunct> 


介绍下几个参数:
-e:参数用于列出所有的进程
-o:参数用于设定输出格式,这里只输出进程的stat(状态信息)、ppid(父进程pid)、pid(当前进程的pid),cmd(即进程的可执行文件。
egrep:是linux下的正则表达式工具
'^[Zz]':这是正则表达式,^表示第一个字符的位置,[Zz],表示小写z或者大写的Z字母,即表示第一个字符为Z或者z开头的进程数据,只所以这样是因为僵尸进程的状态信息以Z或者z字母开头。

找到僵尸进程的pid后,直接通过”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命令。

本章节到此就结束了,各位小伙伴们,你们学到了吗,欢迎添加刘少QQ(1150110267),大家一起探讨吧!

本文地址:https://www.ezliushao.com/5.html
加入我们:请加入刘少技术博客交流群:扫描二维码刘少技术博客的QQ交流群 | 浪子丶刘少 QQ:1150110267(注:微信暂停添加好友)
温馨提示:文章内容系作者个人观点,不代表刘少技术博客对观点赞同或支持。
版权声明:本文为转载文章,来源于 南非蚂蚁 ,版权归原作者所有,欢迎分享本文,转载请保留出处!
PREVIOUS:已经是最后一篇了

发表评论


表情

  1. 红嘴鸭
    红嘴鸭 【新手】 @回复

    感谢分享,收藏了

  2. 趣知识
    趣知识 【新手】 @回复

    之前用阿里esc,搞不定进程,杀不死,所以废弃了,会一点技术就好了

  3. vultr
    vultr 【新手】 @回复

    朋友 交换链接吗?

    • 浪子丶刘少
      浪子丶刘少【浪子丶刘少】2019-03-06 at 10:17  回复

      @vultr当然有换友链的需求,我也专门开了一个交换友链的页面https://www.ezliushao.com/ls/yljhy.html,请在贵站加入本站链接后留言,本站将在12小时之内添加链接(周末及法定节假日除外)。