为什么我经常出现此“无法分配内存”错误?


29

我正在使用带有Gnome-Classic的Ubuntu 12.10。我经常在几乎所有大小的程序中都遇到此错误。当我尝试打开它们时,它们没有启动,而是显示一条错误消息“” Could not launch 'Program' - Failed to fork child process (Cannot allocate memory)。直到最近几周,这才成为问题。

无法分配内存

我无法识别导致此错误的程序之间的任何共性。这似乎只是时间问题。我的计算机运行了一段时间(从一天到几天)后,我似乎无法启动任何新程序。

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

为什么会出现此错误,我该怎么做才能阻止它发生?


我运行了GRUB菜单中可用的memtest,它没有报告任何错误,因此我不认为这是硬件故障。

我也跑了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面板或其小程序上。这是我运行的小程序:

面板小程序

小程序是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
mythbuntu@192.168.0.4:/home/mythbuntu  437G  360G   55G  87% /home/dave/Mythbuntu
$ sudo du -csh /var/log
15M /var/log
15M total

好的,我在下面的回答中附加了一些“后续步骤”。
Leland Kristie

你跑了memtest多久?错误通常仅在以后的测试中显示。
guntbert

@guntbert:我放手memtest,直到屏幕底部显示一条消息,说所有测试均已完成。
提问者

好的,我在答案下面再加上了一些“下一步”。
Leland Kristie

1
@AlistairBuxton:嗯……七个小时后,随着时间/日期小程序重新出现在面板上,内存似乎没有增加。但是,与众不同的是没有天气显示。在时间/日期小程序中,有一个显示天气的选项,但是即使我选择了它,也不会显示天气图标。这似乎很奇怪,并且可以确认该问题与时间/日期/天气应用程序中的天气功能特别相关。
提问者

Answers:


33

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

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

我已经将输出添加到命令中到我的问题。开始出现错误后,我捕获了此输出。
提问者

问题很可能出在您使用的一种不常用的指示器上,例如,左侧看起来像圆锯片的指示器或天气指示器。依次删除其中的每一个,看看是否能解决问题。
jdthood

原来是天气指示器。请参阅OP自己的答案。
jdthood

19

我建议您通过使用GRUB引导菜单中提供的内置实用工具测试RAM来开始故障排除过程,并消除引起问题的“ RAM错误”。

记忆测试 记忆测试

Memtest86 + Memtest86 +

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

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

利兰


嗨,戴夫,

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

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

显示可用和已用内存量

自由-m

显示交换使用情况摘要

交换子-s

显示用户进程资源限制

ulimit -a

以下屏幕截图来自全新安装的10.04LTS。第一个黄色圆圈项目和第二个黄色圆圈项目要注意的细节在“已使用”列中,该列显示了可供操作系统使用的内存和交换空间,即它们并没有全部用尽。

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

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

利兰

内存使用情况和进程资源限制


嗨,戴夫,

ps返回的结果--sort -rss -eo rss,pid,command | 前往您发布秀使用的内存大约1.8GB,这似乎有点不寻常的GNOME面板的过程-这似乎是一个大量内存的桌面环境使用。

您可以通过运行下面的屏幕快照中的带圆圈的命令,了解gnome-panel进程正在使用的内存的详细信息,并查看运行情况-这可能表明有些突出之处。

为了进行比较,我的虚拟机上的gnome-panel进程正在使用48MB的RAM-虽然,这些屏幕截图中的10.04机器是我仅用于测试而不是我自己的台式机的虚拟机。

gnome-panel过程中的pmap

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

要对此进行测试,请尝试安装可在Ubuntu软件中心找到的KDE等离子工作区。

kde-plasma桌面环境

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

简而言之,您将能够像在Gnome环境中一样在KDE环境中运行相同的CLI“测试”,并能够比较检查两者之间的计算机行为的结果。

在KDE中,您要查找的控制台应用程序是xterm,可以从主菜单上的“搜索”对话框中找到它。

等离子台式机的xterm pid和pmap

我将在这里放一点信心,说我认为我们共同在隔离问题上走上了正确的轨道。

利兰


感谢您的回应。我同时运行了memtest和apt-get您建议的命令,但均未报告任何错误。我已经相应地更新了我的问题。
提问者

我在问题中附加了您要求的命令输出。我唯一要注意的是,max user processes它下面的内容并不unlimited像您所说的那样。我的有号码31421
提问者

1
嗨,戴夫,给您一个简短的通知,我将在周末之前与您再次进行跟进。我的日间工作使我忙于晚上,所以我以为只是在这里给您一个礼貌的贴子,让您知道我还没有消失。Leland
Leland Kristie

哦,顺便说一句,我尝试将最大用户进程设置一直更改为1024,但无法以这种方式重现错误...想想我曾尝试过。
Leland Kristie

我已经安装了KDE桌面,但是我正在等待直到再次开始看到错误,然后我将运行pmap命令并将该输出发布到此处。我也做了一些搜索,发现在gnome面板中提到了一些内存泄漏,因此这似乎是一个可疑的地方。
提问者

3

在尝试了过去几天的开机和关机后,我有信心现在说这个问题是时间和日期小程序中天气指示器部分的内存泄漏。当显示天气时,内存使用量会随着时间增加。天气不显示时,内存不会增加。

我想这是应该报告的天气指示器错误,但是报告Launchpad上的错误对我来说太复杂了。


打开计算机上的终端,然后运行“ apport-bug”,它将索取信息并为您提交错误报告。
jdthood

2
@jdthood:这就是应该多么容易的理论。现实情况是,选项的第一个屏幕没有描述我的问题,而“其他”选项只是告诉我我需要一个程序包名称,然后退出。与类似。
提问者

在浏览器中打开bugs.launchpad.net/ubuntu/+source/indicator-weather,单击“报告错误”,然后按照指示进行操作。一旦知道分配给报告的编号,请运行“ apport-collect <bugnumber>”以上传有关受影响计算机的相关信息。
jdthood

1

如果将Ruby on Rails与Digital Ocean结合使用时遇到此问题,则可能是因为您的RAM太少了。尝试将RAM从512MB提升到1GB,这对我来说是固定的。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.