free -m
这是生产数据库(带有机器的 MySQL)的输出。83MB 看起来很糟糕,但我认为将使用缓冲区/缓存而不是交换?
[admin@db1 www]$ free -m
total used free shared buffers cached
Mem: 16053 15970 83 0 122 5343
-/+ buffers/cache: 10504 5549
Swap: 2047 0 2047
top
按内存排序的输出:
top - 10:51:35 up 140 days, 7:58, 1 user, load average: 2.01, 1.47, 1.23
Tasks: 129 total, 1 running, 128 sleeping, 0 stopped, 0 zombie
Cpu(s): 6.5%us, 1.2%sy, 0.0%ni, 60.2%id, 31.5%wa, 0.2%hi, 0.5%si, 0.0%st
Mem: 16439060k total, 16353940k used, 85120k free, 122056k buffers
Swap: 2096472k total, 104k used, 2096368k free, 5461160k cached
PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
20757 mysql 15 0 10.2g 9.7g 5440 S 29.0 61.6 28588:24 mysqld
16610 root 15 0 184m 18m 4340 S 0.0 0.1 0:32.89 sysshepd
9394 root 15 0 154m 8336 4244 S 0.0 0.1 0:12.20 snmpd
17481 ntp 15 0 23416 5044 3916 S 0.0 0.0 0:02.32 ntpd
2000 root 5 -10 12652 4464 3184 S 0.0 0.0 0:00.00 iscsid
8768 root 15 0 90164 3376 2644 S 0.0 0.0 0:00.01 sshd
答案1
您应该查看的行是:
-/+ buffers/cache: 10504 5549
这表明在 16GB 的机器上可以释放的内存超过 5GB。或者,您可以进行计算,将第一行中的可用内存 + 缓冲区 + 缓存加起来,得到大致相同的数字,但计算起来很难,所以如果它就在下一行,那又何必费心呢。
答案2
是的,系统使用缓冲区来加速 I/O 操作(例如,通过缓存文件读取)。如果需要,这些内存将自动释放。
您的交换内存未被使用,这是一个好兆头(系统从来不需要超过可用的物理内存)。
答案3
Linux 已成功利用了几乎所有内存,几乎没有浪费。这并不意味着今天少用 2GB,明天就可以多用 2GB。