mysqld.service для systemd - Не удалось проанализировать значение ресурса, игнорируется: 40000 - LimitMEMLOCK

Я получил эту ошибку mysql systemd [ 1]: [/usr/lib/systemd/system/mysqld.service:39] Не удалось проанализировать значение ресурса, игнорируется: 40000 на Centos 7 с mysql 5. 7, когда я устанавливаю ограничение LimitMEMLOCK для MYSQL 5.7.

LimitMEMLOCK=40000
  1. Почему невозможно установить числовое ограничение для LimitMEMLOCK ?
  2. Какова цель LimitMEMLOCK ?
  3. Единственная душа LimitMEMLOCK = бесконечность ?

*

#cat /etc/*-release
CentOS Linux release 7.3.1611 (Core)
NAME="CentOS Linux"
VERSION="7 (Core)"
ID="centos"
ID_LIKE="rhel fedora"
VERSION_ID="7"
PRETTY_NAME="CentOS Linux 7 (Core)"
ANSI_COLOR="0;31"
CPE_NAME="cpe:/o:centos:centos:7"
HOME_URL="https://www.centos.org/"
BUG_REPORT_URL="https://bugs.centos.org/"

CENTOS_MANTISBT_PROJECT="CentOS-7"
CENTOS_MANTISBT_PROJECT_VERSION="7"
REDHAT_SUPPORT_PRODUCT="centos"
REDHAT_SUPPORT_PRODUCT_VERSION="7"

CentOS Linux release 7.3.1611 (Core)
CentOS Linux release 7.3.1611 (Core)

*

service mysqld status
Redirecting to /bin/systemctl status  mysqld.service
● mysqld.service - MySQL Server
   Loaded: loaded (/usr/lib/systemd/system/mysqld.service; enabled; vendor preset: disabled)
   Active: active (running) since Mon 2016-12-19 23:21:24 UTC; 9s ago
 Main PID: 11170 (mysqld)
   CGroup: /system.slice/mysqld.service
           └─11170 /usr/sbin/mysqld --daemonize --pid-file=/var/run/mysqld/mysqld.pid

mysql systemd[1]: Starting MySQL Server...
mysql mysqld_pre_systemd[11143]: /usr/sbin/restorecon:  Warning no default label for /mnt/data/mysql
mysql systemd[1]: Started MySQL Server.
mysql systemd[1]: [/usr/lib/systemd/system/mysqld.service:39] Failed to parse resource value, ignoring: 40000

Я не вижу это сообщение об ошибке в другой версии Centos 7 ( CentOS Выпуск Linux 7.2.1511 (Core) ), когда mysqld.service настроен с LimitMEMLOCK = 40000 .

cat /etc/*-release
CentOS Linux release 7.2.1511 (Core)
NAME="CentOS Linux"
VERSION="7 (Core)"
ID="centos"
ID_LIKE="rhel fedora"
VERSION_ID="7"
PRETTY_NAME="CentOS Linux 7 (Core)"
ANSI_COLOR="0;31"
CPE_NAME="cpe:/o:centos:centos:7"
HOME_URL="https://www.centos.org/"
BUG_REPORT_URL="https://bugs.centos.org/"

CENTOS_MANTISBT_PROJECT="CentOS-7"
CENTOS_MANTISBT_PROJECT_VERSION="7"
REDHAT_SUPPORT_PRODUCT="centos"
REDHAT_SUPPORT_PRODUCT_VERSION="7"

CentOS Linux release 7.2.1511 (Core)
CentOS Linux release 7.2.1511 (Core)
0
задан 20 December 2016 в 01:51
1 ответ

Начнем с документации systemd :

LimitCPU =, LimitFSIZE =, LimitDATA =, LimitSTACK =, LimitCORE =, LimitRSS =, LimitNOFILE =, LimitAS =, LimitNPROC =, LimitMEMLOCK =, LimitLOCKS =, LimitSIGPENDING =, LimitMSGQUEUE =, LimitNICE =, LimitRTPRIO =, LimitRTTIME =

Установите мягкие и жесткие ограничения на различные ресурсы для выполняемых процессов. См. setrlimit (2) для получения подробной информации о концепции ограничения ресурсов.

Для MEMLOCK эта страница руководства объясняет:

  RLIMIT_MEMLOCK
  Максимальное количество байтов памяти, которое может быть заблокировано
  БАРАН.  Фактически, этот предел округляется до ближайшего
  кратно системному размеру страницы.  Этот предел влияет на mlock (2)
  и mlockall (2) и операция MAP_LOCKED mmap (2).  поскольку
  Linux 2.6.9 это также влияет на операцию shmctl (2) SHM_LOCK,
  где он устанавливает максимум общего количества байтов в разделяемой памяти
  сегменты (см. shmget (2)), которые могут быть заблокированы реальным пользователем
  ID вызывающего процесса.  Блокировки shmctl (2) SHM_LOCK являются
  учитывается отдельно от блокировок памяти для каждого процесса
  устанавливается mlock (2), mlockall (2) и mmap (2) MAP_LOCKED;
  процесс может блокировать байты до этого предела в каждом из этих двух
  категории.

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

Блокировка памяти в ОЗУ не позволяет ядру выгружать ее. Это делается не часто, но для некоторых вещей, критичных к производительности, это очень полезно. Базы данных - одна из тех вещей, которые могут это эффективно использовать.

Установка этого значения на 40000 не имеет смысла. Даже если бы вы могли это сделать, это привело бы к повреждению базы данных и, вероятно, к ее сбою. MySQL блокирует память, когда поддержка больших страниц включена, а в документации указано, что memlock должно быть неограниченным ( бесконечность в вашем модуле systemd).

2
ответ дан 4 December 2019 в 13:36

Теги

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