Почему я часто получаю эту ошибку "Не удается выделить память"?

Я использую Ubuntu 12.10 с Gnome-Classic. Я получаю эту ошибку часто и почти со всеми программами, большими и маленькими. Когда я пытаюсь их открыть, они не запускаются, и вместо этого я получаю сообщение об ошибке, в котором говорится Could not launch 'Program' - Failed to fork child process (Cannot allocate memory). Это не было проблемой до последних нескольких недель.

cannot allocate memory

Я не могу разглядеть никакой общности между программами, вызывающими эту ошибку. Похоже, это скорее вопрос времени. После того, как мой компьютер работает некоторое время, от одного дня до нескольких дней, я, похоже, не могу запускать какие-либо новые программы.

Единственный известный мне способ предотвратить эту ошибку - перезагрузить компьютер.

Почему я получаю эту ошибку и что мне сделать, чтобы это не произошло?


Я запустил memtest, доступный из меню GRUB, и он не сообщает об ошибках, поэтому я не думаю, что это аппаратный сбой.

Я тоже побежал sudo apt-get check, и никаких ошибок обнаружено не было.

Вот некоторые запрошенные выходные данные командной строки:

$ free -m             total       used       free     shared    buffers     cachedMem:          3945       3753        191          0        181        475-/+ buffers/cache:       3096        848Swap:         3813         60       3753$ swapon -sFilename                Type        Size    Used    Priority/dev/sda6                               partition   3905532 61648   -1$ ulimit -acore file size          (blocks, -c) 0data seg size           (kbytes, -d) unlimitedscheduling priority             (-e) 0file size               (blocks, -f) unlimitedpending signals                 (-i) 31421max locked memory       (kbytes, -l) 64max memory size         (kbytes, -m) unlimitedopen files                      (-n) 1024pipe size            (512 bytes, -p) 8POSIX message queues     (bytes, -q) 819200real-time priority              (-r) 0stack size              (kbytes, -s) 8192cpu time               (seconds, -t) unlimitedmax user processes              (-u) 31421virtual memory          (kbytes, -v) unlimitedfile locks                      (-x) unlimited

Это результат работы ps --sort -rss -eo rss,pid,command | head после того, как ошибка начнет появляться:

$ ps --sort -rss -eo rss,pid,command | head  RSS   PID COMMAND1963400 2953 gnome-panel155496 4029 banshee /usr/lib/banshee/Banshee.exe --redirect-log --play-enqueued104944 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.8917724078164 15654 /opt/google/chrome/chrome       74912 19890 /usr/bin/python /usr/share/oneconf/oneconf-service65476 12419 /usr/bin/perl /usr/bin/shutter61096 19626 /usr/bin/python3.2 /usr/sbin/aptd57832 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.155588867342108  3030 /var/lib/dropbox/.dropbox-dist/dropbox

Основываясь на предложениях в комментариях и ответах, представляется возможным, что проблема связана с панелью Gnome или ее апплетами. Вот апплеты, которые я запустил:

Panel applets

Апплеты являются Indicator Applet 12.10.1, System Monitor 3.5.92, и "Область уведомлений". и "дата и время", ни для одного из которых я не могу получить доступ к номеру версии.

Вот еще несколько запрошенных выходных данных командной строки:

$ df -hFilesystem                             Size  Used Avail Use% Mounted on/dev/sda5                               19G   12G  6.4G  64% /udev                                   2.0G  4.0K  2.0G   1% /devtmpfs                                  790M  1.1M  789M   1% /runnone                                   5.0M     0  5.0M   0% /run/locknone                                   2.0G   84K  2.0G   1% /run/shmnone                                   100M     0  100M   0% /run/user/dev/sda7                              384G  306G   59G  84% /homemythbuntu@192.168.0.4:/home/mythbuntu  437G  360G   55G  87% /home/dave/Mythbuntu$ sudo du -csh /var/log15M /var/log15M total

Какой-то процесс приводит к утечке памяти. Чтобы получить представление о том, какой это может быть процесс, запустите

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

Я предлагаю вам начать процесс устранения неполадок, протестировав оперативную память с помощью встроенной утилиты, представленной в меню загрузки GRUB, и устранив "плохую оперативную память" как источник проблемы.

Тест памятиMemory test

Memtest86+Memtest86+

Затем проверьте свою систему на наличие нарушенных зависимостей от терминала с sudo apt-проверка получения и, если будут обнаружены ошибки, повторно запустите команду как sudo apt-get check -f чтобы попытаться исправить их.

Если вы, пожалуйста, попробуйте выполнить эти действия и сообщите здесь о любых результатах.

Лиланд


Привет, Дэйв,

Хорошо, тогда мы исключили аппаратное обеспечение как источник проблемы.

Далее давайте рассмотрим использование памяти и настройки процесса на вашем компьютере; выполните эти команды из командной строки терминала:

Отображение объема свободной и используемой памяти

свободный -м

Отображение сводки об использовании подкачки

свапон -с

Отображение ограничений ресурсов пользовательского процесса

