Как я могу ограничить mysqld потребление памяти?

Потребление верхней памяти Mysql

Недавно я мигрировал с Сервера Debian на сервер Ubuntu, и я заметил это mysqld потребление памяти на Сервере Ubuntu смехотворно высоко для мало к тому, чтобы быть бесполезному...

Решения?

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

0
задан 13 March 2018 в 11:10

1 ответ

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

Читайте прежде, чем следовать этим инструкциям: Я читал на сайте документации Redhat, что libcgroups был недавно удержан от использования. Redhat предоставляет руководство для создания контрольных групп с systemd здесь.

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

Метод 1: libcgroups (по-видимому, удержанный от использования)

Можно установить libcgroups, который содержит серию утилит для создания cgroups, таких как cgcreate и cgclassify путем ввода sudo apt install libcgroups. После того, как установленный, выполните следующее:

  • Создайте cgroup, названный sqlgroup (или независимо от того, что Вы хотите назвать его),
    • Ввести cgcreate -g memory,cpu:sqlgroup
  • Предел памяти аппарата.
    • cgset -r memory.limit_in_bytes=$((*mathExpressionForDesiredLimit*)) sqlgroup
  • Свяжите новую группу с желаемым процессом для управления.
    • Если процесс в настоящее время работает, используйте cgclassify путем ввода cgclassify -g memory,cpu:sqlgroup $(*PID of mysql process*)
    • Если процесс не работает, можно использовать cgexec путем ввода cgexec cpu,memory:sqlgroup *processName* *additional arguments*

Метод два: ручная конфигурация

Можно также выполнить это вручную, не устанавливая дополнительные пакеты с помощью следующего (Примечание: у Вас должен быть systemd 232 или позже. systemctl --version | grep systemd дает информацию о текущей версии):

  • mkdir /sys/fs/cgroup/memory/groupname. Это создает папку под [...]/cgroup/memory, который указывает, что cgroup будет управлять памятью.Примечание: измените groupname на что-то, что соответствует процессу, который Вы хотите ограничить. Можно назвать его чем-либо. В предыдущем методе я описал groupname, был sqlgroup.
  • Установите предел памяти для процесса путем создания файла под groupname папкой, которую Вы создали, который содержит предел памяти в байтах. Это может быть сделано с помощью: echo amount_in_bytes > /sys/fs/cgroup/memory/groupname/memory.limit_in_bytes. Не изменяйте название памяти limit_in_bytes.
  • Переместите PID процесса, который Вы хотите ограничить в cgroup.procs файл. Это может быть создано с echo *PID_Number* > /sys/fs/cgroup/memory/groupname/cgroup.procs.Примечание: Если несколько процессов с другим PIDs должны быть ограничены, необходимо будет ввести каждый PID в cpgroup.procs файл вручную.

Более усовершенствованные параметры конфигурации относительно cgroups могут быть найдены здесь.

2
ответ дан 30 October 2019 в 06:44

Другие вопросы по тегам:

Похожие вопросы: