You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Rocky Linux 9中无法为应用分配HugePages的问题排查求助

在Rocky Linux 9中使用libhugetlbfs无法预留大页的问题

问题背景

  • 早期CentOS 8环境下,通过配置LD_LIBRARY_PATH指向libhugetlbfs.so路径,可实现应用使用大页内存分配。
  • 迁移到Rocky Linux 9后,发现官方源无对应libhugetlbfs包,手动安装了el8版本的libhugetlbfs-2.21-17.el8.x86_64.rpm。
  • 沿用之前的启动命令:
    LD_PRELOAD=/usr/lib64/libhugetlbfs.so ./brhclus <args>
    
    但程序运行后查看/proc/meminfo,大页未被预留:
    AnonPages:      52018332 kB
    AnonHugePages:         0 kB
    HugePages_Total:   614400
    HugePages_Free:    614400
    HugePages_Rsvd:        0
    HugePages_Surp:        0
    Hugepagesize:       2048 kB
    Hugetlb:        1258291200 kB
    

系统环境

OS: Rocky Linux 9.2
Kernel: 5.14.0-284.18.1.el9_2.x86_64
Memory: 1.5T

排查与解决方案

  • 解决跨版本兼容性问题:el8的libhugetlbfs与el9的glibc、内核可能存在兼容性冲突,建议从libhugetlbfs官方源码编译适配el9的版本,替换现有rpm安装的库。
  • 确认hugetlbfs挂载状态:执行mount | grep hugetlbfs检查hugetlbfs文件系统是否挂载。若未挂载,执行:
    mount -t hugetlbfs hugetlbfs /dev/hugepages
    
    并将以下内容添加到/etc/fstab实现永久挂载:
    hugetlbfs /dev/hugepages hugetlbfs defaults 0 0
    
  • 验证动态库是否成功加载:通过ps aux | grep brhclus查看进程的环境变量,或用ldd ./brhclus确认libhugetlbfs.so是否被链接;也可使用strace ./brhclus <args>跟踪动态库加载流程,排查是否有加载失败的错误。
  • 强制启用大页分配:添加HUGETLB_MORECORE=yes环境变量,强制libhugetlbfs接管内存分配:
    HUGETLB_MORECORE=yes LD_PRELOAD=/usr/lib64/libhugetlbfs.so ./brhclus <args>
    
  • 检查应用内存分配逻辑:若应用直接调用mmap、brk等底层内存接口而非标准malloc,LD_PRELOAD机制无法拦截这类调用,需要修改应用代码,显式使用hugetlbfs相关接口分配大页内存。
  • 排查SELinux限制:Rocky Linux 9的SELinux默认策略更严格,可临时执行setenforce 0关闭SELinux测试。若问题解决,需添加对应的SELinux允许规则,避免永久关闭SELinux带来的安全风险。

内容的提问来源于stack exchange,提问作者Fredrik Tegenfeldt

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.02 03:23:25