ИТ Блог. Администрирование серверов на основе Linux (Ubuntu, Debian, CentOS, openSUSE)

Управление и оптимизация памяти в Linux

Управление и оптимизация памяти в Linux

Большинство производственных серверов в настоящее время работают под управлением Linux — будь то Debian, Ubuntu или Centos – благодаря универсальности операционной системы и тому факту, что она бесплатна в использовании. Linux обладает широким спектром инструментов для поддержки, управления, мониторинга и развертывания программных приложений.

Сервисы и функции, добавленные в приложение продукта, могут потреблять значительный объем памяти. Оптимизация памяти для серверов Linux не только обеспечивает более плавную и быструю работу приложений, но и снижает риск потери данных и сбоев сервера. В этой статье мы рассмотрим несколько способов оптимизации памяти в Linux.

Чтобы оптимизировать память для машин с Linux, нам сначала нужно понять, как работает память в Linux. Мы начнем с некоторых терминов памяти, обсудим, как Linux обрабатывает память, а затем узнаем, как устранять неполадки с памятью и предотвращать их.

 

Объем памяти

Общий объем памяти, который может содержать одна машина, зависит от архитектуры операционной системы. Например, операционная система с 32-разрядной архитектурой может поддерживать только 4 ГБ памяти, в то время как 64-разрядная может поддерживать около 128 ГБ (теоретически, она может поддерживать до 16 ГБ, если возможности оборудования улучшатся).

 

Виртуальная память

Вся память в Linux называется виртуальной памятью — она включает физическую память (часто называемую ОЗУ) и пространство подкачки. Физическая память системы не может быть увеличена, если мы не добавим больше ОЗУ. Однако виртуальную память можно увеличить, используя пространство подкачки с жесткого диска.

 

Физическая память

Оперативная память определяет, может ли ваша машина обрабатывать процессы, требующие большого объема памяти. Например, нам потребуется не менее 1 ГБ оперативной памяти на 1000 ресурсов, использующих MongoDB на производственном сервере. Чтобы обеспечить удовлетворительную производительность сервера, физическая память должна превышать то, что требуется базе данных — в противном случае MongoDB начнет использовать вместо нее память подкачки, снижая производительность системы. Причина этого заключается в том, что физическая память доступна за наносекунды, но подкачка памяти осуществляется только в течение миллисекунд.

 

Подкачка памяти

Обычно физическая память обеспечивает хранение данных для всех процессов в компьютере. Но что происходит, когда физическая память заполнена? В игру вступает память подкачки.

Когда система заполнится, неактивные страницы в памяти будут перемещены в память подкачки, состоящую из раздела подкачки, файла подкачки или того и другого. Раздел подкачки – это раздел диска, тогда как файл подкачки – это файловая система. Использование того или другого варианта зависит от предпочтений, поскольку оба они допустимы.

 

Дисковая память

Дисковая память, или память жесткого диска, часто больше физической памяти. Во время вычислений данные для выполняемых в данный момент задач хранятся в оперативной памяти; при отключении питания компьютера эти данные исчезают. Вот почему важно часто сохранять рабочую память — в памяти диска сохраняются постоянные данные.

 

Поток использования памяти в Linux

Ниже приведена блок-схема, демонстрирующая, как обрабатываются данные в Linux.

Данные от пользователя, компьютерных процессов и жесткого диска отправляются в ОЗУ. При необходимости ОЗУ сохранит и отправит их обратно пользователю или жесткому диску. Если данные должны быть постоянными, оперативная память отправит их в центральный процессор.

 

Команды для управления памятью Linux

Для обнаружения проблем с памятью и оптимизации памяти в Linux нам понадобится один из нескольких инструментов.

 

Обнаружение оборудования на компьютере

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

dmidecode может помочь получить информацию об оборудовании системы при проверке на наличие аппаратных проблем. Инструмент dmidecode помогает отобразить BIOS вашего системного управления в содержимом таблицы.

Например, запустите

dmidecode

 

