虚拟机

JVM层GC调优(上)

混江龙づ霸主 提交于 2020-03-01 16:47:10
JVM内存结构简介(jdk1.8) JVM层的GC调优是生产环境上必不可少的一个环节,因为我们需要确定这个进程可以占用多少内存,以及设定一些参数的阀值。以此来优化项目的性能和提高可用性,而且这也是在面试中经常会被问到的问题。 想要进行GC调优,我们首先需要简单了解下JVM的内存结构,Java虚拟机的规范文档如下: https://docs.oracle.com/javase/specs/jvms/se8/html/index.html 在介绍JVM内存结构之前,我们需要先知道 运行时数据区 这样的一个东西,它与JVM的内存结构有着一定的关联。不过它属于是一个规范,所以与JVM内存结构是有着物理上的区别的。运行时数据区如下: 1.程序计数器(Program Count Register,简称PC Register): JVM支持多线程同时执行,每一个线程都有自己的PC Register。当每一个新线程被创建时,它都将得到它自己的PC Register。线程正在执行的方法叫做当前方法。如果执行的是Java方法,那么PC Register里存放的就是当前正在执行的指令的地址,如果是native方法(C/C++编写的方法),则是为空。此内存区域是唯一一个在java虚拟机规范中没有规定任何OutOfMemoryError情况的区域。 2.虚拟机栈(JVM Stacks): Java虚拟机栈

JVM内存结构

天大地大妈咪最大 提交于 2020-03-01 16:41:22
1.jdk、jre、jvm jdk包含jre,jre包含jvm. jdk是一个合集,包括一些编译工具 jre是Java运行环境,包含一些插件 jvm是最基础的,做翻译的,将class翻译成操作系统是的指令(0101) 2.运行时数据区 线程私有 :程序计数器、虚拟机栈、本地方法栈 线程共享 :堆、方法区 程序计数器 (唯一不会OOM的区域):记录指向当前线程正在执行的字节码指令的地址(行号) Java是多线程的,意味着线程切换,确保多线程情况下的程序正常执行。 栈 (stack):一种数据结构 为什么jvm要使用栈?答:更好的兼容方法调用方法的特点。 虚拟机栈 (大小设置 -Xss 1M,虚拟机栈就是在栈数据结构上的一个种拓展):存储当前线程运行方法所需的数据,指令、返回地址 栈帧 :多个方法,每个方法就是一个栈帧 方法转换为字节码,在虚拟机中运行过程 栈默认大小为1M,StackOverFlowError(栈溢出)的出现是因为方法死递归调用本方法,导致内存超出1M。 OOM栈内存溢出,很多线程在跑,10万个线程栈空间就是10万*1M,导致内存不足。 本地方法栈 :是保存的native方法信息,jvm调用后,jvm不为其在虚拟机中创建栈帧,jvm只是简单动态并直接调用native方法。 方法区 (永久代jdk1.7及以前,元空间jdk1.8):存放类信息、常量(final)

java内存区域----运行时数据区

别等时光非礼了梦想. 提交于 2020-03-01 16:14:59
Java虚拟机的内存区域也叫做java运行时数据区,共分为五个部分:程序计数器,方法区,本地方法栈,虚拟机栈和堆。方法区和堆是线程之间所共有的,程序计数器,本地方法栈,虚拟机栈是线程私有的。其中虚拟机栈和堆是程序员日常谈论最多也是最关注的一部分。 程序计数器:程序计数器就是指向当前线程要执行的字节码。字节码解释器通过改变这个值来选取下一条需要执行的字节码指令,分支,循环,跳转,异常处理,线程恢复等都需要依赖计数器来完成。每一个线程都拥有一个计数器,互不影响。(注:如果线程正在执行的是一个java方法,这个计数器记录的是正在执行的虚拟字节码指令的地址,如果正在执行的是本地方法,这个计数器值为空,此内存区域是唯一一个在《java虚拟机规范》中没有规定任何OutOfMemoryError情况的区域)。通俗点说程序计数器就是用来指示我该执行哪条字节码指令了。 方法区:各个线程共享的内存区域,用于存储被虚拟机加载的类型信息,常量,静态变量,即时编译器编译后的代码缓存,运行时常量池等数据。(注:《java虚拟机规范》中把方法区描述为堆的一个逻辑部分,但是它却有一个别名叫“非堆”,目的是与java堆区分开来)。方法区不需要使用连续的内存,可以选择固定大小或者对外扩展,甚至可以选择不实现垃圾收集。这个区域的内存回收目标主要是针对常量池的回收和对类型的卸载。运行时常量池是方法区的一部分

