服务器操作之迷(zhi)惑(zhang)行为
今天,我并有打算更公众号,但实在是……,实在是觉得不应该浪费这次展示反面教材的机会。因为几乎所有的推文都在用近乎完美的服务器运行案例(基本就是没有运行任务)来讲解怎么解决服务器系统很卡、内存使用率过高和swap空间占用过高的问题。
1. 首先,展示一下我迷惑行为导致的后果吧。
top #Linux 系统下常用的监控工具,用于实时获取进程级别的 CPU 或内存使用情况
这里就不展示free -h的结果了,因为实在是不想那么明显的承认自己是个傻子(上图好像也包括了free 的结果了T_T)。要不是没有服务器那房间的钥匙,我可能已经百米冲刺直接过去重启了。
top 命令的输出信息主要分为两部分:
上半部分显示 CPU 和内存资源的总体使用情况:红字标记的参数需特别注意
(1)第一行:系统当前时间,当前登录用户个数以及系统负载。Load average: 709.45, 429.10, 184.15
注:Load average 是 CPU 负载的评估,其值越高,说明其任务队列越长,处于等待执行的任务越多。
(2)第二行:系统总进程数、运行中进程数、休眠、睡眠和僵尸进程数量。1963 sleeping,0 stopped, 0 zombie
(3)第三行:CPU 当前使用情况。0.3 id
注:id前的数值越大,CPU越空闲。我的这个案例,简直是社死案例。
(4)第四行:内存当前使用情况。~463M free(约等于无可用内存了)
(5)第五行:Swap 空间当前使用情况。0 free (无可用交换空间)
注:Swap交换的操作是磁盘IO的操作,如果有多个Swap交换区,Swap空间的分配会以轮流的方式操作于所有的Swap,这样会大大均衡IO的负载,加快Swap交换的速度。如果只有一个交换区,所有的交换操作会使交换区变得很忙,使系统大多数时间处于等待状态,效率很低。
下半部分以进程为维度显示资源的占用情况:
(1)PID:进程 ID。
(2)USER:进程所有者。hucy (虽然很不想承认,但这个用户是我)
(3)PR:进程优先级
(4)NI:NICE 值,NICE 值越小,优先级越高。
(5)VIRT:使用的虚拟内存大小,单位 KB。
(6)RES:当前使用的内存大小,单位 KB。
(7)SHR:使用的共享内存的大小,单位 KB。
(8)S:进程状态。
(9)%CPU:更新时间间隔内进程所使用的 CPU 时间的百分比。
(10)%MEM:更新时间间隔内进程所使用的内存的百分比。
(11)TIME+:进程使用的 CPU 时间,精确到 0.01s。
(12)COMMAND:进程名称。
另,Linux 系统通过分页机制管理内存的同时,将磁盘的一部分划出来作为虚拟内存。而 kswapd0 是 Linux 系统虚拟内存管理中负责换页的进程。当系统内存不足时,kswapd0(见上图top命令输出的下半部分第2行)会频繁的进行换页操作。换页操作非常消耗 CPU 资源,导致该进程持续占用高 CPU 资源。
2. kill进程(PID),解救服务器。
服务器多进程处理任务很常用,但是由于一些原因,这些进程可能会一直休眠或者停止,导致程序无法继续。由于进程太多,需要kill掉这些无用进程。本例中,导致内存塞满的原因,我是知道的。bwa的循环操作,我写错了几个字母。其实,不知道原因也没有关系,因为kill掉bwa引发的进程势在必行,不然,其他用户可能就要过来kill我了。
(1) 首先查看用户hucy投递的任务
ps --help all #参数见帮助文档
ps -aux | grep hucy #这里的hucy是我当前使用的用户名
结果如下,接下来的目的是批量杀死由bwa引发的所有进程。
(2) 查看bwa引发的所有进程
ps -aux | grep hucy | grep bwa | grep -v grep
(3) 批量打印kill所有这些进程的命令,有两种命令,kill和kill -9
# ps -aux | grep hucy | grep bwa | grep -v grep | awk '{print "kill "$2}' #kill PID我从来没有成功过,所以此处采用kill -9 PID。
ps -aux | grep hucy | grep bwa | grep -v grep | awk '{print "kill -9 "$2}'
(4) 批量sh执行
# 拯救迷惑(zz)行为
ps -aux | grep hucy | grep bwa | grep -v grep | awk '{print "kill -9 "$2}' | sh #见证奇迹的操作
# 查看服务器是否复活
ps -aux | grep hucy
free -h
top
同理,你可以杀掉(kill)那些意外睡着或者无用的进程。
注:我是业余的,如有问题请自行查证;非常欢迎大家带着证据过来,以理服人。
拓展阅读:
(1)Linux 实例:CPU 或内存占用率高导致无法登录 https://cloud.tencent.com/document/product/213/10310
(2)linux系统很卡的基本排查方法 https://blog.csdn.net/zhubaojay/article/details/60959667
(3)linux 内存清理/释放命令 https://blog.csdn.net/wz947324/article/details/80857717
(4)Linux报swap空间占用过高,但物理内存还有空余 https://blog.csdn.net/weixin_30372371/article/details/98949810
(5)Linux服务器CPU使用率较低但负载较高 https://blog.csdn.net/weixin_33933118/article/details/86029555
(6)Linux批量kill进程 https://blog.csdn.net/jiang_ming_/article/details/97393637
(7)linux awk命令详解 https://www.cnblogs.com/ggjucheng/archive/2013/01/13/2858470.html
(8)Linux中kill -2、kill -9等区别 && kill signal汇总 https://blog.csdn.net/a1010256340/article/details/75253353