我们正在使用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。
答案 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
男子。