debain虚拟机内存热插拔不生效问题处理
2023-05-26 11:09 abce 阅读(286) 评论(0) 编辑 收藏 举报vmware中的debain虚拟机开启了内存热插把功能,但是在vmware中给虚拟机增加了内存之后,登录虚拟机发现没有添加成功。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 | # free -g total used free shared buff/cache available Mem: 31 15 9 0 5 12 Swap: 0 0 0 # more /proc/meminfo MemTotal: 32847704 kB MemFree: 10201676 kB MemAvailable: 13127260 kB Buffers: 0 kB Cached: 5881772 kB SwapCached: 0 kB Active: 1547544 kB Inactive: 20420504 kB Active(anon): 492 kB Inactive(anon): 16086724 kB Active(file): 1547052 kB Inactive(file): 4333780 kB Unevictable: 0 kB Mlocked: 0 kB SwapTotal: 0 kB SwapFree: 0 kB Dirty: 4 kB Writeback: 0 kB AnonPages: 16086408 kB Mapped: 70236 kB Shmem: 940 kB KReclaimable: 119396 kB Slab: 207268 kB SReclaimable: 119396 kB SUnreclaim: 87872 kB KernelStack: 7392 kB PageTables: 34600 kB NFS_Unstable: 0 kB Bounce: 0 kB WritebackTmp: 0 kB CommitLimit: 16423852 kB Committed_AS: 27377088 kB VmallocTotal: 34359738367 kB VmallocUsed: 23184 kB VmallocChunk: 0 kB Percpu: 75776 kB HardwareCorrupted: 0 kB AnonHugePages: 0 kB ShmemHugePages: 0 kB ShmemPmdMapped: 0 kB FileHugePages: 0 kB FilePmdMapped: 0 kB HugePages_Total: 0 HugePages_Free: 0 HugePages_Rsvd: 0 HugePages_Surp: 0 Hugepagesize: 2048 kB Hugetlb: 0 kB DirectMap4k: 347968 kB DirectMap2M: 23769088 kB DirectMap1G: 28311552 kB |
列出可用的内存块
1 2 3 4 5 6 7 8 9 | $ lsmem RANGE SIZE STATE REMOVABLE BLOCK 0x0000000000000000-0x00000000bfffffff 3G online yes 0-23 0x0000000100000000-0x000000083fffffff 29G online yes 32-263 0x0000000840000000-0x0000000c3fffffff 16G offline 264-391 Memory block size : 128M Total online memory: 32G Total offline memory: 16G |
添加之前是32G,添加之后还是32G。新加的16G处于offline状态。
内存热插拔分为两个阶段:
1.物理内存热插拔阶段,在VMware中给debain的配置中添加内存后,VMware和内核共同完成了物理内存热插拔
2.逻辑内存热插拔阶段,完成内存状态的改变,使得新增内存可用
系统将内存划分成大小相同的块,可以通过/sys/devices/system/memory/block_size_bytes来指定块大小。内存被按照该块大小分成了多个文件,以/sys/devices/system/memory/memoryXXX的形式存放。逻辑内存热插拔就是通过将这些文件进行online/offline操作实现的。
1 2 | # more /sys/devices/system/memory/block_size_bytes 8000000 |
这里的值是16进制格式的。十六进制的8000000就是128M
1.查看一下可用内存
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 | # lsmem -a RANGE SIZE STATE REMOVABLE BLOCK 0x0000000000000000-0x0000000007ffffff 128M online yes 0 0x0000000008000000-0x000000000fffffff 128M online yes 1 0x0000000010000000-0x0000000017ffffff 128M online yes 2 0x0000000018000000-0x000000001fffffff 128M online yes 3 0x0000000020000000-0x0000000027ffffff 128M online yes 4 0x0000000028000000-0x000000002fffffff 128M online yes 5 0x0000000030000000-0x0000000037ffffff 128M online yes 6 0x0000000038000000-0x000000003fffffff 128M online yes 7 0x0000000040000000-0x0000000047ffffff 128M online yes 8 ...... 0x0000000840000000-0x0000000847ffffff 128M offline 264 0x0000000848000000-0x000000084fffffff 128M offline 265 0x0000000850000000-0x0000000857ffffff 128M offline 266 0x0000000858000000-0x000000085fffffff 128M offline 267 ...... Memory block size : 128M Total online memory: 32G Total offline memory: 16G |
也可以从/sys/devices/system/memory出查看。不过不如lsmem的结果直观
1 2 3 4 5 6 7 8 9 | # grep -r --include="state" "line" /sys/devices/system/memory/ grep -r --include="state" "line" /sys/devices/system/memory/ /sys/devices/system/memory/memory188/state:online /sys/devices/system/memory/memory99/state:online /sys/devices/system/memory/memory121/state:online /sys/devices/system/memory/memory32/state:online /sys/devices/system/memory/memory329/state:offline /sys/devices/system/memory/memory272/state:offline ...... |
2.将offline的内存块改成online
用户可以将未使用的内存块改为online状态,实现热插拔。还可以为内存块选择哪个内存zone。
读取有效的内存zone
1 2 3 4 | # cat /sys/devices/system/memory/memory32/valid_zones Normal # cat /sys/devices/system/memory/memory329/valid_zones Normal Movable |
如果后面还想通过热插拔移除内存,建议将zone设置成Movable zone
内存zone请参考:https://www.ibm.com/docs/en/linux-on-systems?topic=wysk-zones-2#memory_zones
设置成online状态
1 | # echo online_value > /sys/devices/system/memory/memory<n>/state |
这里的n换成上面对应的数字即可。
比如:
1 | # echo online > /sys/devices/system/memory/memory272/state |
online_value的取值有:
1 2 3 | ·online:sets the memory block online to the default zone. The default zone is the first zone listed in the valid_zones sysfs attribute. ·online_movable:sets the memory block online to the Movable zone. Setting the block online fails if the Movable zone is not listed in the valid_zones sysfs attribute. ·online_kernel:sets the memory block online to the first non-Movable zone listed in the valid_zones directory. Setting the block online fails if the Movable zone is the only zone listed in the valid_zones sysfs attribute. |
也可以通过命令chmem -e来修改。具体请参考手册。
对相应的offline内存块进行online操作,完成后内存容量恢复正常。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· DeepSeek 开源周回顾「GitHub 热点速览」
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· AI与.NET技术实操系列(二):开始使用ML.NET
· .NET10 - 预览版1新功能体验(一)
2022-05-26 xtrabackup报错:Failed to connect to MySQL server as DBD::mysql module is not installed at - line 1327
2020-05-26 postgreSQL中timestamp转成date格式
2016-05-26 mysql explain 命令讲解
2016-05-26 mysql explain输出中type的取值说明