首页 > 数据库 >POSTGRESQL 设置hugepage 可以让系统使用内存更有效率,防止OOM

POSTGRESQL 设置hugepage 可以让系统使用内存更有效率,防止OOM

时间:2023-06-19 17:02:42浏览次数:46  
标签:POSTGRESQL OOM echo NUM hugepage 内存 页面 page PG


https://www.percona.com/blog/why-linux-hugepages-are-super-important-for-database-servers-a-case-with-postgresql/

https://bbs.huaweicloud.com/blogs/detail/156799

Hugepage 是什么,基于LINUX 系统,大页面对虚拟内存管理是有必要的。除标准的4KB页面之外,还进行内存中的大页面的管理,可以使用大页面定义1GB的页面大小的内存页面。在虚拟内存管理中,内核维护一个表,其中有一个虚拟内存地址到物理地址的映射。对于每个页面事务,内核都需要加载相关的映射。如果页面较小,则需要加载更多的页面,从而导致内核加载更多的映射表。

在系统运行后,可以通过下面的脚本来调整你hugepage  的设置,脚本来自oracle 公司。

#!/bin/bash
#
# hugepages_settings.sh
#
# Linux bash script to compute values for the
# recommended HugePages/HugeTLB configuration
#
# Note: This script does calculation for all shared memory
# segments available when the script is run, no matter it
# is an Oracle RDBMS shared memory segment or not.
# Check for the kernel version
KERN=`uname -r | awk -F. '{ printf("%d.%d\n",$1,$2); }'`
# Find out the HugePage size
HPG_SZ=`grep Hugepagesize /proc/meminfo | awk {'print $2'}`
# Start from 1 pages to be on the safe side and guarantee 1 free HugePage
NUM_PG=1
# Cumulative number of pages required to handle the running shared memory segments
for SEG_BYTES in `ipcs -m | awk {'print $5'} | grep "[0-9][0-9]*"`
do
   MIN_PG=`echo "$SEG_BYTES/($HPG_SZ*1024)" | bc -q`
   if [ $MIN_PG -gt 0 ]; then
      NUM_PG=`echo "$NUM_PG+$MIN_PG+1" | bc -q`
   fi
done
# Finish with results
case $KERN in
   '2.4') HUGETLB_POOL=`echo "$NUM_PG*$HPG_SZ/1024" | bc -q`;
          echo "Recommended setting: vm.hugetlb_pool = $HUGETLB_POOL" ;;
   '2.6' | '3.8' | '3.10' | '4.1' ) echo "Recommended setting: vm.nr_hugepages = $NUM_PG" ;;
    *) echo "Unrecognized kernel version $KERN. Exiting." ;;
esac
# End

(需要系统运行,并在正常使用中运行脚步,获得调整值)

然后将给出的建议,放入到  /etc/sysctl.conf  系统文件,然后执行

sudo sysctl -p 将参数加入到系统中。

POSTGRESQL   设置hugepage 可以让系统使用内存更有效率,防止OOM_python

下面我们就操作通过PG 的数据库压测对比一下,在没有hugepage 和 启用huge page 系统在使用中内存消耗的不同。

POSTGRESQL   设置hugepage 可以让系统使用内存更有效率,防止OOM_java_02

POSTGRESQL   设置hugepage 可以让系统使用内存更有效率,防止OOM_nginx_03

在压力测试中,可以关注used 和  available 的内存变化,这里可以看到在压测的时候, 两个参数一直在下降,这样很容易引起 OOM 

POSTGRESQL   设置hugepage 可以让系统使用内存更有效率,防止OOM_nginx_04

POSTGRESQL   设置hugepage 可以让系统使用内存更有效率,防止OOM_linux_05

打开hugepage 并进行一些配置,后再次进行测试 (后面在说怎么进行配置,怎么进行的压测)

POSTGRESQL   设置hugepage 可以让系统使用内存更有效率,防止OOM_python_06

通过上面和下面这两个图对比,used 在同样的压力下,基本上没有变化,used 变化较大。这证明在压力测试的时候,PG 在使用内存方面比较稳定。

POSTGRESQL   设置hugepage 可以让系统使用内存更有效率,防止OOM_java_07

下面来说说怎么设置的

1  如何进行huge page 的设置

首先在系统运行时,通过命令获得postgres 中postmaster 的PID ,在通过命令 grep ^VmPeak /proc/5599/status, 获得使用的vmPeak的数量

2 通过计算数据转换为MB /2 ,然后将计算好的数据填入系统文件中 (页面预设尺寸 2mb)

3  vi /etc/sysctl.conf  输入计算好的数据  vm.nr_hugepages = 2245

POSTGRESQL   设置hugepage 可以让系统使用内存更有效率,防止OOM_大数据_08

POSTGRESQL   设置hugepage 可以让系统使用内存更有效率,防止OOM_python_09

4   运行 sysctl -p  命令

POSTGRESQL   设置hugepage 可以让系统使用内存更有效率,防止OOM_大数据_10

5  修改PG 的配置文件强制 huge_page = on 

6  重启动PG 服务

