【问题标题】:Linux: memory usage and releasing swap memoryLinux:内存使用和释放交换内存
【发布时间】:2014-01-13 05:40:55
【问题描述】:

我在我的一台服务器上观察到以下统计数据。

  1. 在 top 命令中,只有一个进程使用了​​ 15% 的 RAM,没有其他进程
  2. vmstat 输出的换入换出列下全是 0

但我仍然看到 Swap 和 RAM 都被“free -m”输出完全占用

顶部输出

Mem:  16413804k total, 16390264k used,    23540k free,    59604k buffers
Swap:  2040244k total,  2040244k used,        0k free,   584688k cached

PID USER        PR  NI  VIRT  RES  SHR S %CPU %MEM    TIME+     COMMAND                                                                                                                                                                         
10984 mysql     15   0 3100m 2.4g 5472 S    0 15.5   1129:44    mysqld                                                                                                                                                                          
12773 root      16   0 18440 7916 1064 S    0  0.0   65:46.67   IPremoted                                                                                                                                                                       
3108 ntp        16   0 18984 5720 4652 S    0  0.0   54:35.78   ntpd                                                                                                                                                                            
19694 root      16   0 48996 5708 3656 S    0  0.0   0:00.03    sshd                                                                                                                                                                            
11084 hpsmh     17   0  371m 3892 2532 S    0  0.0   0:00.00    hpsmhd                                                                                                                                                                          

free -m 输出

    total  used    free   shared   buffers   cached
Mem:16029  15983   46     0        52        546
-/+ buffers/cache:      
               15384   644
Swap:1992  1992    0

vmstat 输出

 swap usage
 si   so    
 0    0
 0    0
 0    0
 0    0
 0    0
 0    0
 0    0

有人能解释一下这个案例吗?

提前感谢。

【问题讨论】:

  • 对于具有高 i/o 活动的系统,这些统计数据看起来很正常。你到底想解释什么?我认为这是ServerFault 相关问题。
  • Alex,Mysql 正在使用 15% 的 RAM,并且没有其他进程占用大量 RAM。那为什么我看到 RAM 和 SWAP 都被填满了?
  • @Alex,我使用“Top”和“Shit M”来按内存使用量的降序查看进程。
  • 看这个问题What is active memory and inactive memory。这有助于理解为什么交换可能已满,但当前未使用。
  • 亚历克斯,感谢您的链接。但我看到活动内存下只有 2.7 GB。以及一些 440 MB 的非活动内存。剩下的呢??在这种情况下(RAM 为 15 GB)。我在 top 或 vmstat -a 中看不到它的任何痕迹。

标签: linux memory-management swap ram


【解决方案1】:

首先在使用下面的脚本时,你会发现哪个进程正在使用交换空间。

#!/bin/bash
# Get current swap usage for all running processes
# Erik Ljungstrom 27/05/2011
SUM=0
OVERALL=0
for DIR in `find /proc/ -maxdepth 1 -type d | egrep "^/proc/[0-9]"` ; do
PID=`echo $DIR | cut -d / -f 3`
PROGNAME=`ps -p $PID -o comm --no-headers`
for SWAP in `grep Swap $DIR/smaps 2>/dev/null| awk '{ print $2 }'`
do
let SUM=$SUM+$SWAP
done
echo "PID=$PID - Swap used: $SUM - ($PROGNAME )"
let OVERALL=$OVERALL+$SUM
SUM=0

done
echo "Overall swap used: $OVERALL"

然后执行以下操作 交换 -a 一旦交换清除然后 交换-a

谢谢 -阿伦

【讨论】:

    【解决方案2】:

    交换在这里不是问题。但是使用超过一半 RAM 的东西是。

    Swap 充满了完全无用的数据,因此您还有 2 GB 的 RAM 来处理重要的事情。对你有益!我怎么知道交换内容没用?好吧,si 为零。没有进程愿意将其读回内存。

    现在的问题是:

    • 16 GB 总 RAM
    • 减去 3 GB 左右由所有进程使用(我猜你正确排序了顶部输出)
    • 减 644 MB 用于缓存/缓冲区/免费
    • 剩余的 12 GB 被什么使用?内核或一些平板或共享内存或其他一些匿名页面。诡异的。我会仔细检查/proc/meminfo 以找出原因。

    也不要按照 cmets 中的建议查看非活动内存统计信息。 It's useless.

    【讨论】:

      猜你喜欢
      • 2017-09-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-02-15
      • 1970-01-01
      相关资源
      最近更新 更多