在 Ubuntu 服务器上运行任何命令都会返回“无法分配内存”

Dav*_*ave 20 server reboot bash memory-usage ram

我正在使用 Ubuntu 14.04。最近,当我使用具有 sudo 权限的用户通过 SSH 登录时,我运行的每个命令都会导致“无法分配内存”错误。这是我在控制台上尝试过的一些

myuser@mymachine:~$ whoami
-bash: fork: Cannot allocate memory
myuser@mymachine:~$ uname -a
-bash: fork: Cannot allocate memory
Run Code Online (Sandbox Code Playgroud)

即使我尝试sudo reboot now我也会收到上述错误,所以我不知道我还能尝试什么来解锁我的实例。如果重要的话,主机是 DigitalOcean。

编辑:根据此处给出的答案/建议是“免费”的输出

myuser@mymachine:~$ free
-bash: fork: Cannot allocate memory
Run Code Online (Sandbox Code Playgroud)

The*_*Odd 17

解决方案

正如错误消息中所说,您的机器内存不足。这可能有多种原因,但基本上,某些东西正在耗尽您的所有内存,甚至没有留下任何用于基本命令使用的内存。

我建议您重新启动您的 Droplet(只需转到您的客户端控制面板并选择“重新启动”),ssh然后运行tophtop。密切关注内存使用情况,看看是哪个进程占用了所有内存。从那里,尝试

  1. 杀死/删除错误的程序/进程

    警告请首先研究该进程是否是必不可少的系统进程!如果一个系统进程导致内存问题,不要只是杀死它,研究它并寻找处理它的具体方法。
  2. 更改该程序/进程的配置,使其不会占用您的所有内存。

防止问题再次发生的建议

  • 最好的办法是添加交换内存,因为如果你用完了它会分配更多的内存。
  • 无论何时安装程序,请确保正确配置它们,以免它们以意外方式运行(例如占用内存)
  • 每次添加包或配置任​​何新内容后,检查htoptop查看当前程序使用了多少内存。如果您注意到几乎所有的东西都在使用,请尝试通过浏览和删除不必要的程序/进程来清除一些。
  • 如果有任何您不认识或不希望自动启动的自动启动(当然除了系统进程!),请将其删除!但是在杀死/删除进程之前,请务必研究它是什么,因为它对于启动过程或系统功能等可能是必不可少的。


小智 12

要在不重启的情况下摆脱这种情况,您可以手动触发OOM 杀手,如下所示:

echo 1 > /proc/sys/kernel/sysrq
echo f > /proc/sysrq-trigger
echo 0 > /proc/sys/kernel/sysrq
Run Code Online (Sandbox Code Playgroud)

参考