21 марта 2018

Утечка памяти в оболочке GNOME Shell

Я пользуюсь Ubuntu в течении 9-ти лет, начиная с Ubuntu 9.04, после перехода с Windows на Linux. Мне нравится эта система, что бы не говорили злопыхатели Ubuntu. Так вот, в Ubuntu 9.04 использовалась оболочка Gnome 2 до Ubuntu 10.10 включительно. Самый лучший и стабильный дистрибутив с оболочкой Gnome 2, по-моему мнению и не только, это был дистрибутив Ubuntu 10.04 LTS, который мог работать даже на маломощных машинах. Затем разработчики окружения Gnome в 2011 году решили создать более современную оболочку (как им казалось) - Gnome 3. Компания Canonical - основатель Ubuntu, к тому времени задумались создать конвергентную систему, которая работала бы, как на компьютерах, так и на сматрфонах и планшетах. Для этого они создали свою оболчку - Unity. Но после 7-ми лет стараний, проект решили "свернуть" и вновь перейти с Unity на Gnome. Начиная с Ubuntu 17.10 разработчики дистрибутива теперь используют оболочку GNOME Shell (GNOME 3) по умолчанию.

Оболочка GNOME Shell не самая лёгкая, а скорее одна из самых тяжелых/ёмких оболочек систем Linux. Поэтому Ubuntu теперь выпускается только в 64-битном варианте, т.к. на компьютерах с малым объёмом оперативной памяти до 2 ГБ ОЗУ (32-bit), система будет работать очень медленно или попросту будет "тормозить".

Чтобы было понятней о чём идёт речь, давайте разберёмся, что такое оперативная память (ОЗУ) и для чего она служит.
Операти́вная па́мять (англ. Random Access Memory, RAM, память с произвольным доступом) или операти́вное запомина́ющее устро́йство (ОЗУ), операти́вка — энергозависимая часть системы компьютерной памяти, в которой во время работы компьютера хранится выполняемый машинный код (программы), а также входные, выходные и промежуточные данные, обрабатываемые процессором. По-простому, в оперативную память компьютера подгружаются все демоны системы (Демон — это фоновый процесс, который выполняет системную задачу. В полном соответствии с господствующим в UNIX принципом модульности, демоны являются программами, а не частями ядра. Многие демоны запускаются во время начальной загрузки системы и продолжают работать все время, пока система включена. Остальные демоны запускаются при необходимости и работают столько, сколько предусмотрено их функциями.), а также программы включенные в автозагрузку, поэтому после входа в систему некоторая часть ОЗУ компьютера уже используется системой.

По мере работы за компьютером мы открываем ту или иную программу и все эти программы подгружаются в оперативную память. Особое место в потреблении ОЗУ занимают такие программы, как браузеры, где мы открываем страницу за страницей и все они загружаются в оперативную память, увеличивая её потребление. А также такие ёмкие программы, как GIMP (аналог Fotoshop), программы работающие с изображениями/фотографиями и т.д. Чем больше открыто одновременно программ, тем больше происходит потребление оперативы. Для этого в системах создаётся дополнительно, так называемый файл подкачки ОЗУ - swapfile. В Ubuntu 17.10/18.04 он равен 2 ГБ (независимо от величины ОЗУ компьютера) на случай нехватки оперативной памяти компьютера для нормальной работы. Все приложения и демоны системы подгружаются в оперативную память и работают только на время текущего сеанса. После выключения или перезагрузки компьютера, ОЗУ освобождается, сбрасывается автоматически.

На моём компьютере установлена для тестирования разрабатываемая система Ubuntu 18.04, естественно с оболочкой GNOME Shell. В процессе работы в системе я стал замечать, что после нескольких открытий меню приложений увеличивалось потребление оперативной памяти (ОЗУ) без возможности восстановления, хотя после закрытия меню приложений оперативная память должна восстанавливаться. Иными словами, если после открытия и занрытия меню приложений, потребление памяти увеличивается без восстановления, то значит происходит, так называемая утечка памяти, что не зер гут для работы системы.

Ниже я предлагаю снимки моего Conky с параметрами работающей системы Ubuntu 18.04.

Ubuntu 18.0 на старте.


Ubuntu 18.0 сразу после нескольких включений/выключений меню программ после старта.


Как видно на снимке, потребление оперативной памяти увеличилось и не восстановилось, хотя помимо нескольких открытий меню программ, память должна восстановиться, а это значит произошла утечка памяти.
Я грешил на то, что дистрибутив разрабатываемый и могут встречаться различные ошибки, но сегодня наткнулся в сети на статью об утечки памяти в GNOME Shell (не только в Ubuntu, но и в Fedore, и др. дистрибутивах, где по умолчанию используется оболочка GNOME Shell): https://www.omgubuntu.co.uk

Оказывается разработчики оболочки не могут понять почему происходит утечка памяти и озабочены этой проблемой, но пока не нашли решение. Единственно, что советуют в данном случае для освобождения памяти, как временное решение, если вы работаете продолжительное время за компьютером, это периодически делать перезагрузку оболочки. Оболочка GNOME Shell перезагружается очень просто, без закрытия работающих программ. Нажмите сочетание клавиш Alt+F2, введите в открывшееся окно "Введите команду" латинскую букву r и нажмите клавишу Ввод (Enter).

Я последовал данному совету и после перезагрузки оболочки утечка памяти была ликвидирована.


Заключение.

Будем надеяться, разработчики оболочки в скором времени найдут решение данной проблемы.

  P.S. Если у вас появились вопросы по данной статье, обсудить их можно на нашем форуме:
http://compizomania.54672.x6.nabble.com/GNOME-Shell-td6318.html

Удачи.