Увеличение памяти на сервере
Подсистема оперативной памяти - важнейшая составляющая, от которой зависит производительность сервера и его эффективность. В иерархии хранения оперативная память стоит на втором месте после внутренних кэшей процессоров как по скорости, так и по стоимости хранения единицы информации.
Неэффективное ее использование существенно влияет на производительность, а значит – на отдачу от вложенных средств как на этапе покупки сервера, так и во время всего срока его эксплуатации.
Понятно, что подсистема оперативной памяти просчитывается еще на этапе принятия решения о покупке сервера. Но подчас загодя предсказать ее необходимый объем проблематично. К тому же, объем и состав программного обеспечения, устанавливаемый на сервер, может существенно измениться уже при вводе его в эксплуатацию, не говоря уже об изменениях во времени.
Ревизия и перестройка подсистемы должны проводиться регулярно, поскольку эти мероприятия позволят сохранять эффективность эксплуатации системы. Они могут потребоваться при изменении нагрузки на сервер в результате:
- изначальных ошибок в оценке необходимых ресурсов;
- повышения объема выполняемых компанией задач в результате роста;
- повышения требований к аппаратным ресурсам при обновлении установленного программного обеспечения;
- ввода новых инструментов, функций или расширении спектра услуг в компании
Основные характеристики подсистемы памяти.
Ряд характеристик необходимо учитывать как при проектировании будущего сервера, так и при его перестройке – апгрейде или восстановлении (ремонте).
Объем оперативной памяти
Сверху объем оперативной памяти сервера ограничен количеством слотов DIMM в системе и максимальным объемом одного модуля того типа, который поддерживается процессорами системы. Снизу – только финансовыми возможностями компании.
В идеале – общий объем оперативной памяти при штатной загрузке системы не должен быть занят более, чем на 75%. Отдельные пики загрузки, если они непродолжительны, не существенно повлияют на производительность. Низкая загруженность системы говорит о неэффективно вложенных средствах. А полная занятость оперативной памяти приводит к процессам вытеснения задач ( swap ), связанных с переносом части данных из оперативной памяти в дисковую и обратно за счет файлов подкачки – что кардинально снижает производительность сервера.
Уровень занятости физической оперативной памяти можно проверить различными встроенными в операционную систему мониторами производительности. Важно! Рассматривать необходимо именно физическую память, без учета файлов подкачки
Тип модулей
Тип модулей DIMM , поддерживаемых системой, жестко определяется типом установленных в сервер процессоров и описан в инструкции по эксплуатации или на сайте производителя. Это касается как собственно типа – DDR 3, DDR 4, буферизации модулей - буферизованная, регистровая, и системы исправления ошибок – ECC
Отдельный класс модулей памяти – LR DIMM , 3DS LRDIMM. Это модули повышенной емкости с оптимизированной за счет внутренних регистров нагрузкой на шину памяти. Так как внутренняя структура модулей этого типа существенно отличается от обычной RDIMM, одновременная установка DIMM разного типа в системе невозможна. Ни в каких сочетаниях.
Тактовая частота шины
Тактовая частота модулей памяти DIMM должна соответствовать максимальной частоте шины, поддерживаемой встроенным в процессор контроллером памяти – то есть, тоже определяется используемым процессором.
В серии Xeon E 5 младший процессор Xeon E 5 v 4 – E 5-2609 v 4 поддерживает частоты шины 1600/1866 МГц, средний E 5-2630 v 4 - 1600/1866/2133 МГц, а более старшие, например E 5-2650 v 4 - 1600/1866/2133/2400 МГц
В серии Xeon Scalable : Bronze 3104 и 3106 поддерживает частоту 2133 МГц, Silver 4108 и 4110 - 2400 МГц, Gold 6130 – 2666 МГц.
В конфигурациях 2 модуля на канал (2 DPC ) и 3 модуля на канал (3 DPC ) серверов на процессорах Xeon E 5 с каждым добавлением DIMM в канал, на ступень уменьшается частота шины. Соответственно, если в канале процессора, поддерживающего шину 2400 МГц установлен 1 DIMM , он работает на полной частоте. Добавляем модуль в тот же канал – они работают на частоте 2133 МГц. Добавляем третий – канал настраивается на частоту 1866 МГц
Процессоры Xeon Scalable позволяют устанавливать до двух модулей DIMM на канал, снижения частоты шины при этом не происходит.
Модули DIMM с частотой большей, чем тактовая частота шины, установленная процессором, могут корректно работать в системе, но не наоборот.
Конфигурация - расположение модулей DIMM в слотах
Особенности работы контроллера (или контроллеров) памяти процессора приводят к тому, что число и карта расположения модулей DIMM в конкретных слотах сервера может сильно повлиять на его производительность. Несбалансированная конфигурация может иметь только 16% от потенциальной пропускной способности шины памяти. И добиться такого ухудшения характеристик можно довольно легко – лишь установив модуль DIMM в соседний слот, или добавив пару модулей в попытке расширить оперативную память и – тем самым – увеличить производительность. Такая существенная разница получается за счет технологии чередования, которую в правильной конфигурации удается реализовать процессору, а в несбалансированной системе – нет. О балансировке памяти смотрите дополнительные материалы.
Ранки
Данные по шине памяти передаются в единицах из 64 бит для всех типов DIMM. Это особенность технологии памяти DDR-SDRAM. Область памяти этой ширины трансформируется на группу чипов DRAM внутри DIMM - каждый отдельный чип отвечает за выдачу или 4 или 8 бит (обозначается как x4 или x8 в кодировке чипа). Такая группа чипов называется ранком. Существуют DIMM с 1, 2 или 4 ранками. DIMM максимальной емкостм - это модули с 4 ранками, но спецификация DDR4 допускает только 8 ранков на канал памяти. Процессор может организовать чередование по ранкам наряду с чередованием по каналам, контроллерам и т.д. (*)
Структуры x4 или x8 модулей DIMM по-разному задействованы в системе обнаружения и исправления ошибок памяти ECC. Именно по этой причине RDIMM типа x4 нельзя смешивать с RDIMM типа x8.
Напряжение питания
Напряжение питания модулей DIMM задано в описании системы/материнской платы. Для современных модулей обычно составляет 1,2 В.
Смешивание модулей с разными характеристиками в одной системе
Какие-то параметры модулей DIMM позволяют смешивать их в одной системе / канале памяти, какие-то - жестко нет.
Например, установка модулей одного типа с разной тактовой частотой допустимо, но при этом все модули будут работать на частоте самого медленного.
Корректное расположение модулей одного типа разной емкости не приведет к снижению производительности
Сочетание модулей с различным количеством ранков при правильной их установке допустимо
Свод правил
В системе должен быть установлен хотя бы один модуль DIMM . Даже в 2-процессорной системе.
Совместимость
- Все модули DIMMдолжны быть одного типа - DDR4 регистровые с коррекцией ошибок ECC
- Модули небуферизованной памяти (Unbuffered DIMM, UDIMM) не поддерживаются
- Смешивание RDIMM, LRDIMM, 3DS LRDIMM в одной системе недопустимо – они не совместимы между собой. Ни в одном канале, ни на одном процессоре, ни на разных процессорах – никак.
- Установка модулей разных производителей корректна. Важно – чтобы характеристики модулей были совместимы.
- RDIMMс организацией x4 и x8 несовместимы.
- Смешивание DIMM с разным количеством ранков в пределах одного канала допустимо
- Ограничение по числу логических ранков
- Процессоры Intel Xeon E5 v3, v4
- XeonE5 v3, v4 поддерживает до 8 ранков на канал, не превышайте это значение. Если необходима установка 3 модулей на канал (3DPC), модули должны быть 1- или 2-ранковыми.
- Поскольку LRDIMM буферизуется, четырехранковый LRDIMM представляется процессору как двухранковый DIMM - что позволяет устанавливать 3шт LRDIMM на канал не превышая ограничение по ранкам.
- Процессоры Xeon Scalable
- Так как процессоры Xeon Scalable позволяют устанавливать только до 2 модулей на канал, ограничение по ранкам для них снято.
Производительность
- Последовательно заполняйте банки памяти без пропусков.
- Распределение по каналам памяти.
- Процессоры Intel Xeon E5 v3, v4. Процессоры Xeon E5 нижнего диапазона - процессоры Intel Xeon E5 v3 с менее чем 10 ядрами и процессоры E5 v4 с менее чем 12 ядрами имеют только один контроллер памяти. В них все четыре канала памяти подключены к одному контроллеру. В более производительных процессорах встроено два контроллера памяти, каждый из которых управляет двумя каналами.
- Старайтесь распределить модули памяти так, чтобы задействовать все каналы памяти процессора (4). Каждый канал дает 25% общей полосы пропускания подсистемы памяти. При этом, избегайте несбалансированных конфигураций. (*)
- Процессоры Xeon Scalable. Процессоры Xeon Scalable имеют 2 встроенных контроллера памяти, каждый из них управляет 3 каналами (всего 6).
- Старайтесь распределить модули памяти так, чтобы задействовать все каналы памяти процессора Scalable (6). При этом, избегайте несбалансированных конфигураций. (*)
- Процессоры Intel Xeon E5 v3, v4
- Для получения максимальной производительности, устанавливайте память в сервер наборами по 4 идентичных модуля на один процессор– таким образом в полной мере будут задействованы все каналы памяти и максимально эффективно использовано чередование. (*)
- Процессоры Xeon Scalable
- Для получения максимальной производительности, устанавливайте память в сервер наборами по 6 идентичных модулей на один процессор– таким образом в полной мере будут задействованы все каналы памяти и максимально эффективно использовано чередование. (*)
(*) Про балансировку и чередование памяти в системах с различными процессорами читайте следующие статьи :
Настройки потребления ресурсов в PHP скриптах можно установить в главном конфигурационном файле php.ini, а также в самих скриптах.
В файле php.ini за это отвечают директивы из раздела Resource Limits (ограничение потребления ресурсов).
Как увеличить память для PHP скриптов
Для этого в файле php.ini найдите и отредактируйте директиву:
Эта директива задаёт максимальное время в секундах, в течение которого скрипт должен полностью загрузиться. Если этого не происходит, парсер завершает работу скрипта. Этот механизм помогает предотвратить зависание сервера из-за плохо написанного скрипта. По умолчанию на загрузку даётся 30 секунд. Если PHP запущен из командной строки, это значение по умолчанию равно 0.
На максимальное время выполнения не влияют системные вызовы, потоковые операции и т.п.
При работе в безопасном режиме эту настройку нельзя изменить функцией ini_set(). Если значение все же нужно изменить, надо либо выключить безопасный режим, либо изменить значение прямо в php.ini.
Веб-серверы обычно имеют свои настройки тайм-аута, по истечении которого сами завершают выполнение скрипта PHP. В Apache есть директива Timeout, в IIS есть функция CGI timeout. В обоих случаях по умолчанию установлено 300 секунд. Точные значения можно узнать из документации к веб-серверу.
Функция для увеличения и ограничения времени выполнения PHP
Функция set_time_limit ограничивает время выполнения скрипта.
Она задает время в секундах, в течение которого скрипт должен завершить работу. Если скрипт не успевает, вызывается фатальная ошибка. По умолчанию дается 30 секунд, либо время, записанное в настройке max_execution_time в php.ini (если такая настройка установлена).
При вызове set_time_limit() перезапускает счетчик с нуля. Другими словами, если тайм-аут изначально был 30 секунд, и через 25 секунд после запуска скрипта будет вызвана функция set_time_limit(20), то скрипт будет работать максимум 45 секунд.
- СЕКУНДЫ (максимальное время выполнения в секундах. Если задан ноль, время выполнения неограничено)
Возвращаемые значения: возвращает TRUE в случае успеха, иначе FALSE.
Внимание: эта функция не работает, если PHP работает в безопасном режиме. Обойти это ограничение можно только выключив безопасный режим или изменив значение настройки в php.ini.
Замечание: функция set_time_limit() и директива max_execution_time влияют на время выполнения только самого скрипта. Время, затраченное на различные действия вне скрипта, такие как системные вызовы функции system(), потоковые операции, запросы к базам данных и т.п. не включаются в расчет времени выполнения скрипта. Это не относится к системам Windows, где расчитывается абсолютное время выполнения.
Увеличение выделенной памяти для PHP скриптов
Директива в файле php.ini
задаёт максимальный объем памяти в байтах, который разрешается использовать скрипту. Это помогает предотвратить ситуацию, при которой плохо написанный скрипт съедает всю доступную память сервера. Для того, чтобы убрать ограничения, установите значение этой директивы в -1.
В версиях до PHP 5.2.1 для использования этой директивы, она должна была быть указана на этапе компиляции. Так, ваша строка конфигурации должна была включать: --enable-memory-limit. Эта опция компиляции была также необходима для использования функций memory_get_usage() и memory_get_peak_usage() до версии 5.2.1.
Если используется целое число, то значение измеряется байтами. Вы также можете использовать сокращённую запись.
Доступные опции: K (для килобайт), M (для мегабайт) и G (для гигабайт; доступна начиная с PHP 5.1.0); они регистронезависимы. Все остальное считается байтами. 1M равно одному мегабайту или 1048576 байтам. 1K равно одному килобайту или 1024 байтам. Эти сокращения вы можете использовать в php.ini и в функции ini_set(). Обратите внимание, что числовое значение приводится к типу integer; например, 0.5M интерпретируется как 0.
Увеличение времени парсинга данных из запроса.
Директива в файле php.ini
задаёт максимальное время в секундах, в течение которого скрипт должен разобрать все входные данные, переданные запросами вроде POST или GET. Это время измеряется от момента, когда PHP вызван на сервере до момента, когда скрипт начинает выполняться. Значение по умолчанию -1, что означает, что будет использоваться max_execution_time. Если установить равным 0, то ограничений по времени не будет.
При запуске в командной строке значение директивы установлено на -1 (неограниченно).
Увеличение глубины вложенности входных переменных
Директива в файле php.ini
задаёт максимальную глубину вложенности входных переменных (то есть $_GET, $_POST.). По умолчанию данная директива закомментирована.
Ограничение на количество входных переменных
Директива в файле php.ini
определяет, входных переменных может быть принято в одном запросе (ограничение накладывается на каждую из глобальных переменных $_GET, $_POST и $_COOKIE отдельно). Использование этой директивы снижает вероятность сбоев в случае атак с использованием хеш-коллизий. Если входных переменных больше, чем задано директивой, выбрасывается предупреждение E_WARNING, а все последующие переменные в запросе игнорируются. По умолчанию данная директива закомментирована.
Внимание: после внесения изменений в файл php.ini необходимо перезагрузить веб-сервер, чтобы изменения вступили в силу.
Проверка использование ресурсов
Функция getrusage получает информацию об использовании текущего ресурса.
Возвращаемые значения: возвращает ассоциативный массив, содержащий данные возвращённые из системного вызова. Имена элементов соответствуют документированным именам полей.
Пример использования getrusage():
Увеличение разрешённого размера файлов для загрузки на сервер
Кроме описанных ограничений на потребление непосредственных ресурсов веб-сервера, также имеются ограничения, которые оказывают косвенное воздействие на ресурсы: например, загрузка слишком большого файла на сервер может потребовать большого количества ресурсов для его обработки, либо привести к переполнению дискового хранилища сервера. Поэтому существуют дополнительные лимиты, включённые в другие разделы конфигурационного файла помимо Resource Limits.
В частности, директива
устанавливает максимальный размер закачиваемого файла.
Если используется целое число, значение измеряется байтами. Вы также можете использовать сокращённую запись, которая описана чуть выше.
Максимально допустимый размер данных, отправляемых методом POST
Методом пост могут отправляться как текстовые данные (например, при отправке комментария на сайт), так и файлы. Если вы увеличили значение upload_max_filesize чтобы иметь возможность загружать файлы большего размера на сайт, то также нужно увеличить и значение директивы:
Замечание: PHP разрешает сокращения значений байт, включая K (кило), M (мега) и G (гига). PHP автоматически преобразует все эти сокращения. Будьте осторожны с превышением диапазона 32-битных целых значений (если вы используете 32-битную версию), так как это приведёт к ошибке вашего скрипта.
Для полного снятия лимитов значение можно установить на 0.
Значение этой настройки игнорируется, если чтение данных POST отключено с помощью enable_post_data_reading.
Увеличение количества файлов, выгружаемых на сайт за один раз
устанавливает максимально разрешённое количество одновременно закачиваемых файлов. Начиная с PHP 5.3.4, пустые поля загрузки не рассматриваются этим ограничением.
Имеются ввиду не общее количество одновременно закачиваемых файлов, которые могут выполнять различные пользователи, а именно количество файлов за один запрос.
Качество и надежность DRAM сейчас важнее, чем когда-либо, в основном из-за растущего использования виртуализации серверов. Конечно, стоит отметить что модули RAM, по мнению многих IT-специалистов, являются одними из самых надёжных элементов сервера и выходят из строя последними. Виртуализация имеет много преимуществ, но она значительно увеличивает количество необходимой памяти в сервере для обеспечения оптимальной производительности максимального числа виртуальных машин. По данным HP за 5 лет с 2007 до 2011 средняя память, установленная на всех серверах HP ProLiant, выросла более чем на 500% — от 4 ГБ до более чем 30 ГБ на сервер.В настоящее время как облачный провайдер мы используем blade-серверы HP ProLiant BL460c Gen8 на шасси HPE BLADESYSTEM C7000 ENCLOSURE. Полностью QuickSpecs тут, обозначим лишь спецификацию RAM.
Standard (Preconfigured Models)
64GB (8 x 8GB) DDR3 1600MHz RDIMMs at 1.5V
64GB (4 x 16GB) DDR3 1866MHz RDIMMs at 1.5V
32GB (4 x 8GB) DDR3 1600MHz RDIMMs at 1.5V
32GB (2 x 16GB) DDR3 1866MHz RDIMMs at 1.5V
32GB (4 x 8GB) DDR3 1333MHz RDIMMs at 1.35V
32GB (2 x 16GB) DDR3 1600MHz RDIMMs at 1.35V
16GB (2 x 8GB) DDR3 1866MHz RDIMMs at 1.5V
16GB (4 x 4GB) DDR3 1333MHz RDIMMs at 1.35V
16GB (2 x 8GB) DDR3 1600MHz RDIMMs at 1.35VMaximum
(LRDIMM) 512GB (16 x 32GB) up to 1333MHz at 1.35V
(RDIMM) 256GB (16 x 16GB) up to 1866MHz at 1.5V
(RDIMM) 384GB (16 x 24GB) up to 1333MHz at 1.35V
(UDIMM) 128GB (16 x 8GB) up to 1600MHz at 1.5vЕсли требуется помощь, чтобы разобраться в обозначениях типов памяти и их различиях, рекомендуем полезную статью на Хабре.
Отметим, что в случае с использованием в оборудовании для облака, то есть в системах, требующих масштабируемости и отказоустойчивости в ущерб дешевизне, используется регистровая память c функцией коррекции ошибок (ECC RDIMM).
Чтобы повысить производительность нашей облачной среды в соответствии с растущими потребностями клиентов, мы приняли решение увеличить количество оперативной памяти в серверах до максимально возможных значений. Возник закономерный вопрос какую именно память купить? Начать подбор логично было со знакомства с предложением производителя сервера, что и было сделано.
В поисках лаконичного ответа был найден White paper от HP, точнее даже два, один 2011 года, а второй 2017. Что мы выделили для себя:
- HP не является производителем модулей RAM.
- Когда вы видите бренд HP Qualified Memory, это означает, что DRAM прошла серьёзную проверку качества и тестирование с используем проприетарных диагностических инструментов и специализированных диагностических тестов, чтобы обеспечить высокий уровень производительности и доступности серверов HP ProLiant.
HP-validated memory is tested so that it does not get too hot and forget your data. HP-validated memory is tested so that it does not cause the system to shut-down due to power overload.
Почему для сравнения мы выбрали оперативную память от Kingston?
- Каждый серверный модуль Kingston для конкретной системы должен пройти испытания на принудительный отказ. Эта уникальная процедура позволяет отбраковывать потенциально дефектные модули, не допуская их попадания в отгружаемые партии продукции. В том числе, присутствует проверка надёжности при разогреве. Полный список проверок качества здесь.
- Являясь долговременным членом Совета директоров JEDEC, Kingston Technology способствует созданию отраслевых стандартов для технологий изготовления памяти. Все модули памяти, выпускаемые компанией Kingston, отвечают требованиям JEDEC и основным техническим условиям, применяемым ведущими изготовителями полупроводниковых устройств.
- Техническая поддержка и тест-драйв. Есть официальное представительство в РФ (в отличии от Crucial, например), по запросу всегда есть необходимое количество плашек для отгрузки. Серверную память можно взять на тест-драйв и посмотреть, как она будет работать в реальных условиях на конкретном сервере.
- «Пожизненная» гарантия. Если модуль памяти откажет, его заменят по гарантии.
Что дала нам покупка модулей памяти Kingston? При значительном объёме закупки удалось серьёзно сократить бюджет на модернизацию. Нам не удалось выявить значимых отличий в проверке качества RAM от Kingston и HP. Не найдя оснований для того, чтобы оплатить почти в два раза больший счёт, мы выбрали модули Kingston. Это также позволило не перекладывать дополнительные издержки на потребителей наших услуг.
В этой статье мы не пытаемся обратить внимание на дороговизну комплектующих от HP. Более того, мы довольны использованием серверов HP ProLiant и HP BladeSystem. Для поддержки большого количества виртуальных машин на одном физическом сервере требуется больше памяти, больше подключений для хранилищ данных и больше сетевых подключений, поэтому, по нашему мнению, серверы HP, сертифицированные для VMware, являются одними из лучших платформ для виртуализации, так как они были построены «with virtualization in mind».
Сертификация VMware даёт нам возможность стабильного использования всеми опциями платформы виртуализации VMware, которые значительно повышают эффективность и надёжность работы всего облака:
Один из наиболее простых способов предотвратить ошибки нехватки памяти в приложениях — добавить пространство подкачки на сервер. В этом руководстве мы расскажем, как добавить файл подкачки на сервер Ubuntu 18.04.
Предупреждение: Хотя подкачка в целом рекомендуется для систем с использованием традиционных жестких дисков, ее использование с SSD-накопителями может со временем вызывать ухудшение аппаратного обеспечения. В связи с этим мы не рекомендуем использовать подкачку с DigitalOcean или с любым другим провайдером, использующим SSD-накопители. Использование подкачки может повлиять на надежность соответствующего аппаратного обеспечения у вас и ваших соседей. Настоящее руководство предоставляет справочные данные для пользователей, у которых в других местах имеются системы вращающихся дисков.
Если вам нужно повысить производительность сервера на DigitalOcean, рекомендуем обновить Droplet. Это приведет к лучшим результатам в целом и снизит вероятность создания проблем с аппаратным обеспечением, способных повлиять на ваши работы.
Что такое подкачка?
Область подкачки — раздел на жестком диске, отведенный для того, чтобы операционная система могла временно хранить данные, которые она больше не может удерживать в оперативной памяти. По сути, она дает возможность увеличить количество информации, которую сервер может сохранить в рабочей «памяти», с некоторыми оговорками. Область подкачки на жестком диске будет использоваться в основном тогда, когда в оперативной памяти больше нет достаточного места хранения данных для приложений.
Чтение и запись информации с диска намного медленнее, чем из оперативной памяти. Операционная система будет по-прежнему предпочитать работать с данными приложений в памяти, а подкачку использовать для более старых данных. Как правило, полезно перестраховываться и иметь область подкачки в качестве резерва на случай нехватки оперативной памяти, чтобы исключить ошибки памяти в системах без SSD.
Шаг 1 — Проверка информации о подкачке в системе
Сначала мы можем посмотреть, есть ли уже в системе область подкачки. Можно иметь несколько файлов или разделов подкачки, но обычно одного достаточно.
Можно узнать, сконфигурирована ли в системе подкачка, введя:
Если после этой команды ничего не появляется, в системе сейчас нет области подкачки.
Можно убедиться в отсутствии активной подкачки при помощи утилиты free :
В строке Swap видно, что в системе отсутствует активная подкачка.
Шаг 2 — Проверка свободного пространства в разделе жесткого диска
Перед созданием файла подкачки проверим текущее состояние диска, чтобы убедиться, что у нас достаточно места. Вводим:
В данном случае устройство с / в столбце Mounted on — наш диск. В данном примере у нас достаточно места (использовано только 1,4 Гбайт). Ваше использование, вероятно, будет другим.
Хотя существует много мнений относительно правильного размера области подкачки, на самом деле он зависит от ваших личных предпочтений и требований приложений. Обычно можно начать с объема, равного объему оперативной памяти в системе, или в два раза большего. Еще одно полезное общее правило — любое превышение 4 Гбайт для области подкачки, скорее всего, не нужно, если вы используете ее только для резервирования оперативной памяти.
Шаг 3 — Создание файла подкачки
Теперь, когда известно свободное место на жестком диске, можно создать файл подкачки в нашей файловой системе. Поместим файл под названием swapfile с необходимым для подкачки размером в корневую (/) директорию.
Лучше всего создавать файл подкачки при помощи программы fallocate . Эта команда мгновенно создает файл указанного размера.
Поскольку на сервере в нашем случае 1 Гбайт оперативной памяти, в этом руководстве создадим файл размером 1 Гбайт. Скорректируйте с учетом необходимости на вашем сервере:
Чтобы проверить правильность выделенного объема памяти, введите:
Файл создан с правильным выделенным объемом памяти.
Шаг 4 — Активация файла подкачки
Теперь, когда у нас есть файл правильного размера, нам нужно превратить его в пространство подкачки.
Сначала нужно изменить права доступа к файлу, чтобы только пользователи с правами root могли читать его содержимое. Это предотвращает доступ обычных пользователей к файлу — такой доступ может существенно влиять на безопасность.
Чтобы передать все права доступа пользователям root, введите:
Проверьте изменение прав доступа, введя следующее:
Теперь только у пользователя root отмечены флажки чтения и записи.
Теперь можем отметить файл как пространство подкачки, введя следующее:
После этого можем активировать файл подкачки, чтобы система начала использовать его:
Убедитесь, что пространство подкачки активировано, введя следующее:
Чтобы подтвердить наши выводы, можем снова проверить ответ утилиты free :
Подкачка успешно настроена, и операционная система начнет использовать ее по мере необходимости.
Шаг 5 — Сделать файл подкачки постоянным
В результате внесенных нами изменений файл подкачки активирован для текущей сессии. После перезагрузки сервер не сохранит настройки подкачки автоматически. Мы можем изменить это, добавив файл подкачки к файлу /etc/fstab .
Сделайте резервную копию файла /etc/fstab на случай если что-то пойдет не так:
Добавьте информацию о файле подкачки в конец файла /etc/fstab , введя следующее:
Далее рассмотрим некоторые настройки, которые мы сможем обновить, чтобы настроить пространство подкачки.
Шаг 6 — Изменение настроек подкачки
Существует несколько настраиваемых опций, влияющих на производительность системы при работе с пространством подкачки.
Настройка параметра Swappiness
Параметр swappiness определяет, как часто система выгружает данные из оперативной памяти в пространство подкачки. Его значение выражается числом от 0 до 100 процентов.
При значениях, близких к нулю, ядро не будет выгружать данные на диск, если в этом нет абсолютной необходимости. Взаимодействие с файлом подкачки требует гораздо больше времени, чем взаимодействие с оперативной памятью, и может вызывать значительное снижение производительности. Если система не зависит от подкачки, то, как правило, ее производительность повышается.
При значениях, близких к 100, система будет пытаться выгрузить больше данных на подкачку, чтобы разгрузить оперативную память. В зависимости от профиля памяти приложений и от тех задач, которые ставятся перед сервером, в некоторых случаях это плюс.
Можем увидеть текущее значение фактора swappiness, введя следующее:
Для настольного компьютера неплохое значение swappiness — 60. Для сервера, возможно, вы захотите приблизить его к 0.
Можно задать другое значение swappiness при помощи команды sysctl .
Например, чтобы установить значение swappiness 10, можно ввести следующее:
Эта настройка будет сохраняться до следующей перезагрузки. Можно автоматически задать это значение при перезагрузке, добавив строку в файл /etc/sysctl.conf :
Внизу можно ввести следующее:
Сохраните файл и закройте его после завершения.
Изменение настроек нагрузки кэш-памяти
Еще одно связанное значение, которое вы, возможно, захотите изменить — vfs_cache_pressure . Эта настройка определяет, насколько система будет кэшировать данные inode и dentry по сравнению с другими данными.
По сути, это данные доступа к файловой системе. Как правило, искать их довольно сложно, а запрашиваются они часто, так что кэш-память в этом случае весьма полезна. Чтобы узнать текущее значение этого параметра, можно еще раз запросить файловую систему proc :
Согласно текущим настройкам, система удаляет данные инодов из кэша слишком быстро. Можно задать более консервативное значение — например, 50 — введя следующее:
Опять-таки, это значение действительно только для текущей сессии. Чтобы сделать его постоянным, нужно (как и в случае со swappiness) изменить файл конфигурации:
Внизу добавьте строку с новым значением:
Сохраните и закройте файл после завершения.
Заключение
Следуя настоящему руководству, можно использовать оперативную память более эффективно, предотвращая исключения нехватки памяти. Пространство подкачки может быть весьма полезным для предотвращения некоторых распространенных проблем.
Когда возникают ошибки нехватки памяти или когда система не может запустить нужные приложения, наилучшее решение — оптимизировать конфигурации приложений или обновить сервер.
Читайте также: