0

我们尝试为使用 galera 集群运行的 mariabdb 设置大页面。我们已经分配了足够高的大页面来容纳 innodb 缓冲区。

服务器配置文件

[mysqld]
large-pages
innodb_buffer_pool_size =4G

/etc/sysctl.conf

# hugepages information
vm.nr_hugepages = 3072

# Controls the maximum shared segment size, in bytes
kernel.shmmax = 68719476736

# Controls the maximum number of shared memory segments, in pages
kernel.shmall = 4294967296

/etc/security/limits.conf

@mysql      soft    memlock     unlimited
@mysql      hard    memlock     unlimited

免费-m

             total       used       free     shared    buffers     cached
Mem:         11908      11635        272          0         68       5502
-/+ buffers/cache:       6064       5843
Swap:         2559          0       2559

mysqld.log 中的错误

150403  4:46:12 [Note] InnoDB: Initializing buffer pool, size = 4.0G
InnoDB: HugeTLB: Warning: Failed to allocate 687865856 bytes. errno 1
InnoDB HugeTLB: Warning: Using conventional memory pool
InnoDB: HugeTLB: Warning: Failed to allocate 687865856 bytes. errno 1
InnoDB HugeTLB: Warning: Using conventional memory pool
InnoDB: HugeTLB: Warning: Failed to allocate 687865856 bytes. errno 1
InnoDB HugeTLB: Warning: Using conventional memory pool
InnoDB: HugeTLB: Warning: Failed to allocate 687865856 bytes. errno 1
InnoDB HugeTLB: Warning: Using conventional memory pool
InnoDB: HugeTLB: Warning: Failed to allocate 687865856 bytes. errno 1
InnoDB HugeTLB: Warning: Using conventional memory pool
InnoDB: HugeTLB: Warning: Failed to allocate 687865856 bytes. errno 1
InnoDB HugeTLB: Warning: Using conventional memory pool
InnoDB: HugeTLB: Warning: Failed to allocate 687865856 bytes. errno 1
InnoDB HugeTLB: Warning: Using conventional memory pool
InnoDB: HugeTLB: Warning: Failed to allocate 687865856 bytes. errno 1
InnoDB HugeTLB: Warning: Using conventional memory pool
150403  4:46:13 [Note] InnoDB: Completed initialization of buffer pool

cat /proc/meminfo |grep -i 巨大的

AnonHugePages:         0 kB
HugePages_Total:       3072
HugePages_Free:        3072
HugePages_Rsvd:        0
HugePages_Surp:        0
Hugepagesize:       2048 kB
4

1 回答 1

1

我可以看到您的配置中缺少一个步骤:您需要设置可以访问 HugeTLB 内存的组号(mysql)。

检查当前分配的值:

$ sysctl vm.hugetlb_shm_group

这可能只会返回 0,因此是“根”组。您应该创建一个hugetlb组并将 mysql 添加到该组,或者也使用 mysql 所属的组之一。无论哪个组,使用其 GID(分别使用grep '^hugetlb:' /etc/group | cut -d: -f3id -g mysql)并执行以下操作:

# sysctl -w vm.hugetlb_shm_group=<gid>

(替换为您所在组的 GID)

测试它是否有效,它确实会在 /etc/sysctl.conf(或 /etc/sysctl.d/ 下的新文件)中添加以下行:

vm.hugetlb_shm_group = <gid>
于 2015-10-07T19:33:36.720 回答