对于使用WordPress的网站小伙伴,因为WordPress意味着经常需要调用数据库,除了使用Memcached或者Redis进行缓存加速以外,还有很多使用WordPress缓存加速的插件,当然搬主题也介绍了不少关于WordPress的数据库优化的文章,如下。
WordPress使用阿里云对象存储OSS进行静态资源CDN加速图文教程2年前03221
CyberPanel面板安装设置Redis优化加速服务全流程图文教程1年前03257
WordPress网站打开慢卡顿?数据库优化加速图文教程3年前011220
WordPress深度加速-OpenLiteSpeed环境下的WordPress数据库优化设置详细教程4年前115290这里搬主题基于一些喜欢折腾的小伙伴,再分享一下使用Linux系统的标准大页Huge Pages和透明大页Transparent Huge Pages优化配置教程。1、Linux大内存页特性一般Linux下的大页分为两种类型:标准大页(Huge Pages)和透明大页(Transparent Huge Pages)。大页的产生:大多数操作系统采用了分段或分页的方式进行管理。分段是粗粒度的管理方式,而分页则是细粒度管理方式,分页方式可以避免内存空间的浪费。相应地,也就存在内存的物理地址与虚拟地址的概念。通过前面这两种方式,CPU必须把虚拟地址转换程物理内存地址才能真正访问内存。为了提高这个转换效率,CPU会缓存最近的虚拟内存地址和物理内存地址的映射关系,并保存在一个由CPU维护的映射表中。为了尽量提高内存的访问速度,需要在映射表中保存尽量多的映射关系。Linux的内存管理采取的是分页存取机制,为了保证物理内存能得到充分的利用,内核会按照LRU算法在适当的时候将物理内存中不经常使用的内存页自动交换到虚拟内存中,而将经常使用的信息保留到物理内存。通常情况下,Linux默认情况下每页是4K,这就意味着如果物理内存很大,则映射表的条目将会非常多,会影响CPU的检索效率。因为内存大小是固定的,为了减少映射表的条目,可采取的办法只有增加页的尺寸。因此Hugepage便因此而来。也就是打破传统的小页面的内存管理方式,使用大页面2M,4M等。如此一来映射条目则明显减少。TLB缓存命中率将大大提高。2、HugePages:2.1、概念介绍:1)HugePages是从Linux Kernel 2.6后被引入的。目的是使用更大的内存页面(memory page size) 以适应越来越大的系统内存,让操作系统可以支持现代硬件架构的大页面容量功能。在Linux下,page size默认是4K,如果使用HugePages,默认是2M;2)page table和TLB:page table 映射表:物理内存和swap的对应关系、访问内存是先读page table、根据表里的映射关系操作;TLB:cpu cache组件、缓存部分page table以提高转换速度;2.2、配置 HugePages 优缺点:1)优点:不需要内存页交换;减轻快表压力;减轻换页表的负载;提高内存的性能,降低CPU负载;2)缺点:传统大页很难手动管理, 而且通常需要对代码进行重大更改才能有效地使用。2.3、HugePages 使用建议:1)如果您的系统经常碰到因为 swap 引发的性能问题,系统毫无疑问需要启用HugePage。2)OS内存非常大的系统也需要启用HugePage。2.4、使用 HugePages 注意事项:如果未调整 HugePages ,可能会引发下面的问题:数据库性能低下;出现内存不足或者过度使用交换空间;数据库实例不能被启动;关键性系统服务故障;2.5、使用情况与配置查看:1)确认HuagePage是否配置:cat /proc/sys/vm/nr_hugepages2)查看大页的使用情况:$ grep Huge /proc/meminfo
HugePages_Total: 150
HugePages_Free: 150
HugePages_Rsvd: 0
HugePages_Surp: 0
Hugepagesize: 2048 kB2.6、HugePages配置:1)设置 memlock(内存锁):vim /etc/security/limits.conf
在文件最后添加信息:
mysql soft memlock unlimited
mysql hard memlock unlimited2)修改/etc/sysctl.conf:vi /etc/sysctl.conf
添加/修改信息:
kernel.shmmax = 17179869184
kernel.shmall = 41943043)查看 MySQL 用户的组信息:id mysql然后会得到自己的数据库用户ID及用户组ID4)配置使用大页内存的用户组:more /proc/sys/vm/hugetlb_shm_group
sysctl -w vm.hugetlb_shm_group=88注意,以上的88要修改成上面查询到的数据库用户组ID数字5)修改参数停止实例并重启生效:vi /mysql/data/3306/my.cnf
[mysqld]
large-pages6)验证 HugePages 配置:cat /proc/meminfo当然,对于PHP的HugePages加速,搬主题之前的文章也提到了,如下文章
Opcache参数配置优化设置教程 加速WordPress网站访问4年前0127003、Transparent Huge Pages:3.1、介绍:透明大页(Transparent Huge Pages)缩写为THP,从RedHat 6,OEL 6,SLES 11 and UEK2 kernels 开始,系统缺省会启用Transparent HugePages,用来提高内存管理的性能。3.2、Transparent Huge Pages的使用建议:ORACLE官方不建议使用RedHat 6、OEL 6、SLES 11 and UEK2 kernels时开启透明大页。在 Oracle Linux 6.5、RHEL Linux 6.5+ 版中,已删除Transparent HugePages。特别提醒,使用Redis的小伙伴,也建议禁用透明大页Transparent Huge Pages。3.3、Transparent Huge Pages的优点:可以使用 swap ,内存页默认是2M大小,需要使用 swap 的时候,内存被分割为4k大小;对用户透明,不需要用户做特殊配置;不需要依某种库文件;3.4、使用情况与配置查看:1)查看透明大页是否启用了:# cat /sys/kernel/mm/transparent_hugepage/enabled如果显示[always] madvise never就是启用中,如果显示always madvise [never]就是未启用。如下就是未启用2)使用情况监控:# cd /sys/kernel/mm/transparent_hugepage/khugepaged
说明:
alloc_sleep_millisecs:多长时间整理一次碎片;
pages_collapsed 一个扫描周期被扫描的内存页数;
scan_sleep_millisecs:多长时间扫描一次。3.5、关闭透明大页功能:1)临时关闭:# echo never >> /sys/kernel/mm/transparent_hugepage/enabled
# echo never >> /sys/kernel/mm/transparent_hugepage/defrag2)永久关闭:在 /etc/rc.local 文件中加入如下内容:#!/bin/sh
#
# This script will be executed *after* all the other init scripts.
# You can put your own initialization stuff in here if you don't
# want to do the full Sys V style init stuff.
touch /var/lock/subsys/local
if test -f /sys/kernel/mm/transparent_hugepage/enabled; then
echo never > /sys/kernel/mm/transparent_hugepage/enabled
fi
if test -f /sys/kernel/mm/transparent_hugepage/defrag; then
echo never > /sys/kernel/mm/transparent_hugepage/defrag
fi4、Huge Pages 和 Transparent Huge Pages 区别:这两者的区别在于大页的分配机制,标准大页管理是在系统启动时预先分配的,而透明大页管理则是动态分配的方式(在运行时由khugepaged进程动态的分配),可以实时配置,不需要重启就能生效配置。说明:透明大页与传统HugePages联用会出现一些问题,导致性能问题和系统重启;ORACLE强烈建议开启HugePages需要关闭Transparent HugePages。总之就是两者不要同时使用。
THE END