Redis集群的搭建

北城以北 提交于 2020-03-01 13:30:35
1、安装Redis 下载文件 http://download.redis.io/releases/redis-3.0.7.tar.gz 解压redis,tar xzvf redis-3.0.7.tar.gz 编译再安装 make ; make install 安装完毕后,用命令redis-server –version和redis-cli –version应能看到服务端和客户端已启动 1.1 安装ruby,因为我们使用redis的src目录下的redis-tri脚本帮助集群管理 yum install ruby ruby-devel rubygems rpm-build 如果报错说依赖ruby(abi) = 1.8和ruby-rdoc,则执行yum install ruby-rdoc和yum install ruby-libs 1.2 安装redis gem gem install redis 如果网络连接失败,则先下载 https://rubygems.global.ssl.fastly.net/gems/redis-3.0.7.gem 然后进入下载目录,手动安装gem install -l ./redis-3.0.7.gem 1.3 关闭防火墙 由于使用过程会涉及到很多端口的开放,最好关闭防火墙 使用命令service iptables stop或者systemctl stop

SR-IOV——网卡直通技术

隐身守侯 提交于 2020-03-01 10:37:29
相关技术 IO虚拟化简介 全虚拟化 通过VMM来模拟IO设备实现,VMM截获GuestOS的IO请求,通过软件模拟真实的硬件。VMM必须处理所有虚机的IO请求,然后将所有的IO情况序列化为可以被底层硬件处理的单一IO流。好处是GuestOS不需要考虑硬件设备的情况。问题是效率相对较低。例如 qemu。 一个完整的数据包从虚拟机到物理机的路径是:虚拟机--QEMU虚拟网卡--虚拟化层--内核网桥--物理网卡。 半虚拟化 通过前端和后端模拟实现虚拟化。GuestOS中的半虚拟化驱动为前端,VMM 提供的与GuestOS 通讯的驱动程序为后端。前端驱动将GuestOS的请求通过与VMM之间的特殊通信机制发生给VMM后端需求,后端驱动处理完IO请求之后再发送给物理驱动。全虚拟化为了完成一次操作要涉及到多个寄存器的操作,使得VMM要截获每个寄存器访问并进行相应的模拟,就会导致多次上下文切换。这种方式能很大程度的减少上下文切换的频率,提供更大的优化空间。例如 virtio 。 全虚拟化网卡是虚拟化层完全模拟出来的网卡,半虚拟化网卡通过驱动对操作系统做了改造; 软件的共享IO虚拟化技术 硬件辅助的IO虚拟化主要包括英特尔VT-d, AMD的IOMMU(AMD-Vi)和PCI-SIG 的SR-IOV。前两种属于Directed I/O。物理设备直接分配给虚拟机使用,通过硬件芯片完成GPA到MA

CentOS 7 连接不到网络解决方法

安稳与你 提交于 2020-03-01 09:57:04
使用VM12创建虚拟机并安装CentOS 7,但是安装完成后发现连接不到网络。 ping jd.com发现不通 因为在创建虚拟机的时候我们选择的是NAT模式 这里给出NAT模式下对应的的解决方法: 一、在vm虚拟机中 按照 编辑->虚拟网络编辑器 然后点击NAT设置,进入下一个界面,并进行网关的设置。 更改完成后,进行应用 二、在shell中输入ip addr 这里我的是ens33,这个名字将在下一步中用到 三、1. vi /etc/sysconfig/network-scripts/ifcfg-ens33 这里注意:最后ens33的参数是我们在第二步得到名字,这里要根据的具体情况进行相对应的更改。 按照如下图所示红色框框标记出来的部分进行更改 2. vi /etc/resolv.conf 按照如下图所示进行修改,这里需要注意的是要按照之前设置的DNS值进行相对应的修改 3. vi /etc/sysconfig/network 按照如下图所示进行相对应的修改 四、最后输入 service network restart 问题解决 来源: CSDN 作者: 网络笨猪 链接: https://blog.csdn.net/lyfqyr/article/details/104581023

在虚拟机VMware Workstation 15pro上安装ubuntu 1804出现安装不了的问题

