我有一台小型家用服务器,内存为 256MB。我的一个网站刚刚链接到 Reddit,由于系统使用过多内存并崩溃,我不得不手动重启,这种情况已经发生过两次。有时我的物理内存使用率会上升到危险的 90%,我的 mysql 和 apache 服务分别消耗大约 100MB。我怀疑发生的原因是大量访问者涌入,系统在将一些内存移到交换空间(我有大约 750MB)之前使用了过多内存。这个问题真的会发生吗?唯一的解决方案是获得更多内存吗?我听说过 Linux 中有一个可交换性设置可能会被搞乱,也许这会有所帮助。
有什么建议吗?这个问题很烦人。
答案1
不要浪费时间进行优化,只需添加 1 GB 内存。256 已经是运行 Web 和 mysql 服务器的最低端。
我非常确定您需要手动重置,因为系统正在大量使用交换空间。请记住,交换空间用于将长时间运行的空闲进程移至磁盘空间。当您很快再次需要内存时,这非常糟糕,这被称为“交换空间浪费”。网络服务器永远不应使用交换空间。数据库可能更适合使用交换空间,因为它有内部缓冲区处理功能。
所以是的,除了增加约 20 美元来增加内存(或花费大量时间优化程序)之外,没有其他办法。
答案2
运行 free -m Linux 将使用所有可用内存和缓存。如果出现问题,Free 将告诉您。
例子
free -m
total used free shared buffers cached
Mem: 6035 5954 80 0 69 4401
-/+ buffers/cache: 1483 4552
Swap: 4722 0 4722
仅 80meg 可用,但其中大部分用于缓存设置,以缓存来自磁盘的文件访问。如果您的交换线路有内存使用,那么您确实需要更多内存。
答案3
是的,您需要更多的内存来应对这种情况。
你也可以创建一个交换文件来帮助机器平稳运行,直到你安装更多的内存。这不是解决办法,从交换文件运行是慢的- 但它应该可以防止机器因内存不足而崩溃,这种情况会更糟糕。
例如,制作并使用 2GB (2M * 1K) 的交换文件:
dd if=/dev/zero of=/swapfile bs=1K count=2M mkswap /交换文件 swapon/swap文件
如果您希望它在重启后仍然有效,还请将交换文件添加到 /etc/fstab。
当不再需要交换文件时,请记得将其 swapoff 并删除,以恢复使用的磁盘空间。
答案4
如果您被 digg/redit 的大量访问量压垮,一个选择就是对您的网站进行 2 级深度抓取,并创建前几页的纯 HTML 副本。这将允许它为访问该网站的大多数用户提供 HTML 服务,而不会触及数据库。