精华内容
下载资源
问答
  • 虚拟机 分配内存

    2020-12-10 18:46:40
    在类加载检查通过后,接下来虚拟机将为新生对象分配内存。对象所需的内存大小在类加载完成后便可确定,为对象分配空间的任务等同于把一块确定大小的内存从 Java 堆中划分出来。分配方式有 “指针碰撞” 和 “空闲...
    在类加载检查通过后,接下来虚拟机将为新生对象分配内存。对象所需的内存大小在类加载完成后便可确定,为对象分配空间的任务等同于把一块确定大小的内存从 Java 堆中划分出来。分配方式有 “指针碰撞” 和 “空闲列表” 两种,选择那种分配方式由 Java 堆是否规整决定,而 Java 堆是否规整又由所采用的垃圾收集器是否带有压缩整理功能决定。
    

    内存分配的两种方式:

    • 指针碰撞
    • 空闲列表

    选择以上两种方式中的哪一种,取决于 Java 堆内存是否规整。而 Java 堆内存是否规整,取决于 GC 收集器的算法是 “标记 - 清除”,还是 “标记 - 整理”(也称作 “标记 - 压缩”),值得注意的是,复制算法内存也是规整的

    指针碰撞

    1.适用场合
    堆内存规整,没有内存碎片
    2.原理
    用过的内存全部整合到一边,没有用过的内存放在另一边,中间有一个分界指针,只需要向着没有用过的内存区域移动对象内存大小位置即可
    3.GC收集器
    Serial、parNew

    空闲列表

    1. 适用场合
      堆内存不规整,有内存碎片
    2. 原理
      虚拟机会维护一个列表,该列表会记录那些内存是可用的,在分配的时候找一个足够大的内存区域划分给对象实例,并更新列表
    3. GC收集器
      CMS
      内存分配并发问题

    在创建对象的时候有一个很重要的问题,就是线程安全,因为在实际开发过程中,创建对象是很频繁的事情,作为虚拟机来说,必须要保证线程是安全的,通常来讲,虚拟机采用两种方式来保证线程安全:

    • CAS + 失败重试: CAS 是乐观锁的一种实现方式。所谓乐观锁就是,每次不加锁而是假设没有冲突而去完成某项操作,如果因为冲突失败就重试,直到成功为止。虚拟机采用 CAS 配上失败重试的方式保证更新操作的原子性。
    • TLAB: 为每一个线程预先在 Eden 区分配一块儿内存,JVM 在给线程中的对象分配内存时,首先在 TLAB 分配,当对象大于 TLAB 中的剩余内存或 TLAB 的内存已用尽时,再采用上述的 CAS 进行内存分配
    展开全文
  • 记一次Linux虚拟机分配内存不足的处理方案 起因:公司的服务器是windows的,而我需要一个基于Linux的dev环境,于是用vmvare创建了一个centos7的系统实例,里面安装mysql5.7作为dev环境数据库,安装在根目录,...

    记一次Linux虚拟机硬盘空间不足的处理方案


    **起因:**公司的服务器是windows的,而我需要一个基于Linux的dev环境,于是用vmvare创建了一个centos7的系统实例,里面安装mysql5.7作为dev环境数据库,安装在根目录,后来由于数据量激增,将根目录塞满了,导致mysql无法继续增加数据。
    环境: Centos7-64
    目的:解决根目录空间不足问题,并且不损坏任何数据。

    • 自己折腾了一天了,由于水平有限,跳了很多坑。坑就不写了,下面写解决方案。

    一. 找到问题

    • 使用命令:df -hT查看当前文件系统各种信息。

      这里显示我的根目录已用100%,这就是我这次遇到的问题所在。

    对根目录扩容和对非根目录扩容是两个概念,因为普通目录可以 先杀死目录下进程–>将分区移除挂载–>将分区扩容–>重新挂载–>恢复进程但是根目录不行。根目录里都是系统核心进程。Linux

    二. 用vmvare给虚拟机扩容

    • 关闭虚拟机中的centos7的系统实例
    • 右键–设置–参照下图
      这里写图片描述
    • 但是额外分的这部分存储,还没有应用到虚拟的Centos7实例中。

    三. 分析

    • df -hT命令可以看到根目录被挂载的分区是:/dev/sda3
    • 使用命令:fdisk -l查看磁盘信息,这里我们重点关注/dev/sda3的system这个属性,我这里是Linux,表示是Linux默认的磁盘管理机制。
      这里写图片描述
    • 观察这一点很重要,据我所知,Linux默认的磁盘管理机制这种没办法直接动态扩容,除非杀死/dev/sda3这个分区的挂载点也就是根目录里面运行的进程。
    • 如果是Linux LVM,恭喜你,非常容易扩容,具体操作自行百度,网上很多,简单的操作几个步骤即可。

    鉴于以上分析。很明显,我在不损失任何数据的情况下,没办法对根目录扩容,这时候就准备换个思路。既然是mysql的数据量过大造成根目录满,那我可以新建一个文件夹,然后新建一个分区,将这个分区挂载到这个文件夹上,然后将mysql的数据文件搬过来不就行了。

    四. 新建分区,格式化分区,新建文件夹,挂载

    • 使用fdisk /dev/sda命令,然后输入p按回车,展示当前分区列表,输入m按回车,可以查看help操作,一看就懂的。【注意:我这里命令中的/dev/sda是分区名,请不要照抄,自行对号入座
    • 使用n新建分区,分区号默认是当前已有最大分区号+1,分区start,分区end都选默认就行。我这里新建的是sda4分区。【注意:这里的前提是你的主分区或者拓展分区还有空位置
    • 使用w保存你的操作,使用q退出
    • 如果分区顺利建完,可以用fdisk -l看到你刚刚建的分区了
    • 分区格式化:首先,通过df -hT查看分区的文件系统类型,因为我要转移的mysql数据文件来自/dev/sda3分区,它的类型是xfs,所以sda4分区就要使用xfs格式格式化了,格式化命令mkfs -f xfs /dev/sda4
    • 新建文件夹:mkdir /usr/mysql-data,【这里你可以自定义】
    • 挂载:mount /dev/sda4 /usr/mysql-data

    五. 将新建的分区,设置为开机自动挂载

    • 查看分区id:ls -l /dev/disk/by-uuid/
    • 修改vim /etc/fstab, 最小码新写一行,如下【uuid请换掉
    UUID=4366aadb-6ee8-46cd-8708-b4e2f70b2860 /usr/mysql-data         xfs     defaults        0 0
    
    • 重启:reboot
    • 使用df -hT查看,可以看到新建的分区挂载到新建的文件夹上了,完美,可以继续下一步

    这一节很重要,另外,fstab里面的格式一定要对齐

    六. 对mysql的一些操作

    • 通知相关人员,我要暂时关闭mysql
    • 停止mysql:systemctl stop mysqld
    • copy文件:```cp -r /var/lib/mysql /usr/mysql-data/mysql``
    • 修改/etc/my.cnf文件中的两个属性,如下
    #datadir=/var/lib/mysql
    datadir=/usr/mysql-data/mysql
    #socket=/var/lib/mysql/mysql.sock
    socket=/usr/mysql-data/mysql/mysql.sock
    
    • 启动mysql:systemctl start mysqld
    • 尝试使用命令行或者navicat等连接mysql查看是否能连接,数据库是否缺失

    七. 收尾工作

    • 删除/var/lib/mysql下面的内容:rm -rf /var/lib/mysql/
    • 查看空间:df -hT,看根目录是否有空间了
      这里写图片描述
    • 再次确认无误后,通知相关人员,mysql可以继续使用了。


    如果是LVM的,按下列操作

    1. sudo su获取管理员权限
    2. fdisk -l查看当前disk容量
    3. 去vcenter或vmware workstation扩容该虚拟机的某个disk(以VmWare为例)
    4. cat /proc/scsi/scsi查看scsi, 选择Vendor: VMware Model: Virtual disk的;然后重点看Host字段
    5. ls /sys/class/scsi_device/查看scsi device
    6. echo 1 > /sys/class/scsi_device/0\:0\:0\:0/device/rescan重新扫描scsi(0000取决于4和5, 0:0:0:0 —> x,x,bus,unit)
    7. fdisk -l能看到容量已经出来了(若是vCenter,开不开datastore scsi control不影响)
    8. fdisk /dev/sda添加分区
    9. p n p [enter] [enter] w按顺序依次敲击键盘
    10. fdisk /dev/sda; t 4 8e w(更改分区类型为LVM, 4是刚刚新建的分区编号)按顺序依次敲击键盘
      敲完后会提示:the next reboot or after you run partprobe(8) or kpartx(8)
    11. partprobe通知系统分区表的变化
    12. lvm进入卷管理
    13. pvcreate /dev/sda4创建物理卷(4是刚刚新建的分区编号)
    14. pvdisplay查看物理卷是否创建成功
    15. vgscan查看是否有vg
    16. vgextend rootvg /dev/sda4(动态扩展LVM卷组;rootvg来自15,/dev/sda4是新加的分区 )
    17. lvextend -L +30G /dev/mapper/rootvg-lv_root给磁盘分配空间(磁盘名称来自fdisk -l)
    18. quit退出lvm
    19. xfs_growfs /dev/mapper/rootvg-lv_root扩容文件系统
    20. df -hfdisk -l查看验证扩容成功


    本篇很多名词可能解释的不专业或者错误,望海涵。

    展开全文
  • 计算节点为虚拟机分配内存时预留内存设置   reserved_host_memory_mb=7680
    计算节点为虚拟机分配内存时预留内存设置
     

    reserved_host_memory_mb=7680

    展开全文
  • kvm 虚拟机分配内存和cpu

    千次阅读 2019-07-24 11:38:50
    虚拟机不关机修改,否则会显示找不到cpu文件 ①切换管理员用户 sudo su ②找到虚拟机文件 cd /etc/libvirt/qemu/XXX.xml ③编辑文件 修改memory 和 vcpu ④关闭虚拟机 virsh shutdown XXX(去掉xml)(始终在/etc/...

    虚拟机不关机修改,否则会显示找不到cpu文件
    ①切换管理员用户 sudo su
    ②找到虚拟机文件 cd /etc/libvirt/qemu/XXX.xml
    ③编辑文件 修改memory 和 vcpu
    ④关闭虚拟机 virsh shutdown XXX(去掉xml)(始终在/etc/libvirt/qemu文件夹下)
    ⑤启动虚拟机 virsh start XXX(去掉xml)(始终在/etc/libvirt/qemu文件夹下)

    展开全文
  • **公司目前只给配置了一台Windows主机(老抠啦公司),然后在Windows上安装一个Ubuntu虚拟机(安装软件还要公司IT把控),但是硬盘开始分配小了......,不够用就自己再次分配硬盘。** 1 **首先在启动虚拟机的界面...
  • 在类加载检查通过后,接下来虚拟机将为新生对象分配内存。对象所需的内存大小在类加载完成后便可确定,为对象分配空间的任务等同于把一块确定大小的内存从 Java 堆中划分出来。分配方式有 “指针碰撞” 和 “空闲...
  • 虚拟机内存分配

    2013-07-22 16:42:00
    想不起来在哪里看的了,说在给虚拟机分配内存时,实际上就是分配的宿主机的物理内存,也就是说,分配2G的内存,那么宿主机2G的内存就被虚拟机永久占用了。而64位的系统也要占用大概1G多的内存,所以导致宿主机的内存...
  • 在使用libvirt给虚拟机分配内存大小时,涉及到memory和currentMemory两个字段,很多人都有这个疑惑,为什么需要两个呢。其实是和内存气泡动态调整内存有关系的。简单的来说,memory是虚拟机启动时分配给的内存...
  • public class MemoryDemo { ... //返回虚拟机使用的最大内存 long max = Runtime.getRuntime().maxMemory();//字节 1024*1024 //返回JVM的初始化总内存 long total = Runtime.getRuntime().totalMemory(); Syste
  • virtulbox修改虚拟机分配内存大小

    千次阅读 2018-07-20 16:49:49
    最近由于某个虚拟机最开始分配内存太小,特别卡,所以有此需求,方法如下: 1.进入virtualbox安装目录下 在cmd中进入到virtualbox安装目录下,查看目前的虚拟机列表: VBoxManage list vms 2.读取虚拟机具体...
  • Java虚拟机内存分配

    2017-08-31 19:45:16
    Java虚拟机内存分配方式
  • Java虚拟机内存分配与回收策略 导语:在前几篇博客中我们也特别详细的介绍了Java虚拟机的运行时数据区域和Java虚拟机的垃圾回收,我们知道在Java虚拟机中,对于内存分配或者回收也是十分重要的,我们需要考虑在...
  • 虚拟机如何分配内存和CPU

    千次阅读 2014-08-22 16:41:00
    一般虚拟机分配1G内存足够 但要多分配些CPU,可与主机处理器数相同 cpu使用率一般不会很高,但虚拟机内存分配太多主机会很卡 虚拟机处理器少,内存再多也没用 转载于:...
  • 现在的虚拟机都是基于堆栈来管理内存的,内存分配主要是在堆上发生。所以研究这一阶段时,需要知道怎么设置一下虚拟机堆的大小。 虚拟机时通过虚拟机参数动态的来设定所有的参数大小。在IDEA中: 找到这里,编辑...
  • java虚拟机对象内存分配的规则 1.对象优先在新生代eden区分配,当eden区没有足够的空间的时候,虚拟机将发起一次minor GC Minor GC发生在新生代的GC,Major GC发生在老年代的GC 2.大对象直接进行老年代,避免eden...
  • 优先分配到eden 大对象直接分配到老年代 长期存活的对象分配到老年代 空间分配担保 动态对象年龄判断 逃逸分析与栈上分配
  • java虚拟机内存分配

    2018-05-04 16:33:48
    由于java虚拟机的多线程是通过线程轮流切换并分配处理器执行时间的方式来实现的,在任何一个确定的时刻,一个处理器都只会执行一条线程中的指令。因此,为了线程切换后能恢复到正确的执行位置,每条线程都需要有一个...
  • java虚拟机内存分配和垃圾回收 写这篇文章主要是记录我这2天学习的java虚拟机内存分配和垃圾回收原理,也方便以后知识的回顾。 “不积跬步,无以至千里;不积小流,无以成江海。” 也真心感谢有很多大佬分享...
  • Java中提倡的自动内存管理机制最终可以归结为自动化的解决两个问题:给对象分配内存和回收分配给对象的内存。在之前的博客中已经详细讲解了内存回收体系及原理,下面我们来探讨给对象分配内存那些事儿。  对象的...
  • java虚拟机内存分配主要分类两部分,线程共享区和线程独占区 1、线程共享区 2、线程独占区 3、1.8版本虚拟机内存架构调整 4、直接内存和运行时常量池 运行时常量池,就是运行时产生的常量。代码中...
  • Java 虚拟机内存分配机制

    千次阅读 2017-09-15 15:34:45
    Java 虚拟机内存分配机制 内存区域划分 对于大多数的程序员来说,Java 内存比较流行的说法便是堆和栈,这其实是非常粗略的一种划分,这种划分的“堆”对应内存模型的 Java 堆,“栈”是指虚拟机栈,然而 Java ...
  • 深入理解java虚拟机内存结构和内存分配 摘要:本文主要讲解JVM的内存结构和内存分配,首先是逻辑上的内存模型,分为三大块:方法区、堆内存以及栈内存,然后是内存分配策略,对象的创建/布局/访问,堆/栈的区别...
  • JAVA虚拟机内存分配机制 详细讲述了JAVA VM的内存分配 对深入理解JAVA有帮助

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 15,123
精华内容 6,049
关键字:

虚拟机分配内存