为什么我经常收到“无法分配内存”错误?

为什么我经常收到“无法分配内存”错误?

我使用的是 Ubuntu 12.10 和 Gnome-Classic。我经常遇到这个错误,几乎所有程序,无论大小。当我尝试打开它们时,它们无法启动,而是收到一条错误消息Could not launch 'Program' - Failed to fork child process (Cannot allocate memory)。直到最近几周才出现这个问题。

无法分配内存

我无法辨别导致此错误的程序之间的共同点。这似乎更多的是时间问题。我的电脑运行了一段时间后,从一天到几天不等,我似乎无法启动任何新程序。

我知道的避免此错误的唯一方法是重新启动计算机。

为什么我会收到此错误?我该怎么做才能阻止它发生?


我运行了 GRUB 菜单中的内存测试,它没有报告任何错误,所以我不认为这是硬件故障。

我也运行了sudo apt-get check,没有发现任何错误。

以下是一些请求的命令行输出:

$ free -m
             total       used       free     shared    buffers     cached
Mem:          3945       3753        191          0        181        475
-/+ buffers/cache:       3096        848
Swap:         3813         60       3753

$ swapon -s
Filename                Type        Size    Used    Priority
/dev/sda6                               partition   3905532 61648   -1

$ ulimit -a
core file size          (blocks, -c) 0
data seg size           (kbytes, -d) unlimited
scheduling priority             (-e) 0
file size               (blocks, -f) unlimited
pending signals                 (-i) 31421
max locked memory       (kbytes, -l) 64
max memory size         (kbytes, -m) unlimited
open files                      (-n) 1024
pipe size            (512 bytes, -p) 8
POSIX message queues     (bytes, -q) 819200
real-time priority              (-r) 0
stack size              (kbytes, -s) 8192
cpu time               (seconds, -t) unlimited
max user processes              (-u) 31421
virtual memory          (kbytes, -v) unlimited
file locks                      (-x) unlimited

ps --sort -rss -eo rss,pid,command | head这是错误开始出现后的输出:

$ ps --sort -rss -eo rss,pid,command | head
  RSS   PID COMMAND
1963400 2953 gnome-panel
155496 4029 banshee /usr/lib/banshee/Banshee.exe --redirect-log --play-enqueued
104944 15765 /opt/google/chrome/chrome --type=renderer --lang=en-US --force-fieldtrials=ForceCompositingMode/disable/GlobalSdch/global_enable_sdch/InfiniteCache/No/OmniboxDisallowInlineHQP/Standard/OmniboxHUPCreateShorterMatch/Standard/OmniboxHUPCullRedirects/Standard/OmniboxSearchSuggestTrialStarted2012Q4/2/OneClickSignIn/Standard/Prerender/PrerenderEnabled/SBInterstitial/V2/SpdyCwnd/cwndMin10/SpeculativePrefetching/Disabled/Test0PercentDefault/group_01/UMA-Dynamic-Binary-Uniformity-Trial/default/UMA-Session-Randomized-Uniformity-Trial-5-Percent/default/UMA-Uniformity-Trial-1-Percent/group_09/UMA-Uniformity-Trial-10-Percent/group_08/UMA-Uniformity-Trial-20-Percent/group_03/UMA-Uniformity-Trial-5-Percent/group_06/UMA-Uniformity-Trial-50-Percent/group_01/WarmSocketImpact/last_accessed_socket/ --enable-crash-reporter=ECE9000094D279FD3B14B35A74BF72CC,Ubuntu 12.10 --renderer-print-preview --disable-accelerated-2d-canvas --disable-accelerated-video-decode --channel=15654.5.89177240
78164 15654 /opt/google/chrome/chrome       
74912 19890 /usr/bin/python /usr/share/oneconf/oneconf-service
65476 12419 /usr/bin/perl /usr/bin/shutter
61096 19626 /usr/bin/python3.2 /usr/sbin/aptd
57832 15708 /opt/google/chrome/chrome --type=renderer --lang=en-US --force-fieldtrials=ForceCompositingMode/disable/GlobalSdch/global_enable_sdch/InfiniteCache/No/OmniboxDisallowInlineHQP/Standard/OmniboxHUPCreateShorterMatch/Standard/OmniboxHUPCullRedirects/Standard/OmniboxSearchSuggestTrialStarted2012Q4/2/OneClickSignIn/Standard/Prerender/PrerenderEnabled/SBInterstitial/V2/SpdyCwnd/cwndMin10/SpeculativePrefetching/Disabled/Test0PercentDefault/group_01/UMA-Dynamic-Binary-Uniformity-Trial/default/UMA-Session-Randomized-Uniformity-Trial-5-Percent/default/UMA-Uniformity-Trial-1-Percent/group_09/UMA-Uniformity-Trial-10-Percent/group_08/UMA-Uniformity-Trial-20-Percent/group_03/UMA-Uniformity-Trial-5-Percent/group_06/UMA-Uniformity-Trial-50-Percent/group_01/WarmSocketImpact/last_accessed_socket/ --enable-crash-reporter=ECE9000094D279FD3B14B35A74BF72CC,Ubuntu 12.10 --extension-process --renderer-print-preview --disable-accelerated-2d-canvas --disable-accelerated-video-decode --channel=15654.2.1555888673
42108  3030 /var/lib/dropbox/.dropbox-dist/dropbox

