我正在使用slicehost.com 256MB 主机托管我的网站。
不幸的是,它几乎一直在交换。当我在控制台中输入时,free
我得到了如下信息:
total used free shared buffers cached
Mem: 251140 228968 22172 0 596 17356
-/+ buffers/cache: 211016 40124
Swap: 524284 60944 463340
如果我reboot
使用服务器,交换会停止一会儿然后重新开始。
我怎么能够:
1)找出哪些过程/功能导致交换
2)如何修复此问题
3)确定 256MB 是否太少,是时候升级而不是优化了
谢谢
// 使用 CakePHP/apache
答案1
1)尝试并ps aux
观察/proc/$pid/status
/proc/$pid/smaps
2)添加更多内存。
3)考虑到您当前的负载,256MB 显然太少了。
答案2
你使用 Apache 吗?
如果是,请执行以下操作:
- 打开 top (只需在终端上输入 top 即可)
- 按 Shift M 键按内存消耗排序
- 在 RES 列中,你可以看到你的 Apache 实例预留了多少内存
假设每个进程消耗 20 Mb。
然后,做一个简单的数学运算。为 SO 留出 156Mb,然后将另外 100 除以一个 Apache 消耗的内存量:100/20 = 5
这将告诉你可以同时拥有多少个 Apache 进程。
然后,转到你的 apache 配置(/etc/apache2)并在主配置文件中找到以下设置: - StartServers - ServerLimit - MaxClients
并将它们全部设置为 5。
请记住,256 对于 Apache 设置来说太小了。我不会在内存少于 2Gb 的情况下运行 Apache。
答案3
为了诊断谁在战斗,我建议安装在顶上。Atop 将向您显示进程级别的更改。为了快速演示,我让 MySQL 使用它可用的所有内存,然后处理一些大文件,强制将 MySQL 内存换出,以便缓存我的大型测试文件。下面的屏幕截图显示了 MySQL 尝试从交换中读回内存(图像而不是文本,以便您可以看到突出显示)。
当 MySQL 尝试访问已交换的内容时,请注意 majflt 和 minflt 数字。您还可以查看其他内存统计信息,以及您希望从 top、ps 等获取的任何信息。{apt-get,yum} 安装于顶部。
答案4
您可以降低 swappiness,首先使用以下方法检查当前值cat /proc/sys/vm/swappiness然后改变值sysctl -w vm.swappiness=10
另外,你可以随时使用以下命令禁用交换:sudo swapoff 一个 或者编辑 /etc/fstab
如今我很少使用交换,即使在像您这样的小型虚拟机中也是如此。