Linux运维常用命令备忘录
作为一个后端开发,尤其是数据开发,我们很多的服务都是以进程的方式运行在后台.例如Jstorm/Kafka/ElasticSearch等等,线上报警处理也是一个必备技能了,更多的可能是一些磁盘,内存,CPU指标之类的,有些命令不常用可能会忘记,做个记录方便查找.
磁盘
这个应该是最常见的,磁盘报警是家常便饭了.
df -lh
查看系统磁盘占用情况,一般磁盘报警了可以先用这个命令看下大概是哪个盘出问题了,找到占用比较大的磁盘有时候需要配合其他命令:
1 | # 到具体的目录下执行 |
这里不推荐第一种方式是因为效率问题,如果碰上是根/
目录满了,基本上统计不出来,如果为了快,想配合排序定位问题,还可以配合sort函数使用
1 | # 倒序排(一般占用大基本上就是看G,很少会到T,毕竟磁盘没那么大,也有例外) |
find
这个命令紧跟在上一个命令后面,就是因为很多时候我们需要批量删除满足某些条件的文件,但这些文件可能并不是简单的在一个文件夹下面,类型一样.可能分散在某个目录下面的多级目录,并且类型也很多:
1 | # 根据文件类型来删,比如日志文件 *.log |
**NOTE:**find命令-a
:与,-or
:或,not
:否.另外使用删除请慎重,可以先用-print
打印一下看看是否满足要求,不然删了不该删的后果可能很严重.
swap
有时候磁盘满了可能是swap设置的太大,占用的swap又无法释放(内存就算有很大空闲,swap已经使用的可能也不会释放),导致磁盘一直报警,处理这个要稍微麻烦一点儿.首先看下磁盘占用比较大的几个程序,或者说看下有没有比较重要的服务占用着缓存,有的话重启下,先把重要的程序占用的swap释放掉,然后关闭缓存,开启缓存:
看一次实际线上问题:
1 | $ free -m |
可以看到内存有很多空闲,但是swap占用了2.6G无法释放,然后统计下是哪些进程在占用着swap:
1 | $ for i in $(sudo ls /proc | grep "^[0-9]" | awk '$0>100'); do sudo awk '/Swap:/{a=a+$2}END{print '"$i"',a/1024"M"}' /proc/$i/smaps;done| sort -k2nr | head |
可以看到进程号和对应的缓存占用大小(如果不想看到错误信息,可以grep -v “No such”过滤掉),看下具体的有没有比较重要的,如果想看具体的程序,后面可以用awk切割出pid,然后配合ps -p xxx
看下具体的进程是不是重要的,手动重启下.然后就是比较关键的两个操作:
1 | # 关闭所有缓存 |
这样swap就全部被清空了.
lsof
这个命令可能一般人用的比较少,这个主要是看文件句柄的,有时候一个文件很大,我们直接删了,但是会发现磁盘空间并没有释放.这个时候一般就是还有进程占用着这个文件句柄,所以你可能在目录里面看没有什么文件,但是磁盘就是被占用了.可以这么排查:
1 | # 查看文件为删除状态的文件 |
这个命令里面就可以看到是哪个进程持有这个文件的句柄,比如像tomcat,有时候日志打太多了,但是你直接删掉,磁盘根本不会减少,这个时候你可以重启下tomcat,就会发现文件占用的空间又回来了.
cpu/mem
这两个一般都是用top命令来看,所以放在一起说了.一般top之后可以看到进程的实时信息,top有一些常用参数命令
1 | c top显示带具体进程信息 |
具体的进程问题,可能得用具体的方法,这里就不做展开了.