systemd 的 mysqld.service - 无法解析资源值,忽略:40000 - LimitMEMLOCK

systemd 的 mysqld.service - 无法解析资源值,忽略:40000 - LimitMEMLOCK

mysql systemd[1]: [/usr/lib/systemd/system/mysqld.service:39] Failed to parse resource value, ignoring: 40000当我为 MYSQL 5.7 设置限制时,在装有 mysql 5.7 的 Centos 7 上出现此错误LimitMEMLOCK

LimitMEMLOCK=40000
  1. 为什么不能设置数字限制LimitMEMLOCK
  2. 的目的是什么LimitMEMLOCK
  3. 是唯一的灵魂吗LimitMEMLOCK=infinity

*

#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 release 7.2.1511 (Core))上看到此错误消息。mysqld.serviceLimitMEMLOCK=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)

答案1

让我们从systemd 文档

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

为执行的进程设置各种资源的软限制和硬限制。请参阅设置限制(2)有关资源限制概念的详细信息。

对于 MEMLOCK,该手册页解释道:

   RLIMIT_MEMLOCK
          The maximum number of bytes of memory that may be locked into
          RAM.  In effect this limit is rounded down to the nearest
          multiple of the system page size.  This limit affects mlock(2)
          and mlockall(2) and the mmap(2) MAP_LOCKED operation.  Since
          Linux 2.6.9 it also affects the shmctl(2) SHM_LOCK operation,
          where it sets a maximum on the total bytes in shared memory
          segments (see shmget(2)) that may be locked by the real user
          ID of the calling process.  The shmctl(2) SHM_LOCK locks are
          accounted for separately from the per-process memory locks
          established by mlock(2), mlockall(2), and mmap(2) MAP_LOCKED;
          a process can lock bytes up to this limit in each of these two
          categories.

          In Linux kernels before 2.6.9, this limit controlled the
          amount of memory that could be locked by a privileged process.
          Since Linux 2.6.9, no limits are placed on the amount of
          memory that a privileged process may lock, and this limit
          instead governs the amount of memory that an unprivileged
          process may lock.

将内存锁定到 RAM 中可防止内核将其交换出去。这种做法并不常见,但对于某些性能至关重要的东西来说,它非常有用。数据库就是可以充分利用这一点的东西之一。

将此值设置为 40000 毫无意义。即使您可以这样做,也会破坏数据库并可能导致其崩溃。MySQL 在以下情况下锁定内存:大页面支持已启用,并且文档指出 memlock 必须是无限制的(infinity在您的 systemd 单元中)。

相关内容