Здесь будет показана приведенная ниже информация о памяти.

Проверьте доступное свободное пространство

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

free -g

 

Рис. 2: dmidecode отображает информацию об аппаратном обеспечении системы

Рис. 1: dmidecode отображает информацию об аппаратном обеспечении системы

 

Здесь будет показано свободное пространство памяти в ГБ.

Рис. 3: Информация о свободном пространстве памяти на компьютере

Рис. 2: Информация о свободном пространстве памяти на компьютере

Проверьте загрузку процессора и памяти

Существует множество инструментов командной строки для проверки загрузки процессора и памяти, включая htop, vmstat, и ps.

htop отображает информацию о процессах процессора в режиме реального времени.

Рис. 4: htop, показывающий информацию о текущих запущенных процессах в режиме реального времени

Рис. 3: htop, показывающий информацию о текущих запущенных процессах в режиме реального времени

 

vmstat показывает информацию о процессоре, памяти, системных процессах, подкачке, прерываниях и планировании процессора.

Например, запустите

vmstat -a -S M

 

Здесь будет показана информация о памяти в МБ.

Рис. 5: Информация о памяти в МБ

Рис. 4: Информация о памяти в МБ

 

ps предоставляет нам информацию о запущенных процессах в Linux.

Например, ps -aux показывает все запущенные процессы.

Рис. 5: Информация о памяти в МБ

Рис. 5: Информация о памяти в МБ

 

Процессы, потребляющие много памяти в Linux

Сервер Linux может потреблять значительный объем памяти по разным причинам. Для быстрого и эффективного устранения неполадок сначала нам нужно исключить наиболее вероятные причины.

Java-процесс

Существует несколько приложений, реализованных с использованием Java, и их неправильная реализация или конфигурация может привести к высокому использованию памяти на сервере. Две наиболее распространенные причины – неправильная конфигурация кэширования и антишаблон кэширования сеанса.

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

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

При работе с базами данных в Java сеанс гибернации обычно используется для создания соединений и управления сеансом между сервером и базой данных. Но есть ошибка, которая часто возникает, когда разработчики работают с сеансами гибернации. Сеанс гибернации не изолирован в целях потокобезопасности, а включен в тот же HTTP-сеанс. Это заставляет приложение хранить больше состояний, чем необходимо, и при наличии всего нескольких пользователей использование памяти значительно увеличивается.

База данных

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

Возьмем за основу базу данных MySQL: для достижения высокой производительности в ней применяется механизм буферизации для кэширования и индексации данных. Если мы настроим базу данных на максимальное использование памяти при нескольких запросах к базе данных, память на нашем сервере Linux вскоре будет перегружена.

Amazon EC2 взломан для криптомайнинга

При использовании Amazon EC2 следует обращать внимание на конфигурацию компьютера. Поступали сообщения о вредоносном ПО, использующем уязвимые экземпляры Amazon EC2 для криптомайнинга. Когда это происходит, мы часто наблюдаем значительный всплеск использования памяти и зависание системы.

Перегрузка памяти

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

 

Рекомендации и дальнейшие шаги

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

Создайте раздел подкачки

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

Создание ramdisk

Оперативный диск используется для кэширования приложений или рабочих областей. Это энергозависимое хранилище, определенное в пределах оперативной памяти. Использование ramdisk повышает производительность обработки файлов: по сравнению с твердотельными накопителями (SSD) ramdisk работает более чем в 50 раз быстрее. Создание ramdisk полезно, когда у вас есть сервер приложений, для запуска которого требуется значительное количество аппаратных ресурсов.

Защита открытых портов

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

Если вы столкнулись с вредоносной атакой, такой как попытка криптомайнинга, дважды проверьте как входящие— так и исходящие порты – и, опять же, открывайте только те порты, которые вам нужны. Далее вам необходимо удалить crontab из ваших инстансов, поскольку вредоносная программа создала crontab для запуска заданий майнинга.

Отключите или остановите неиспользуемые службы

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

 

Заключение

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

Exit mobile version