улимит -а

Скриншот ниже взят из чистой установки 10.04LTS. Сведения, на которые следует обратить внимание из первого и второго пунктов, обведенных желтым кружком, находятся в столбце "используется", в котором отображаются память и пространство подкачки, доступные для использования операционной системой, т.е. они не все израсходованы.

Нижний элемент, обведенный желтым кружком, не содержит ограничений на количество пользовательских процессов, например, gFTP или других приложений, которые операционная система разрешит пользователю запускать.

Если вы, пожалуйста, попробуйте выполнить эти действия и сообщите здесь о любых результатах.

Лиланд

Memory usage and process resource limits


Привет, Дэйв,

Результаты, возвращенные из ps --sort -rss -eo rss,pid,command | head вы опубликовали сообщение, показывающее процесс панели gnome, использующий примерно 1,8 ГБ памяти, что кажется немного необычным - похоже, что для среды рабочего стола используется слишком много памяти.

Вы можете получить разбивку памяти по gnome-панель процесс используется, выполнив команды, обведенные кружком на скриншоте ниже, и посмотрите, к чему все идет - это может выявить что-то, что выделяется.

Для сравнения, в gnome-панель процесс на моей виртуальной машине использует 48 МБ оперативной памяти - хотя, конечно, машина 10.04 на этих скриншотах - это виртуальная машина, которую я использую только для тестов, а не для моего собственного рабочего стола.

pmap from gnome-panel process

Учитывая это, я предложу следующий шаг - изолировать проблему от "чего-то" в среде рабочего стола Gnome.

Чтобы проверить это, попробуйте установить KDE plasma workspace, который вы найдете в Центре программного обеспечения Ubuntu.

kde-plasma desktop environment

Как только он будет установлен, перезагрузите компьютер и войдите в систему с помощью сеанса KDE вместо Gnome, запустите свои приложения как можно лучше (рабочий стол совершенно другой), чтобы увидеть, повторяется ли здесь ошибка "Не удается выделить память".

Просто для ясности, вы сможете запускать те же "тесты" CLI в среде KDE, что и мы в среде Gnome, и сможете сравнивать результаты при изучении поведения компьютера между ними.

В KDE консольное приложение, которое вы будете искать, - это xterm который вы можете найти в диалоговом окне поиска в главном меню.

xterm pid and pmap for plasma-desktop

Я собираюсь добавить немного уверенности и сказать, что, по-моему, мы коллективно находимся на правильном пути к изоляции проблемы.

Лиланд

После экспериментов с его включением и выключением в течение последних нескольких дней я теперь с уверенностью могу сказать, что проблема заключалась в утечке памяти в части индикатора погоды апплета времени и даты. Когда отображается погода, использование памяти со временем увеличивается. Когда погода не отображается, объем памяти не увеличивается.

Я предполагаю, что это ошибка с индикатором погоды, о которой следует сообщить, но сообщать об ошибках на панели запуска - слишком сложный процесс для меня.

Если у вас возникла эта проблема при использовании Ruby on Rails с Цифровой океан вероятно, это потому, что у вас слишком мало оперативной памяти. Попробуйте увеличить объем оперативной памяти с 512 МБ до 1 ГБ, это исправило это для меня.

@AlistairBuxton: Хммм … через семь часов, когда апплет времени / даты вернулся на панель, объем памяти, похоже, не увеличился. Однако одно отличие заключается в том, что здесь нет отображения погоды. В апплете time/date есть опция отображения погоды, но, несмотря на то, что она выбрана, значок погоды не отображается. Что кажется странным и может подтвердить, что проблема конкретно связана с функциями погоды в приложении time / date / weather.

Хотя похоже, что gnome-panel выделил необычный объем памяти, я не думаю, что это является прямой причиной проблемы - у вас все еще есть много свободного места подкачки и даже немного памяти, используемой для кэша. Какой-то другой ресурс должен быть исчерпан, и высокое использование памяти - это просто память, используемая при выделении этого ресурса. Скорее всего, слишком много открытых файлов или слишком много дочерних процессов. Также может быть заполнен диск, вызванный неконтролируемым протоколированием ошибок.

@AlistairBuxton: Спасибо за ваши комментарии. Насколько я знаю, у меня есть последние обновления для всего. Я проверяю наличие обновлений каждую ночь. Кроме этого, я открыт для других предложений, которые вы предлагаете, но я не знаю, как сузить ни одно из них, поэтому, если у вас есть какие-либо конкретные предложения о том, как действовать дальше, это было бы полезно.

@AlistairBuxton: Дополнительное примечание, я не знаю, что такое “не глухой апплет”. Что у меня есть, так это “Сеанс апплета индикатора 12.10.1”, дата и время (я думаю, что это по умолчанию, похоже, у него нет опции “О программе”), “Апплет индикатора 12.10.1”, “Системный монитор 3.5.92” и “Область уведомлений”, в которой также нет опции “О программе”. Опция “О программе”, поэтому я не знаю ее версии.