当前位置: 首页 > 科技观察

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

时间:2023-03-21 15:01:26 科技观察

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~]#yuminstallepel-release[root@localhost~]#yuminstallsmempython-matplotlibpython-tk显示每一个进程的内存占用情况,可以执行如下图:上图中,“-k”参数用于显示内存单元,“-s”用于排序,uss用于对uss列进行排序。这样,系统中输出的所有操作占用的内存大小就很清楚了。smem还支持以百分比的形式显示各个进程占用系统内存的比例,如下图:其中“-p”表示以百分比的形式报告内存使用情况,使得进程占用系统内存的比例每个过程一目了然。smem还可以显示系统中每个用户的内存使用情况,如下图所示:其中“-u”表示显示用户的内存使用信息。***,smem还支持查看某个进程占用的内存大小,例如:smem-Pnginxsmem-k-Pnginx由此可见,通过smem可以很方便的获取到各个进程占用的内存资源。绝对是运维必备的利器。对CPU/内存占用进程的应用要求在服务器排查、排查中要求非常高。要获取这些信息,只需要一些命令组合就可以实现,可以说非常简单。首先,获取当前系统中占用CPU***前10位的进程,最简单的方法就是结合ps命令,例如:[root@localhost~]#psaux|head-1;psaux|sort-rn-k3|head-10其中,第一句主要是获取标题(USERPID%CPU%MEMVSZRSSTTYSTATSTARTTIMECOMMAND)信息。而“head:-N”可以指定显示的行数,默认显示10行。第二个命令是输出和排序的组合。ps参数的a指的是all,表示所有进程,u指的是userid,就是执行进程的用户id,x指的是显示所有程序,不终端区分。接下来是排序命令,其中:r指的是reverse,这里指的是反向比较结果,默认输出的是从小到大,reverse之后就是从大到小。n指数值排序,按照其数值排序。k表示按照哪一列排序,后面的数字3表示按照第三列排序。在这个例子中,可以看到%CPU在第三个位置,所以k3的意思是按照%CPU的值从大到小排序。下面的“|”是一个管道符号,查询结果导出到下面的命令进行下一步。***“head-10”命令获取默认的前10行数据。清除僵尸进程僵尸进程的进程是:父进程调用fork创建子进程后,子进程运行到终止,立即从内存中清除,但进程描述符仍保留在内存中。有很多方法可以找到系统中的僵尸进程。下面是一个检测僵尸进程的命令行方法:[root@localhost~]#ps-e-ostat,ppid,pid,cmd|egrep'^[Zz]'Z1080810812[java]引入如下参数:-e:参数用于列出所有进程-o:参数用于设置输出格式,这里只输出进程的stat(状态信息)和ppid(父进程pid),pid(当前进程的pid)进程)、cmd(即进程的可执行文件)。egrep:是Linux下的正则表达式工具。'^[Zz]':这是一个正则表达式,^表示第一个字符的位置,[Zz]表示小写的z或大写的Z字母,表示最后一个字符为Z或以z开头的过程数据,这是因为僵尸进程的状态信息是以字母Z或z开头的。找到僵尸进程的pid后,可以直接用“kill-9pid”命令杀掉,但是如果僵尸进程很多的话,会很麻烦。因此,还需要一种批量删除僵尸进程的方法:[root@localhost~]#ps-e-ostat,ppid,pid,cmd|grep-e'^[Zz]'|awk'{print$2}'|xargskill-9这是一个命令组合,通过管道实现命令的组合应用。“grep-e”等同于egrep命令。“awk'{print$2}'”是过滤前面命令的输出信息,只输出第二列的值,第二列是进程的ppid。“xargskill-9”就是把得到的ppid作为参数传给“kill-9”,也就是杀掉这些ppid。xargs命令可以将标准输入转换成各种格式化的参数。在这里,管道的输出作为参数传递给kill命令。杀掉僵尸进程,这是治标不治本。真正的方法是不要让它发生。那么如何避免僵尸进程的产生呢?