对于使用WordPress的网站小伙伴,因为WordPress意味着经常需要调用数据库,除了使用Memcached或者Redis进行缓存加速以外,还有很多使用WordPress缓存加速的插件,当然搬主题也介绍了不少关于WordPress的数据库优化的文章,如下。
WordPress使用阿里云对象存储OSS进行静态资源CDN加速图文教程 9个月前
0 162 1
CyberPanel面板安装设置Redis优化加速服务全流程图文教程 6个月前
0 231 7
WordPress网站打开慢卡顿?数据库优化加速图文教程 2年前
0 1010 0
WordPress深度加速-OpenLiteSpeed环境下的WordPress数据库优化设置详细教程 3年前
1 1409 0
这里搬主题基于一些喜欢折腾的小伙伴,再分享一下使用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_hugepages
2)查看大页的使用情况:
$ grep Huge /proc/meminfo
HugePages_Total: 150
HugePages_Free: 150
HugePages_Rsvd: 0
HugePages_Surp: 0
Hugepagesize: 2048 kB
2.6、HugePages配置:
1)设置 memlock(内存锁):
vim /etc/security/limits.conf 在文件最后添加信息: MySQL soft memlock unlimited MySQL hard memlock unlimited
2)修改/etc/sysctl.conf:
vi /etc/sysctl.conf
添加/修改信息:
kernel.shmmax = 17179869184
kernel.shmall = 4194304
3)查看 MySQL 用户的组信息:
id MySQL
然后会得到自己的数据库用户ID及用户组ID
4)配置使用大页内存的用户组:
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-pages
6)验证 HugePages 配置:
cat /proc/meminfo
当然,对于PHP的HugePages加速,搬主题之前的文章也提到了,如下文章
Opcache参数配置优化设置教程 加速WordPress网站访问 3年前
0 1207 0
3、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/defrag
2)永久关闭:
在 /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
fi
4、Huge Pages 和 Transparent Huge Pages 区别:
这两者的区别在于大页的分配机制,标准大页管理是在系统启动时预先分配的,而透明大页管理则是动态分配的方式(在运行时由khugepaged进程动态的分配),可以实时配置,不需要重启就能生效配置。
说明:透明大页与传统HugePages联用会出现一些问题,导致性能问题和系统重启;ORACLE强烈建议开启HugePages需要关闭Transparent HugePages。总之就是两者不要同时使用。
1.本站内容仅供参考,不作为任何法律依据。用户在使用本站内容时,应自行判断其真实性、准确性和完整性,并承担相应风险。
2.本站部分内容来源于互联网,仅用于交流学习研究知识,若侵犯了您的合法权益,请及时邮件或站内私信与本站联系,我们将尽快予以处理。
3.本文采用知识共享 署名4.0国际许可协议 [BY-NC-SA] 进行授权
4.根据《计算机软件保护条例》第十七条规定“为了学习和研究软件内含的设计思想和原理,通过安装、显示、传输或者存储软件等方式使用软件的,可以不经软件著作权人许可,不向其支付报酬。”您需知晓本站所有内容资源均来源于网络,仅供用户交流学习与研究使用,版权归属原版权方所有,版权争议与本站无关,用户本人下载后不能用作商业或非法用途,需在24个小时之内从您的电脑中彻底删除上述内容,否则后果均由用户承担责任;如果您访问和下载此文件,表示您同意只将此文件用于参考、学习而非其他用途,否则一切后果请您自行承担,如果您喜欢该程序,请支持正版软件,购买注册,得到更好的正版服务。
5.本站是非经营性个人站点,所有软件信息均来自网络,所有资源仅供学习参考研究目的,并不贩卖软件,不存在任何商业目的及用途
暂无评论内容