Linux查看占用swap的进程脚本
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Linux查看占用swap的进程脚本相关的知识,希望对你有一定的参考价值。
参考技术A linux查看占用swap的进程脚本01#!/bin/bash0203##############################################################################04#脚本功能
:
列出正在占用swap的进程。05###############################################################################0607echo
-e
PID/t/tSwap/t/tProc_Name0809#
拿出/proc目录下所有以数字为名的目录(进程名是数字才是进程,其他如sys,net等存放的是其他信息)10for
pid
in
`ls
-l
/proc
|
grep
^d
|
awk
'
$9
'|
grep
-v
[^0-9]`11do12
#
让进程释放swap的方法只有一个:就是重启该进程。或者等其自动释放。放13
#
如果进程会自动释放,那么我们就不会写脚本来找他了,找他都是因为他没有自动释放。14
#
所以我们要列出占用swap并需要重启的进程,但是init这个进程是系统里所有进程的祖先进程15
#
重启init进程意味着重启系统,这是万万不可以的,所以就不必检测他了,以免对系统造成影响。16
if
[
$pid
-eq
1
];then
continue;fi17
grep
-q
Swap
/proc/$pid/smaps
2>/dev/null18
if
[
$?
-eq
0
];then19
swap=$(grep
Swap
/proc/$pid/smaps
/20
|
gawk
'
sum+=$2;
END
sum
')21
proc_name=$(ps
aux
|
grep
-w
$pid
|
grep
-v
grep
/22
|
awk
'
for(i=11;i<=NF;i++)
printf(%s
,$i);
')23
if
[
$swap
-gt
0
];then24
echo
-e
$pid/t$swap/t$proc_name25
fi26
fi27done
|
sort
-k2
-n
|
awk
-F'/t'
'28
pid[NR]=$1;29
size[NR]=$2;30
name[NR]=$3;3132END33
for(id=1;id<=length(pid);id++)34
35
if(size[id]<1024)36
printf(%-10s/t%15sKB/t%s/n,pid[id],size[id],name[id]);37
else
if(size[id]<1048576)38
printf(%-10s/t%15.2fMB/t%s/n,pid[id],size[id]/1024,name[id]);39
else40
printf(%-10s/t%15.2fGB/t%s/n,pid[id],size[id]/1048576,name[id]);41
42'
Linux下swap耗尽该怎么办?如何释放swap
Linux下交换内存耗尽如何查看及如何处理。以及查看shell脚本描述。交换内存不足时,启动应用时会报内存不足。1、启动应用时报内存不足,直接Linux命令行top查看下。swap used100%,0free。
2、reboot服务器能有效的释放swap,可是很多情况下是不能重启服务器的。这时就要弄明白是什么占着内存。查看下/proc目录下内容,发现很多数字命名的目录,这些就是Linux的进程了。
3、要让进程释放swap的方法只有kill掉该进程了。写个脚本来查看具体是哪些进程占着内存啦。
一、对/proc目录下所有以数字为名的目录进行遍历
二、1目录是根进程重启会导致系统重启,所以直接排除掉。
三、算出每个进程占用内存的大小,然后按照大小排序
四、输出内存占用大于1MB的进程
4、将运行结果保存到swap.log文件中
5、查看swap.log.10325这个进程内存占用最多有130几M。
6、直接kill掉,然后再top查看。ok,swap一下子释放了很多,搞定。
注意事项:proc目录下1目录不能直接kill掉。 参考技术A 先重启 然后再慢慢跟踪下内存使用情况 如果有问题的进程可以看下是否kill还是优化 最后再决定是否升级
以上是关于Linux查看占用swap的进程脚本的主要内容,如果未能解决你的问题,请参考以下文章