KVM的热添加技术之内存

简介: 文章介绍了KVM虚拟化技术中如何通过命令行调整虚拟机内存配置,包括调小和调大内存的步骤,以及一些相关的注意事项。

作者:尹正杰
版权声明:原创作品,谢绝转载!否则将追究法律责任。

一.调小虚拟机内存配置案例

1.查看虚拟机现有的内存配置

[root@yinzhengjie-kvm189 ~]# virsh list
 Id    Name                           State
----------------------------------------------------
 2     yinzhengjie-kvm01              running

[root@yinzhengjie-kvm189 ~]# 
[root@yinzhengjie-kvm189 ~]# virsh edit yinzhengjie-kvm01 
<domain type='kvm'>
  ...(很明显,我的虚拟机内存应该只有2GB)
  <memory unit='KiB'>2097152</memory>
  <currentMemory unit='KiB'>2097152</currentMemory>
  ...

2.验证虚拟机内存大小

[root@yinzhengjie-kvm189 ~]# virsh list
 Id    Name                           State
----------------------------------------------------
 2     yinzhengjie-kvm01              running

[root@yinzhengjie-kvm189 ~]# 
[root@yinzhengjie-kvm189 ~]# virsh console yinzhengjie-kvm01 
Connected to domain yinzhengjie-kvm01
Escape character is ^]

[root@yinzhengjie-kvm01 ~]# free 
              total        used        free      shared  buff/cache   available
Mem:        2046820      178792     1730784       41460      137244     1703180
Swap:             0           0           0
[root@yinzhengjie-kvm01 ~]# 
[root@yinzhengjie-kvm01 ~]# free -h
              total        used        free      shared  buff/cache   available
Mem:           2.0G        174M        1.7G         40M        134M        1.6G
Swap:            0B          0B          0B
[root@yinzhengjie-kvm01 ~]#

3.调整虚拟机的内存

[root@yinzhengjie-kvm189 ~]# virsh list
 Id    Name                           State
----------------------------------------------------
 2     yinzhengjie-kvm01              running

[root@yinzhengjie-kvm189 ~]# 
[root@yinzhengjie-kvm189 ~]# virsh dumpxml yinzhengjie-kvm01 | egrep "memory|currentMemory"
  <memory unit='KiB'>2097152</memory>
  <currentMemory unit='KiB'>2097152</currentMemory>
[root@yinzhengjie-kvm189 ~]# 
[root@yinzhengjie-kvm189 ~]# virsh setmem yinzhengjie-kvm01 4096M
error: invalid argument: cannot set memory higher than max memory

[root@yinzhengjie-kvm189 ~]# 
[root@yinzhengjie-kvm189 ~]# virsh setmem yinzhengjie-kvm01 1024M

[root@yinzhengjie-kvm189 ~]# 
[root@yinzhengjie-kvm189 ~]# virsh dumpxml yinzhengjie-kvm01 | egrep "memory|currentMemory"
  <memory unit='KiB'>2097152</memory>
  <currentMemory unit='KiB'>1048576</currentMemory>
[root@yinzhengjie-kvm189 ~]#

4.调整虚拟机内存后进行验证

[root@yinzhengjie-kvm189 ~]# virsh list
 Id    Name                           State
----------------------------------------------------
 2     yinzhengjie-kvm01              running

[root@yinzhengjie-kvm189 ~]# 
[root@yinzhengjie-kvm189 ~]# virsh console yinzhengjie-kvm01 
Connected to domain yinzhengjie-kvm01
Escape character is ^]

[root@yinzhengjie-kvm01 ~]# free -h
              total        used        free      shared  buff/cache   available
Mem:           974M        174M        666M         40M        134M        639M
Swap:            0B          0B          0B
[root@yinzhengjie-kvm01 ~]# 
[root@yinzhengjie-kvm01 ~]# free 
              total        used        free      shared  buff/cache   available
Mem:         998244      178264      682760       41460      137220      655148
Swap:             0           0           0
[root@yinzhengjie-kvm01 ~]#

二.调大虚拟机内存配置案例

1.手动方式修改虚拟机内存配置

[root@yinzhengjie-kvm189 ~]# virsh list --all
 Id    Name                           State
----------------------------------------------------
 2     yinzhengjie-kvm01              running

[root@yinzhengjie-kvm189 ~]# 
[root@yinzhengjie-kvm189 ~]# virsh destroy yinzhengjie-kvm01 
Domain yinzhengjie-kvm01 destroyed

[root@yinzhengjie-kvm189 ~]# 
[root@yinzhengjie-kvm189 ~]# virsh list --all
 Id    Name                           State
----------------------------------------------------
 -     yinzhengjie-kvm01              shut off

