查询linux的swap被什么使用了
查询centos的swap被什么进程使用了
swap内存被什么程序占用,什么程序使用了swap分区,占用swap内存的进程
查询swap内存使用脚本,限制swap内存使用,处理swap内存占用,释放swap内存
减少使用swap内存
查询命令
查系统使用swap内存前10个进程:
for i in $( cd /proc;ls |grep "^[0-9]"|awk ' $0 >100') ;do awk '/Swap:/{a=a+$2}END{print '"$i"',a/1024"M"}' /proc/$i/smaps 2>/dev/null ; done | sort -k2nr |head
看到输出多行,左边是进程号,右边是使用了多少进程ID
这个命令的含义是:
1. 首先,使用`cd /proc`进入`/proc`目录。
2. 使用`ls |grep "^[0-9]"|awk ' $0 >100'`命令列出该目录下所有以数字开头且大于100的文件夹。
3. 使用一个循环来遍历每个文件夹,将其存储在变量i中。
4. 在循环中,使用`awk '/Swap:/{a=a+$2}END{print '"$i"',a/1024"M"}' /proc/$i/smaps 2>/dev/null`命令来计算每个进程的Swap使用量,并以MB为单位打印出来。其中,`/proc/$i/smaps`表示进程的内存映射文件。
5. 最后,使用管道符号`|`将输出结果传递给`sort -k2nr`命令进行按照第二列数字降序排序。
6. 使用管道符号再将结果传递给`head`命令显示前面几行结果,默认是显示前10行。
这个命令的作用是找到占用Swap内存最多的进程,并显示其进程ID和Swap使用量。
做成脚本
方便下次调用
#!/bin/bash
echo "-----查询swap使用多的几个程序"
for i in $( cd /proc;ls |grep "^[0-9]"|awk ' $0 >100') ;do awk '/Swap:/{j=j+$2}END{print '"$i"',j/1024"M"}' /proc/$i/smaps 2>/dev/null ; done | sort -k2nr | head -10
echo "-----查询这几个程序的运行路径"
pids=`for i in $( cd /proc;ls |grep "^[0-9]"|awk ' $0 >100') ;do awk '/Swap:/{j=j+$2}END{print '"$i"',j/1024"M"}' /proc/$i/smaps 2>/dev/null ; done | sort -k2nr | head -10 | awk '{print $1}'`
for pid in ${pids}; do ls -lt /proc/${pid}/cwd; done
查看单个进程使用的swap内存:
linux查看进程使用了多少swap内存
比如查看进程id为24450使用了多少swap内存
awk '/Swap:/{a=a+$2}END{print a/1024"M"}' /proc/24450/smaps
输出如:1208.17M
查占用内存资源最多的11个进程
ps aux --sort=-pmem | head -11
(已知centos7可以,redhat6不行)
处理swap内存占用
查询swap内存是为了释放
执行上面命令后,看到是自己的几个程序占用了大量的swap内存,直接重启自己程序就行
还有可能看到的都是系统程序占用的swap,看到运行目录都是/根目录,这种情况查到只能关闭swap,再打开swap,风险高,实测需要的时间也久
减少使用swap内存
希望将来少用swap内存,修改swap使用策略,查询swap使用策略
buff/cache的问题
在swap使用高的时候,能看到buff cache很高,free很少
free -m看到
total used free shared buff/cache available
Mem: 16046 5185 2829 703 8031 9826
执行后看到,对比,看到很明显
total used free shared buff/cache available
Mem: 16046 5094 10134 703 817 10025
可能是数据传输大,被用去提高i/o了