命令行的学习捷径
Linux命令有许多强悍的功能:从简单的c盘操作、文件存取,到进行复杂的多媒体图象和流媒体文件的制做,都离不开命令行。
在Linux的学习中,菜鸟就会碰到如此一个问题:自己对系统的每位命令都很熟悉,并且在系统出现故障的时侯,就无从下手了。
说究竟,就是学习的理论知识没有挺好地与系统实际操作相结合。
550多个Linux命令,1303页Linux命令速查指南,PDF版开放下载
5大系统运维状态
对运维来说,查看系统运行状态是最基础的工作之一。要了解CPU、内存、进程、磁盘、网络,这五大运维系统的运行状态,须要把握的运维命令有ls、ps、free、top、uptime、ifconfig、su/sudo、dmesg、iostat、vmstat、sar、htop、iotop、smem等命令。这种命令有的特别简单,不做过多介绍,重点介绍几个高效、神奇的命令linux僵尸程序,它能帮助我们快速了解系统运行状态,绝对是运维利器。
典型Linux命令行
Linux使用到了虚拟显存,因而要确切的估算一个进程实际使用的数学显存就不是这么简单。Smem是一款命令行下的显存使用情况报告工具,它还能给用户提供Linux系统下的显存使用的多种报告。
550多个Linux命令,1303页Linux命令速查指南,PDF版开放下载
显存状态检查工具
要安装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
由此可知,通过smem,对每位进程占用的显存资源可以很轻松的获取。绝对是运维必备工具。
CPU/显存占用进程
这个应用需求在服务器的问题排查和故障处理上使用率十分高,要获取这种信息,只须要一些命令组合即可实现,可以说十分简单。
首先LINUX虚机,获取当前系统占用CPU最高的前10个进程最简单的形式是通过ps命令组合实现,比如:
[root@localhost ~]# ps aux | head -1;ps aux | sort -rn -k3 | head -10
其中,第一句主要是为了获取标题(USERPID%CPU%MEMVSZRSSTTYSTATSTARTTIMECOMMAND)信息。而head:-N可以指定显示的行数,默认显示10行。
第二个命令是一个输出加排序组合,ps参数的a指代all,表示所有的进程,u指代userid,就是执行该进程的用户id,x指代显示所有程序,不以终端机来分辨。
接出来是sort命令,其中:r指代reverse,这儿是指反向比较结果,输出时默认从小到大,反向后从大到小。n指代numbericsort,依照其数值排序。k代表按照哪一列进行排序,前面的数字3表示根据第3列排序。本例中,可以看见%CPU在第3个位置,因而k3表示按照%CPU的数值进行由大到小的排序。
接出来的“|”为管线符号,将查询出的结果导到下边的命令中进行下一步的操作。
最后的“head-10”命令获取默认前10行数据。
去除僵尸过程
一个僵尸进程形成的过程是:父进程调用fork创建子进程后linux僵尸程序,子进程运行直到其中止,它立刻从显存中移除,但进程描述符始终保留在显存中。
要查找系统中的僵尸进程,有多种方式,这儿给出一种命令行侦测僵尸进程的方式:
[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]:这是正则表达式,
^表示第一个字符的位置linux查看操作系统,
[Zz],表示大写z或则小写的Z字母,即表示第一个字符为Z或则z开头的进程数据,只所以这样是由于僵尸进程的状态信息以Z或则z字母开头。
找到僵尸进程的pid后,直接通过kill-9pid命令杀掉即可,而且假如僵尸进程好多的话,还会很冗长,因而,还须要一个批量删掉僵尸进程的办法:
[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。
xargskill-9这是将得到的ppid传给kill-9作为参数,也就是kill掉那些ppid。
xargs命令可以将标准输入转成各类低格的参数,这儿是将管线的输出内容作为参数传递给kill命令。
杀掉僵尸进程,这个是治标不治本的。
真正的办法是,不让它形成。这么怎样防止僵尸进程的形成呢?