[root@yinzhengjie-kvm189 ~]# 
[root@yinzhengjie-kvm189 ~]# virsh edit yinzhengjie-kvm01 
<domain type='kvm'>
  <name>yinzhengjie-kvm01</name>
  ...
  <memory unit='MiB'>4096</memory>
  <currentMemory unit='KiB'>2097152</currentMemory>
  ...


温馨提示:
    修改后,重新打开虚拟机,你会发现虚拟机的内存限制的单位依旧是KB哟~

2.基于命令行方式修改虚拟机内存配置

[root@yinzhengjie-kvm189 ~]# virsh list --all
 Id    Name                           State
----------------------------------------------------
 -     yinzhengjie-kvm01              shut off

[root@yinzhengjie-kvm189 ~]# 
[root@yinzhengjie-kvm189 ~]# virsh setmaxmem yinzhengjie-kvm01 8192M

[root@yinzhengjie-kvm189 ~]# 
[root@yinzhengjie-kvm189 ~]# virsh edit yinzhengjie-kvm01 
<domain type='kvm'>
  <name>yinzhengjie-kvm01</name>
  ...
  <memory unit='KiB'>8388608</memory>
  <currentMemory unit='KiB'>2097152</currentMemory>
...

3.手动修改虚拟机内存上限

    1.修改内存前查看虚拟机状态
[root@yinzhengjie-kvm189 ~]# virsh list --all
 Id    Name                           State
----------------------------------------------------
 -     yinzhengjie-kvm01              shut off

[root@yinzhengjie-kvm189 ~]# 
[root@yinzhengjie-kvm189 ~]# virsh start yinzhengjie-kvm01 
Domain yinzhengjie-kvm01 started

[root@yinzhengjie-kvm189 ~]# 
[root@yinzhengjie-kvm189 ~]# virsh console yinzhengjie-kvm01 
Connected to domain yinzhengjie-kvm01
Escape character is ^]

CentOS Linux 7 (Core)
Kernel 3.10.0-1160.el7.x86_64 on an x86_64

yinzhengjie-kvm01 login: root
Password: 
Last login: Wed Apr 10 17:55:50 on ttyS0
[root@yinzhengjie-kvm01 ~]# 
[root@yinzhengjie-kvm01 ~]# free -h
              total        used        free      shared  buff/cache   available
Mem:           1.8G        332M        1.4G        8.5M         97M        1.3G
Swap:            0B          0B          0B
[root@yinzhengjie-kvm01 ~]# 


    2.修改内存上限为4GB
[root@yinzhengjie-kvm189 ~]# virsh setmem yinzhengjie-kvm01 4096M

[root@yinzhengjie-kvm189 ~]# 
[root@yinzhengjie-kvm189 ~]# virsh console yinzhengjie-kvm01 
Connected to domain yinzhengjie-kvm01
Escape character is ^]

[root@yinzhengjie-kvm01 ~]# 
[root@yinzhengjie-kvm01 ~]# free -h
              total        used        free      shared  buff/cache   available
Mem:           3.8G        330M        3.4G        8.5M         97M        3.3G
Swap:            0B          0B          0B
[root@yinzhengjie-kvm01 ~]#

三.其他注意事项

1.内存的永久配置

修改当前内存的两种方式:
    - 临时配置
virsh setmem yinzhengjie-kvm01 4096M

    - 永久配置
virsh setmem yinzhengjie-kvm01 4096M --config



修改内存上限的两种方式:
    - 临时配置
virsh setmaxmem yinzhengjie-kvm01 8192M

    - 永久配置
virsh setmaxmem yinzhengjie-kvm01 8192M --config

2.创建虚拟机时指定内存上限

    1.只指定“--memory”参数时,默认是2GB
virt-install --virt-type kvm \
    --os-type=linux \
    --os-variant rhel7 \
    --name yinzhengjie-kvm01 \
    --memory 2048 \
    --vcpus 2 \
    --disk /opt/yinzhengjie-kvm01.raw,format=raw,size=10 \
    --cdrom /opt/CentOS-7-x86_64-DVD-2009.iso \
    --network  network=default \
    --graphics vnc,listen=0.0.0.0 \
    --noautoconsole


    2.使用"--maxmemory"指定最大的内存上限
virt-install --virt-type kvm \
    --os-type=linux \
    --os-variant rhel7 \
    --name yinzhengjie-kvm01 \
    --memory 2048,--maxmemory=2048 \
    --vcpus 2 \
    --disk /opt/yinzhengjie-kvm01.raw,format=raw,size=10 \
    --cdrom /opt/CentOS-7-x86_64-DVD-2009.iso \
    --network  network=default \
    --graphics vnc,listen=0.0.0.0 \
    --noautoconsole

3.其他注意事项