根据评论和答案中的建议,问题可能出在 Gnome Panel 或其小程序上。以下是我正在运行的小程序:

面板小程序

这些小程序包括Indicator Applet 12.10.1System Monitor 3.5.92和“通知区域”以及“日期和时间”,我都无法访问它们的版本号。

以下是一些请求的命令行输出:

$ df -h
Filesystem                             Size  Used Avail Use% Mounted on
/dev/sda5                               19G   12G  6.4G  64% /
udev                                   2.0G  4.0K  2.0G   1% /dev
tmpfs                                  790M  1.1M  789M   1% /run
none                                   5.0M     0  5.0M   0% /run/lock
none                                   2.0G   84K  2.0G   1% /run/shm
none                                   100M     0  100M   0% /run/user
/dev/sda7                              384G  306G   59G  84% /home
[email protected]:/home/mythbuntu  437G  360G   55G  87% /home/dave/Mythbuntu
$ sudo du -csh /var/log
15M /var/log
15M total

答案1

某个进程正在泄漏内存。要了解这可能是哪个进程,请运行

ps --sort -rss -eo rss,pid,command | head

答案2

我建议您通过使用 GRUB 启动菜单中提供的内置实用程序测试 RAM 来开始故障排除过程,并排除“坏 RAM”作为问题的根源。

记忆测试 记忆测试

Memtest86+ Memtest86+

接下来,使用以下命令从终端检查系统中是否存在损坏的依赖项sudo apt-get 检查如果发现错误,请重新运行以下命令sudo apt-get check -f并尝试去改正它们。

如果您愿意,请尝试这些步骤并在此报告结果。

利兰


嗨,戴夫,

好的,我们已经排除了硬件作为问题的根源。

接下来,让我们检查计算机上的内存使用情况和进程设置;从终端提示符运行以下命令:

显示可用和已用内存量

免费-m

显示交换使用情况摘要

swapon-s

显示用户进程资源限制

ulimit -a

下面的截图是 10.04LTS 的全新安装。需要注意的是第一和第二个黄色圆圈项目的细节在“已用”列中,该列显示操作系统可用的内存和交换空间,也就是说,它们还没有全部用完。

底部黄色圆圈的项目显示操作系统允许用户运行的用户进程数量没有限制,例如 gFTP 或其他应用程序。

如果您愿意,请尝试这些步骤并在此报告结果。

利兰

内存使用和进程资源限制


嗨,戴夫,

返回的结果来自ps --sort -rss -eo rss,pid,命令| head您已发布显示 gnome-panel 进程使用了​​大约 1.8GB 的​​内存,这看起来有点不寻常 - 对于桌面环境来说,这似乎是很多内存的使用。

你可以得到内存的细分gnome 面板通过运行下面屏幕截图中圈出的命令来查看进程的使用情况,并查看它的去向 - 这可能会揭示一些引人注目的东西。

相比之下,gnome 面板我的虚拟机上的进程使用了​​ 48MB 的 RAM - 不过,这些屏幕截图中的 10.04 机器是我用于测试的虚拟机,而不是我自己的桌面。

来自 gnome-panel 进程的 pmap

鉴于此,我提出下一步是将问题隔离到 Gnome 桌面环境中的“某些东西”。

为了测试这一点,请尝试安装您可以在 Ubuntu 软件中心找到的 KDE plasma 工作区。

kde-plasma 桌面环境

安装完成后,重新启动计算机并使用 KDE 会话而不是 Gnome 登录,尽可能地运行您的应用程序(桌面完全不同)以查看“无法分配内存”错误是否在这里重复出现。

简单地说,您将能够在 KDE 环境中运行与我们在 Gnome 环境中所做的相同的 CLI“测试”,并能够比较两者之间检查计算机行为的结果。

在 KDE 中,您要寻找的控制台应用程序是终端您可以在主菜单上的搜索对话框中找到它。

用于 plasma-desktop 的 xterm pid 和 pmap

在这里我要充满信心地说,我认为我们在解决问题的道路上走在了正确的道路上。

利兰

答案3

在过去几天尝试打开和关闭它之后,我现在可以肯定地说,问题出在时间和日期小程序的天气指示器部分中。当显示天气时,内存使用量会随着时间的推移而增加。当不显示天气时,内存不会增加。

我猜想这是一个需要报告的天气指示器错误,但在 Launchpad 上报告错误的过程对我来说太复杂了。

答案4

如果你在使用 Ruby on Rails 时遇到此问题数字海洋这可能是因为您的 RAM 太少。尝试将 RAM 从 512MB 增加到 1GB,这为我解决了这个问题。

相关内容