一起创业网-为互联网创业者服务

怎么程序占了swap

要找出程序占用了多少swap空间,可以通过以下步骤进行:

查看所有进程的swap使用情况

使用`free -h`命令查看系统的总内存、已使用内存、剩余内存以及swap的使用情况。

列出占用swap较多的进程

通过分析`/proc`目录下每个进程的`smaps`文件,可以找到占用swap较多的进程。`smaps`文件记录了每个进程每个数据段占用内存的情况,其中`Swap:`后面的数字表示该数据段占用的swap大小。

可以使用以下命令列出所有进程占用的swap分区的大小:

```bash

for i in $(cd /proc;ls | grep "^[0-9]" | awk '{print $9}'); do

awk '/Swap:/{a=a+$2}END{print "'$i'", a/1024"M"}' /proc/$i/smaps 2>/dev/null;

done | sort -k2nr | head

```

分析具体进程

通过上述命令,可以得到占用swap较多的进程的PID。然后可以使用`ps aux | grep ${pid}`命令获取该进程的详细信息,或者使用`cat /proc/$pid/smaps`详细查看该进程的内存使用情况。

释放进程占用的swap

如果某个进程占用了大量swap空间,且该进程不是系统关键进程,可以考虑重启该进程以释放swap空间。

示例脚本

```bash

!/bin/bash

echo -e "PID\t\tSwap\t\tProc_Name"

for pid in $(cd /proc;ls | grep "^[0-9]" | awk '{print $9}'); do

if [ $pid -eq 1 ]; then

continue;

fi

grep -q "Swap" /proc/$pid/smaps 2>/dev/null

if [ $? -eq 0 ]; then

swap=$(grep Swap /proc/$pid/smaps | awk '{sum+=$2} END{print sum}')

proc_name=$(ps aux | grep -w $pid | grep -v grep | awk '{print $2}')

echo -e "$pid\t$swap\t$proc_name"

fi

done | sort -k2nr

```

将上述脚本保存为`list_swap_usage.sh`,然后在终端中运行`chmod +x list_swap_usage.sh`使其可执行,最后运行`./list_swap_usage.sh`即可看到占用swap较多的进程及其占用的swap大小。