经过上面的测试可以证明在打开huge_page = on (默认是try) 的情况下对内存占用有一定的保护,降低OOM 的风险。

注:try 的情况下 ,有可能无法打开huge_page = on  启动时也有可能失败,具体原因找时间在说。

POSTGRESQL   设置hugepage 可以让系统使用内存更有效率,防止OOM_java_11

压力测试以及硬件配置为 16G 内存,2CORE CPU  SSD 磁盘, 模拟80客户端进行压力测试。

POSTGRESQL   设置hugepage 可以让系统使用内存更有效率,防止OOM_nginx_12

标签:POSTGRESQL,OOM,echo,NUM,hugepage,内存,页面,page,PG
From: https://blog.51cto.com/u_14150796/6516021

相关文章

  • POSTGRESQL 怎么通过explain 来分析SQL查询性能
    Explain命令是大多数数据库常用的一种展示SQL执行计划和cost的一种方式。在POSTGRESQL中EXPLAIN命令展示的信息比较详细,并且附带explain有不少的附加的命令来进行更多的展示。从命令来命令和功能来划分explainselecta.first_name,a.last_name,a.last_update,fa.film_idfrom......
  • POSTGRESQL 高可用 Patroni VS Repmgr 到底哪家强(1)
    在众多postgresql高可用模式中,主要的参与者有两位,PatroniVSrepmgr基于这二者的功能优点以及缺点相信大部分人都不是太明确,下面将根据两篇翻译的文字合并,来对两个高可用的程序来做一个比较,consandpros。 1 Repmgr是一款开源的基于postgres复制基础上的高可用软件,他基于2......
  • POSTGRESQL 14 功能有啥吸引人的
    好多人还在用postgresql10 ,12这些版本的时候,POSTGRESQL已经开启了POSTGRESQL14的旅程。那么到底Postgresql14有什么吸引人的,那就需要了解一下。 https://sql-info.de/postgresql/postgresql-14/articles-about-new-features-in-postgresql-14.html想详细了解了可以到这个......
  • POSTGRESQL openGaussDB 体系架构
    Today听了一下墨天轮举办的OpenGaussDB的专题的训练营,下面是此次线上的OpenGaussDB的体系结构的介绍。这里根据介绍快速总结出此次介绍中OpenGaussDB的特点:1 OpenGaussDB针对国产的硬件系统,如鲲鹏等硬件系统有特殊的支持和性能调试,真多国产的硬件系统有优势。2OpenGaussDB主......
  • POSTGRESQL 事务控制(二) 事务开启 (写着费力,看着费劲系列)
    今天接着上回书,事务如果在处理中没有子事务,则实现和控制是十分容易的,但如果有子事务的情况下,子事务通过transactionState结构体来实现,(上次已经提到了),每一个transactionState都指向父事务的结构体的指针.在继续往下说之前,我们的提到clog, 这是理解后面要提到的一些事情的......
  • POSTGRESQL SERVERLESS 是POSTGRESQL 数据库的未来 (译)
    以下为翻译内容多年来,PostgreSQL一直备受瞩目,对于企业来说,POSTGRESQL流行是面临众多竞争后的选择。随着企业试图摆脱昂贵的传统关系型数据库管理系统(RDBMS),但仍希望坚持使用RDBMS,开源PostgreSQL是一种具有吸引力的、更经济实惠的替代方案。曾经有两个托管PostgreSQL服务(Aurora和RDS)......
  • POSTGRESQL NEON - Serverless 式的POSTGRESQL 数据库的独特技能 分支数据
    之前没有关注过SERVERLESS的数据库产品之前,我很少会关注SERVERLESS的东西,因为一直在实体机数据库类型打拼的我,从来不关心什么 云原生什么SERVERLESS,Idon'tcareaboutthat,it'snotmybusiness!!!!但是后来上云了,上的很深,没法了,开始关注什么是云原生,什么是POALRDB 最......
  • PostgreSql通过创建外部表而非dblink使访问速度提高,优化sql查询速度
    resourceregister库外部表创建--导入插件createextensionpostgres_fdw;--创建服务名称为operation的服务host为ipport为端口dbname为数据库名称createserveroperationforeigndatawrapperpostgres_fdwoptions(host'localhost',port'5432',dbname'operat......
  • BMZCTF:2018 安洵杯 boooooom
    http://bmzclub.cn/challenges#2018%20%E5%AE%89%E6%B4%B5%E6%9D%AF%20boooooomhappy.zip有密码使用ARCHPR尝试掩码爆破四位数字happy.zip密码:3862解压password.pyimportbase64importhashlibf=open("password.txt",'r')password=f.readline()b64_str=base64.b......
  • 如何加载100M的图片却不撑爆内存,一张 100M 的大图,如何预防 OOM?
    还记得当年面试一个面试官问我怎么加载巨图才能不撑爆内存,我没回答上来,他说分片显示,我寻思特么分片能减少内存使用??现在可以打他脸了!内容扩展1.图片的三级缓存中,图片加载到内存中,如果内存快爆了,会发生什么?怎么处理?2.内存中如果加载一张500*500的png高清图片.应该是占用多少......