你离开我真会死。 提交于 2020-03-01 09:54:21
笔者在用虚拟机安装ubuntu时死活安装不了,总是卡在语言选择界面,数次安装,数次失败。查询发现自己的电脑显卡是1050Ti,与虚拟机有冲突。 [看到](https://blog.csdn.net/qq_41199831/article/details/83860126)这篇帖子,我得到了不少启发,我的解决方法与他不同,现传授于大家。 在虚拟机内启动ubuntu,然后赶紧**按e**,这时会出现语言选择,选择英文即可,按ESC退出,出现数个选项: try ubuntu without install... ubuntu intall... ... 这时千万别选择ubuntu install,直接选择**try ubuntu without install**,然后回车,进入安装,这时会进入到ubuntu图形化界面,桌面上有一个ubuntu intall之类的软件,这时可以双击它进行安装,之后就会与正常的安装一样。 来源: CSDN 作者: BlackShoes 链接: https://blog.csdn.net/BlackShoes/article/details/104574804

第一章 java发展史

拥有回忆 提交于 2020-03-01 09:22:28
java虚拟机发展史: Sun Classic VM "世界上第一款商用Java虚拟机" jdk1.0 使用纯解释器方式执行java代码 效率低 jdk1.2之前时sun jdk 唯一的虚拟机 Exact VM 使用 准确式内存管理 (虚拟机可以知道内存中某个位置的数据的具体类型) (速度有了提升) jdk1.2 classic VM 和 HotSpot VM并存,默认是Classic VM jdk1.3 hotspot vm 默认虚拟机,classic vm 备选 jdk1.4 classic vm和exact vm 不在使用 Sun HotSpot VM 继承之前两款虚拟机的优点:准确式内存管理 还有: 热点代码探测技术 (通过执行计数器找出最具有编译价值的代码,然后通过JIT编译器以方法为单位进行编译,如果一个方法被频繁调用, 或方法中有效循环次数很多,将会分别触发标准编译和(栈上替换)编译动作。) Oracle:jdk8 在HotSpot基础上,移植JRockit的优秀特性,比如JRockit的垃圾回收器和MissionControl服务。 Microsoft JVM 此处只想说,真的好可惜,商业的竞争很残酷。 多核并行 jdk1.5 java.util.concurrent 粗粒度的并发框架 jdk1.7 java.util.concurrent.forkjoin

docker介绍篇

时间秒杀一切 提交于 2020-03-01 09:21:13
相关地址 docker 官网:https://www.docker.com/ 官方文档:https://docs.docker.com/install/linux/docker-ce/centos/ 中文文档:http://www.dockerinfo.net/document docker仓库:https://hub.docker.com/ 阿里云仓库:https://cr.console.aliyun.com/cn-shanghai/instances/repositories docker 介绍 Docker 是基于 Go 语言实现的开源容器项目,一种容器技术,目前已有 80 多个相关开源组 件项目(包括 Containerd Moby Swarm 等),逐渐形成了围 Docker 容器的完整的生态体系 Docker 的构想是要实现“ Build Ship and Run Any App, Anywhere ”,即通过对应用的封 装( Packaging )、分发( Distribution )、部署( Deployment )、运行( Runtime )生命周期进行管理,达到应用组件级别的“一次封装 ,到处运行” 这里的应用组件, 既可以是一个 Web 用、一个编译环境,也可以是一套数据库平台服务,甚至是一个操作系统或集群。 实现Devops的工具。 与虚拟机的区别

虚拟磁盘空间不足虚拟电脑运行发生错误的原因及解决

十年热恋 提交于 2020-03-01 08:29:39
我用virtualBox装了一台Centos虚拟机,20G空间的动态扩展的虚拟硬盘,今天突然提示错误: 虚拟电脑运行发生错误! 详细的错误信息显示在下面. 你可以试着修复这个描述的错误并恢复虚拟电脑的运行. The I/O cache encountered an error while updating data in medium "ahci-0-0" (rc=VERR_DISK_FULL). make sure there is enough free space on the disk and that the disk is working properly. Opera tion can be resumed afterwards. 错误 ID: BLKCACHE_IOERR 严重: 非致命性错误 虚拟磁盘文件.vol约4G大小,但剩余物理磁盘空间还有80多G足够用了,这是怎么回事呢? 我查了查资料,发现了问题,我的电脑的文件系统是FAT32,支持的最大文件为4G,这正好与虚拟磁盘文件.vol的大小相符,当虚拟磁盘因需要动态扩展时,由于FAT32最大支持4G文件,所以导致虚拟磁盘无法扩容,所以VirtualBox出现上述错误,提示空间不足。 解决思路: 解决思路就是将FAT32文件系升级为NTFS文件系统即可,通过命令执行转换后,不影响磁盘上现有的数据。注意