我有一个具有 8GB 内存的网络服务器,并且正在运行一个非常密集的 php 站点(1 个站点),该站点可以进行文件操作、绘图、电子邮件、论坛,等等。环境远非静态,这让我相信在 ram 中缓存任何东西几乎没有什么好处,因为几乎每个对服务器的请求都会创建新的或更新的页面。很多缓存是在客户端完成的,所以当涉及到图像、javascript、css 时,我们有大量的 304 请求。
此外,我确实有语言文件被写入服务器上的平面文件,其中缓存的 ram 绝对是好的,而不是从磁盘读取。但是这样的文件屈指可数。
在大约两周内,我从拥有 98% 的空闲内存变成了 4% 的空闲内存。这发生在我们还将几个大型 svn 更新推送到服务器的时候。
我的问题是,如果我使用以下命令定期清除缓存(我知道 Linus Torvalds 对缓存的感觉),我的服务器是否会得到更好的调整:
sync; echo 3 > /proc/sys/vm/drop_caches
Run Code Online (Sandbox Code Playgroud)
或者我最好编辑以下文件:
/proc/sys/vm/swappiness
Run Code Online (Sandbox Code Playgroud)
如果我用 30 替换默认值 60,我应该有更少的交换和更多的陈旧缓存重用。
看到使用第一个命令释放所有缓存确实感觉很好,但如果我告诉你这对桌面环境有好处,那我就是在骗你。但是像我上面描述的那样的网络服务器呢?想法?
编辑:我知道系统将根据需要从缓存中获取内存,但感谢您指出我们的清晰。当大部分服务器内存存储在缓存中时 Apache 会变慢,我是否在想象事情?那是完全不同的问题吗?
什么时候交换移回 Linux 中的物理内存?是否仅按需提供,即。什么时候需要?或者当计算机不处于高负载时,swap 是否缓慢转移到物理内存?
所以我得到了在 MDADM RAID5 中将较小的硬盘驱动器换成较大的硬盘驱动器的要点:
失败并移除一个驱动器。
mdadm -f /dev/md0 /dev/sdd1 mdadm -r /dev/md0 /dev/sdd1
关机,交换硬盘,分区并添加回阵列
mdadm --add /dev/md0 /dev/sdd1
等待重新同步并继续所有剩余的驱动器。
最后增长数组
mdadm --grow /dev/md0 --size=max
我的问题是你如何对新的更大的驱动器进行分区?我在网上看到了不同的说明,我知道它们中的大多数已经过时了,所以我想看看最近是否有人这样做了。
将新驱动器分区为与阵列中的旧驱动器大小相同
将新驱动器分区为驱动器的最大大小。
我有一个非常简单的设置,4 个驱动器,每个 RAID5 350GB。我在每个驱动器上只有一个分区并构建了一个阵列。这是一个数据存档磁盘,因此不需要多个阵列或分区。
我正在考虑的另一种方法是备份到一个驱动器,构建一个 3 驱动器阵列,将备份驱动器添加到阵列。那是:
这样更安全吗?快点?想法?
当 Linux 开始交换时,您基本上注定要失败。很快系统将不再对任何输入做出反应,但很高兴地切换到几天结束......
您能想出一个包含所有进程的命令,从而(并且同时)允许您打开一个干净的 shell,在那里您可以检查问题的根源并杀死占用所有内存的进程?(我想这并不容易,因为由于内存可能已完全填满,您需要换出更多内存以收集打开外壳的空间,另一方面,必须停止所有其他交换过程。)
如果您将这样的命令绑定到一个热键,那么也许您可以将其用作紧急按钮,从而为您节省很多时间。如果这可能的话,有什么想法吗?以前有人尝试过这样的事情吗?如果有人能意识到这一点,那将是一个很酷的功能:)
我正在为我的网站使用 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
Run Code Online (Sandbox Code Playgroud)
如果我reboot
是服务器,交换会停止一点,然后重新开始。
我怎样才能:
1)找出哪些进程/功能导致交换
2)如何解决问题
3) 弄清楚 256MB 是否太小,是升级而不是优化的时间
谢谢
// 使用 CakePHP/apache