- 创建虚拟机时,虚拟机的最大内存不能超过该虚拟机所在宿主机的最大内存。
    举个例子: 
        目前有2台128GB内存的主机,那么能够实现创建一个256GB内存的虚拟机呢?答案是否定的。
        虚拟机最大的内存应该小于128GB,因为宿主机的操作系统也是要占用一定内存的。
        若真能实现,就不会淘汰旧的机器了,而且就算基于网络实现了该功能,那么性能估计会巨差且稳定性不高。
        因为CPU的频率是GB赫兹,而网卡的传输速度万兆速度,完全不在一个维度。

- 在云平台购买虚拟机的时候,都会有最高限制,这是因为创建的虚拟机不得超过该虚拟机所在宿主机的总内存。
目录
相关文章
|
2月前
ARM64技术 —— MMU处于关闭状态时,内存访问是怎样的?
ARM64技术 —— MMU处于关闭状态时,内存访问是怎样的?
|
3月前
|
KVM 虚拟化
[kvm]cpu内存硬盘配置
[kvm]cpu内存硬盘配置
|
4月前
|
机器学习/深度学习 存储 缓存
操作系统中的内存管理技术
在数字世界的复杂架构中,操作系统扮演着枢纽的角色,其中内存管理作为其核心组件之一,保障了计算资源的高效利用与稳定运行。本文将深入探讨操作系统中内存管理的关键技术,包括虚拟内存、分页和分段机制,以及现代操作系统如何通过这些技术优化性能和提高系统稳定性。通过具体实例和数据分析,我们将揭示这些技术如何在实际应用中发挥作用,并讨论它们面临的挑战及未来发展方向。 【7月更文挑战第16天】
85 6
|
4月前
|
存储 缓存 Java
Android性能优化:内存管理与LeakCanary技术详解
【7月更文挑战第21天】内存管理是Android性能优化的关键部分,而LeakCanary则是进行内存泄漏检测和修复的强大工具。
|
4月前
|
物联网 云计算
操作系统中的内存管理技术解析
【7月更文挑战第13天】本文将深入探讨操作系统中至关重要的内存管理技术,包括虚拟内存、分页和分段机制等核心概念。我们将从内存管理的基本原理出发,逐步过渡到高级技术如交换空间和文件映射,最后讨论现代操作系统中内存管理面临的挑战与未来发展方向。文章旨在为读者提供对操作系统内存管理全面而深入的理解。
66 7
|
4月前
|
存储 缓存 NoSQL
Java中的内存数据库与缓存技术
Java中的内存数据库与缓存技术
|
5月前
|
存储 算法
探索现代操作系统中的虚拟内存管理技术
在数字时代的浪潮中,操作系统的心脏——虚拟内存管理技术,正以它独有的韵律跳动。本文将带你穿梭于操作系统的迷宫,揭开虚拟内存如何巧妙地扩展有限的物理内存之谜。从分页机制的精妙设计到交换空间的策略运用,我们将一探究竟。你将看到,虚拟内存不仅仅是一个存储数据的地方,它是速度与效率的协调者,是多任务处理的幕后英雄。随着技术的演进,虚拟内存管理不断优化,为应用程序提供了一片更为广阔的运行天地。让我们一同走进这个充满智慧的世界,感受操作系统中虚拟内存管理的魅力所在。
52 1
|
4月前
|
存储 缓存 安全
操作系统中的内存管理:技术与挑战
在数字化时代,操作系统的内存管理成为计算机科学领域中一个至关重要的技术环节。本文将深入探讨现代操作系统中内存管理的基本原理、关键技术及其面临的挑战。通过对分页、分段、虚拟存储和缓存策略等核心概念的介绍,我们旨在揭示内存管理如何优化系统性能,保障数据安全,并提高资源利用率。同时,文章还将讨论内存泄漏、碎片化以及安全性问题等当前内存管理技术所面临的主要挑战。
67 0
|
4月前
|
存储 监控 安全
探索现代操作系统中的内存管理技术
【7月更文挑战第12天】在数字世界的心脏,操作系统扮演着至关重要的角色。本文将深入探讨内存管理技术,这一操作系统中的核心组件。我们将从基础的内存结构入手,逐步解析虚拟内存、分页和分段等高级概念。文章旨在为读者提供一个清晰的内存管理机制视图,并讨论其在性能优化和系统安全中的应用。通过分析现代操作系统如Linux和Windows的内存管理策略,我们可以更好地理解这些复杂系统的内部工作原理及其对计算领域的影响。
|
5月前
|
存储 消息中间件 缓存
Redis:内存数据存储与缓存系统的技术探索
**Redis 概述与最佳实践** Redis,全称Remote Dictionary Server,是流行的内存数据结构存储系统,常用于数据库、缓存和消息中介。它支持字符串、哈希、列表等数据结构,并具备持久化、主从复制、集群部署及发布/订阅功能。Redis适用于缓存系统、计数器、消息队列、分布式锁和实时系统等场景。最佳实践包括选择合适的数据结构、优化缓存策略、监控调优、主从复制与集群部署以及确保安全配置。
104 3