为什么MySQL服务器使用交换空间即使有足够的RAM来映射页面?

时间:2014-02-28 09:02:35

标签: mysql linux unix memory-management

我们正在使用MySQL 5.1.72版本

$ free
             total       used       free     shared    buffers     cached
Mem:         16027      14171       1856          0        584       3303
-/+ buffers/cache:      10283       5744
Swap:         2047       1274        772

上面的输出显示了昨天(27-feb-2014)在备份之前的sesrver上的内存详细信息。 可以看到已经使用了超过一半的交换空间(大约1.3 GB),只剩下700 MB。 由于数学很少,我们可以得出结论,盒子上剩下大约5GB或物理RAM。 14171-(584 + 3303)= 10283使用的实际RAM。

现在总RAM - 实际使用的RAM = 16027-10283 = 5744 MB 问题是,当有足够的RAM来映射页面时,MySQL服务器正在使用SWAP。

3 个答案:

答案 0 :(得分:1)

无论是否使用交换是操作系统的决定,MySQL在这里无关。 检查你的内核swappiness标志http://en.wikipedia.org/wiki/Swappiness

答案 1 :(得分:0)

即使现在RAM在服务器上是免费的,但是如果任何时间服务器由于任何原因使用交换,例如繁重的查询/流量等等,那么一段时间后你的普通RAM将被释放但交换将不会释放,所以你需要重启你的服务器可以自由交换。

注意:即使现在你的RAM是免费的,但由于服务器已被交换,因此服务器操作将因此而减慢,因此需要清除交换使用。

答案 2 :(得分:0)

如上所述,OS虚拟内存算法控制从内存交换哪个页面以及从物理内存分配哪个页面。您给出的上述输出显示系统上的早期状态。恕我直言,它耗尽了内存,操作系统不得不使用虚拟内存的交换区域,但从那时起就没有重新分配它们。要确定某个进程使用的内存,可以使用“ ps ”命令查看它。例如,请查看我的系统上所有 bash 进程的内存分配详细信息:

 $ ps -C bash -o comm,pid,vsz,rsz,cmd
COMMAND           PID    VSZ   RSZ CMD
bash             2007  20572  3216 /bin/bash
bash             2055  20552  3180 /bin/bash
bash             2103  20556  3192 /bin/bash
bash             4640  21388  4100 /bin/bash
bash             4688  20784  3492 /bin/bash
bash             8200  20608  2984 -bash

在上面的输出中,' RSZ '列显示了任务使用了多少非交换物理内存。 ' VSZ '显示分配任务的虚拟内存大小,即物理内存和交换内存(如果有)。值以KiB(千字节)表示。现在您可以计算,但考虑共享内存页面,这在上面的输出中没有显示。

有关详情,请参阅ps男子。