当前位置: 首页>>技术教程>>正文


ram – 为什么我经常出现此“Cannot allocate memory”错误?

, ,

问题描述

我正在将Ubuntu 12.10与Gnome-Classic一起使用。我经常在几乎所有大小的程序中都遇到此错误。当我尝试打开它们时,它们没有启动,而是显示一条错误消息,提示您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和”notification Area”。和“日期和时间”,我都无法访问其版本号。

这是一些更多要求的命令行输出:

$ 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

最佳方案

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

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

次佳方案

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

memory 测试

Memtest86 +

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

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

利兰


嗨,戴夫,

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

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

显示可用和已用内存量

自由-m

显示交换使用情况摘要

交换子-s

显示user-process资源限制

ulimit -a

以下屏幕截图来自全新安装的10.04LTS。第一和第二个yellow-circled项目要注意的细节在”used”列中,该列显示操作系统可用的内存和交换空间,即它们并没有全部用完。

底部的yellow-circled项对操作系统允许用户运行的user-processes的数量(例如gFTP或其他应用程序)不显示任何限制。

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

利兰


嗨,戴夫,

从ps –sort -rss -eo rss,pid,command返回的结果|您发布的标题显示gnome-panel进程使用大约1.8GB的内存,这似乎有点不寻常-桌面环境要使用的内存似乎很大。

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

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

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

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

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

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

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

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

利兰

第三种方案

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

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

参考资料

本文由Ubuntu问答整理, 博文地址: https://ubuntuqa.com/article/8689.html,未经允许,请勿转载。