查swap内存使用

查询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使用策略

查询

cat /proc/sys/vm/swappiness

默认60,调成0是尽量不使用swap,调低

立刻调整,临时生效,重启失效

sysctl vm.swappiness=10

改完再查询看到变了

buff/cache的问题

在swap使用高的时候,能看到buff cache很高,free很少

free -m看到

             total   used    free shared buff/cache available

Mem: 16046   5185   2829 703      8031         9826

Swap: 8063    2668    5395

执行后看到,对比,看到很明显

           total      used      free    shared buff/cache available

Mem: 16046    5094    10134   703      817         10025

Swap: 8063     2668     5395

可能是数据传输大,被用去提高i/o了

细心的朋友会注意到,当你在linux下频繁存取文件后,物理内存会很快被用光,当程序结束后,内存不会被正常释放,而是一直作为caching.这个问题,貌似有不少人在问,不过都没有看到有什么很好解决的办法.那么我来谈谈这个问题.

清除Linux系统中的缓存,以释放出空闲内存

系统会释放出大量的缓存,可以用于临时提高系统的可用内存。

注意:这个命令只能释放缓存,不能释放被应用程序占用的内存。

echo 3 > /proc/sys/vm/drop_caches

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值