我正在使用 Ubuntu 14.04。最近,当我使用具有 sudo 权限的用户通过 SSH 登录时,我运行的每个命令都会导致“无法分配内存”错误。这是我在控制台上尝试过的一些
myuser@mymachine:~$ whoami
-bash: fork: Cannot allocate memory
myuser@mymachine:~$ uname -a
-bash: fork: Cannot allocate memory
即使我尝试sudo reboot now
我得到上述错误,所以我不知道我还能尝试解锁我的实例。如果重要的话,主机是 DigitalOcean。
编辑:根据这里给出的答案/建议是“免费”的输出
myuser@mymachine:~$ free
-bash: fork: Cannot allocate memory
解决方案
正如错误消息中所说,您的机器内存不足。这可能有多种原因,但基本上,有些东西正在耗尽你所有的内存,甚至没有留下任何用于基本命令使用的东西。
我建议您重新启动您的 Droplet(只需转到您的客户端控制面板并选择“重新启动”),
ssh
然后运行top
或htop
. 密切关注内存使用情况,看看哪个进程正在使用所有内存。从那里尝试警告:请首先研究该进程是否是必要的系统进程!如果系统进程导致内存问题,不要只是杀死它,要研究它并寻找处理它的具体方法。
防止问题再次发生的建议
htop
或top
查看当前程序使用了多少内存。如果您注意到您几乎使用了所有这些,请尝试通过检查并删除不必要的程序/进程来清除一些。要在不重新启动的情况下摆脱这种情况,您可以手动触发OOM 杀手,如下所示:
参考
在完成已接受的答案时,还需要考虑一件事:您的系统可能会用完文件句柄甚至套接字缓冲区,并且仍然有大量内存,同时给出相同的错误。如果共享主机施加了这种性质的限制,则尤其如此。在 OpenVZ 系统上,观看
这将在最右边的列中为您提供第一个超限。如果这是真的,要么转移到更大的托管包,要么寻找最可能的罪魁祸首:mysql 或 mariadb 数据库,如果存在缺陷的 PHP 应用程序,它们可能会每秒泄漏数百个文件句柄。
如果您的网络服务器对互联网开放 ssh 并接受用户名/密码登录,也可能会发生这种情况:即使您运行了 fail2ban,您也可能吸引了分布式字典中断尝试,这也消耗了大量资源。
请按照以下步骤操作: