如何将虚拟机怎么快照的当前内存快照并保存

当前位置: →
不浪费磁盘空间删除虚拟机快照
虚拟机快照是保留和恢复虚拟机配置非常有效的方法之一。但同时也需要更好地管理来避免性能问题。在本文中,我们将讨论几个高级用户快照管理技巧。
为VMware VMFS卷提前规划足够的磁盘空间以满足快照文件的需求很重要。可借鉴的经验是至少保留该虚拟机总磁盘大小20%的空间用于快照。但是这个数量很大程度上依赖于服务器的类型、快照保存的时间、以及是否计划使用多个快照等因素。如果您计划通过快照保护内存数据,那么需要至少保留跟分配给该虚拟机的内存大小相当的额外磁盘空间。
拥有不止一个快照的虚拟机在删除或提交(这里用提交的说法是因为快照的delta文件中保留的变化量数据在删除时会合并到原始虚拟磁盘文件,或称为VMDK中。)快照时需要额外空间。同时在删除快照时会创建一个helper delta文件。其中记录了在快照删除过程中对虚拟机磁盘做的所有改变。Helper delta文件根据快照删除所需的时间不同,大小有所差异。不过它不会很大,因为多数快照在一个小时内都可以删除掉。
&根据vSphere版本的不同,在有多个快照的情况下,根据快照合并到原始磁盘文件的方式不同,删除快照需要相应的额外磁盘空间支持。
删除多个快照的过程在不同的vSphere版本中有所变化。在老版本的vSphere 4.0和VMware Infrastructure 3(VI3)中,假设虚拟机有三个快照需要删除,过程如下:快照3被拷贝到快照2,然后被拷贝到快照1。接下来,快照1被拷贝到原始磁盘文件,helper快照同时也被拷贝到原始文件中,如下图所示。
该过程需要额外的空间,因为每个快照在前一快照合并过来时都会变大。如果在数据存储盘上没有足够的剩余空间,快照将无法提交。
在之后的vSphere 4.0和vSphere 4.1版本中,每个快照都直接合并到原始磁盘文件,而不是到前一时间点快照。图2演示了一台拥有三个快照的虚拟机在删除快照时发生的过程。
由于每个快照都是直接合并到原始磁盘文件的,除了helper文件外,不需要额外的空间支持。
如果您使用的是老版本的vSphere 或VI 3,还有一种删除快照的方式可以减少删除快照时的额外空间需求,那就是逐个删除快照,首先从快照树位于最远端的快照删起。这种方式下,快照在合并到前一时间点空间需求会变大,然后按顺序进行删除。虽然有点麻烦,不过这种方法对额外空间的需求小。
重要提示:不要在虚拟机拥有活动快照的时候进行磁盘碎片整理。碎片整理动作会更改很多的磁盘块,可能引起快照文件大小迅速增长。
快照删除所需的时间
在通过vSphere Client进行快照删除时,任务栏的状态可能会引起误解。通常,任务状态很快跳到95%完成,但是您将发现在95%状态会持续很长时间不变直到整个提交过程完成。vCenter Server对所有任务默认设定15分钟的超时(这是可以增加的)。这样的话,即使该快照还在合并中,vCenter Server可能会提示操作超时。
检查任务是否完成的方式之一是通过vSphere Client的Datastore Browser观察虚拟机的目录。当delta文件消失时,您可以知道该快照的删除完成了。在ESX和ESXi中通过命令行方式也可以监控到快照删除的过程。
活动快照如果创建的时间过长(文件将会变得非常的大),可能需要很长时间才能完成提交和删除。快照提交所需的时间取决于虚拟机的活动水平,如果虚拟机处于关机状态速度会快一些。宿主机的磁盘子系统可提供的活动资源也对快照提交所需时间造成影响。
100GB的快照文件将花费几个小时时间完成合并到原始磁盘的动作,这会影响虚拟机和宿主机性能。考虑到这点,您需要限制快照保留的时间,在不需要时立刻进行删除。
快照和元数据锁定对宿主机性能的影响
快照对宿主机性能会带来几个方面的负面影响。在第一次创建快照时,虚拟机活动需要短暂暂停,如果在创建快照时去ping虚拟机会观察到一些延时。同样,创建快照会导致元数据更新,从而引发SCSI预留冲突,会短暂锁定LUN。因此,LUN在某个短时间段内只对单个宿主机开放。
如果您创建了虚拟机的快照并运行虚拟机,快照就处于活动状态。如果快照是活动的,虚拟机的性能会下降,因为宿主机开始写入delta文件而不是标准VMDK文件,效率会差一些。而且,当delta文件每增长到16MB大小时(在这一系列的第一部分讨论过),将会再次引起元数据锁定。这会对虚拟机和宿主机产生影响。对性能的影响程度取决于虚拟机和宿主机的繁忙程度。在本系列的第三篇中我将深入探讨VMware快照的故障诊断来避免发生性能问题。
最后,删除/提交快照也会引起元数据锁定。另外,在删除快照提交delta文件的时候,也会极大降低虚拟机的性能。如果虚拟机繁忙,影响会很明显。为避免这个问题,删除大的或多个快照的动作最好在非高峰时间或者是宿主机不忙碌的时候进行。
永远不要在快照运行时扩展磁盘文件
您永远不要在有活动快照的情况下扩展虚拟磁盘。通过vmkfstools&X命令或vSphere Client可以扩展磁盘。在VI3中,如果使用VI Client对磁盘做扩展,会显示任务成功完成。但是实际上不会真的扩展磁盘文件。如果在VI3中,有活动快照的时候,通过vmkfstools做了虚拟磁盘扩展,虚拟机将无法启动,您会收到错误信息:不能打开.vmdk文件或某个快照所在的磁盘。原因:在子磁盘创建后父虚拟磁盘被调整。幸运地是,这种情况还可以恢复。
在vSphere中,在快照运行时是不能扩展虚拟机虚拟磁盘的,如果您运行vmkfstools命令,会收到错误报告:无法扩展磁盘。锁定文件失败。在vSphere Client中如果在快照运行时编辑虚拟机的设置,选中其中的一个虚拟磁盘,可以看到对磁盘的resize命令是灰色的。一旦快照删除,就可以对虚拟磁盘大小做调整。
如果虚拟机使用RDM(Raw Device Mapping)磁盘格式,磁盘(LUN)的大小是由物理存储系统管理的而不是vSphere。这样的话,您可以在不涉及vSphere的情况下更改LUN大小,理论上即使创建了活动快照,RDM磁盘的大小也是可以增加的。但是该动作会恶化RDM磁盘的状态,所以在调整RDM磁盘大小之前,也需要确保首先删除快照。
从快照保护中去除虚拟磁盘
如果您的虚拟机跨多个磁盘,而您希望可以在快照中不包含某个磁盘,可以通过编辑虚拟机的设置来更改磁盘模式到Independent(确保选定了Persistent)。独立磁盘模式的设置可以帮助用户实现分别管理每个磁盘的功能,在磁盘文件或架构上没有差别。一旦磁盘设为独立模式,将不会包含在任何快照中。
另外,如果虚拟机设置了独立磁盘将无法进行内存快照。这么做是为了防止用户在对某个带有内存快照的快照进行恢复时,如果有正在运行的应用恰好需要向独立磁盘写入数据,这么做可以对独立磁盘进行保护。因为在其它磁盘恢复时,独立磁盘是不进行的,这会引发潜在的数据失效。
对于拥有RDM磁盘的虚拟机,如果RDM配置为物理兼容模式,将不会在虚拟机快照中包含。如果RDM设置为虚拟兼容模式,会自动包含在快照中。
在虚拟机运行时使用快照进行备份
快照提供了很好的在线虚拟机裸VMDK文件备份方法。所有对原始磁盘文件的写入操作都被禁止,因此可以安全地把它拷贝到其它的存储卷,从而供Veeam Backup & Replication 和Quest vRanger等备份应用在虚拟化层面上进行保护操作。他们可以对虚拟机做快照、备份磁盘文件然后在完成后删除快照。
还有一些免费的用户脚本和工具可以提供类似功能。这些程序可以让用户把VMDK文件拷贝到本地存储或网络共享设备,提供对重要虚拟机的额外保护途径。
版权所有:&非特殊声明,均为本网站原创文章,转载请指明出处:
关注官方微信
扫一扫分享本文到朋友圈
联系我们:
editor&#& &(发送邮件时,请把#换成@)
投稿信箱:
editor&#& &(发送邮件时,请把#换成@)
企业网版权所有如何主动dump内存快照(非内存溢出时) - 高级语言虚拟机 - ITeye群组
RT,我们知道在启动参数加上-XX:+HeapDumpOnOutOfMemeryError可以在内存溢出时dump出内存快照用来查找哪里产生内存溢出的故障,但是如何主动去dump正在运行JVM的内存快照呢?在没有内存溢出之前。
1.jmap 可以
引用
Usage:
&&& jmap [option] &pid&
&&&&&&& (to connect to running process)
&&& jmap [option] &executable &core&
&&&&&&& (to connect to a core file)
&&& jmap [option] [server_id@]&remote server IP or hostname&
&&&&&&& (to connect to remote debug server)
where &option& is one of:
&&& &none&&&&&&&&&&&&&&& to print same info as Solaris pmap
&&& -heap&&&&&&&&&&&&&&& to print java heap summary
&&& -histo[:live]&&&&&&& to print histogram if the "live"
&&&&&&&&&&&&&&&&&&&&&&&& suboption is specified, only count live objects
&&& -permstat&&&&&&&&&&& to print permanent generation statistics
&&& -finalizerinfo&&&&&& to print information on objects awaiting finalization
&&& -dump:&dump-options& to dump java heap in hprof binary format
&&&&&&&&&&&&&&&&&&&&&&&& dump-options:
&&&&&&&&&&&&&&&&&&&&&&&&&& live&&&&&&&& du if not specified,
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& all objects in the heap are dumped.
&&&&&&&&&&&&&&&&&&&&&&&&&& format=b&&&& binary format
&&&&&&&&&&&&&&&&&&&&&&&&&& file=&file&& dump heap to &file&
&&&&&&&&&&&&&&&&&&&&&&&& Example: jmap -dump:live,format=b,file=heap.bin &pid&
&&& -F&&&&&&&&&&&&&&&&&& force. Use with -dump:&dump-options& &pid& or -histo
&&&&&&&&&&&&&&&&&&&&&&&& to force a heap dump or histogram when &pid& does not
&&&&&&&&&&&&&&&&&&&&&&&& respond. The "live" suboption is not supported
&&&&&&&&&&&&&&&&&&&&&&&& in this mode.
&&& -h | -help&&&&&&&&&& to print this help message
&&& -J&flag&&&&&&&&&&&&& to pass &flag& directly to the runtime system
2.kill -3 杀一下jvm进程
jmap -dump:format=b,file=xxx.hprof &pid&
是通常的正解吧。这会让VM接到dump请求后直接把Java heap里所有对象都dump下来,无论对象是死是活。
jmap -dump:format=b,live,file=xxx.hprof &pid&
这种则让VM在接到dump请求时先做一次full GC,然后再dump;所以已经死掉的对象刚被GC清理掉,就不会出现在dump里了。
VisualVM在连接上一个活Java进程后也有选项可以dump heap。参考这个文档:
ol_beta 写道2.kill -3 杀一下jvm进程
这个是不对的。kill -3(SIGQUIT)是在目标Java进程的标准输出流上输出thread dump,也就是线程列表以及每个线程的stack trace。这个信号不用来做heap dump。
kill的默认信号15(SIGTERM)也不会打heap dump。它会让Java进程执行关闭序列然后退出。关闭序列主要是shutdown hooks。
kill -9(SIGKILL)则是直接把进程杀了,JVM来不及做任何事情就被干掉,所以也不会打heap dump。
多谢ol_beta和撒迦的回复,都很有用
jvm是否有参数,在heapsize使用超过maxheap的80%时候,将内存对象dump下来?
HotSpot VM的话没内建的参数实现这个功能,要自己在VM里打patch加这功能不难。
但更靠谱的是利用JMX从外部自己写个工具定时轮寻Java堆的使用情况,当超过自己关注的阈值时让自己的工具主动触发JVM做heap dump。
Java SE 7的话甚至可以不轮寻,直接用MemoryMXBean上的notification就可以方便的监控Java堆的使用状况,使用量到达设定的阈值时就会发出notification。请参考
这里有例子教如何用JMX来触发heap dump,我懒得写了:
因为是用HotSpotDiagnosticMBean所以这代码只在HotSpot VM上有效。
RednaxelaFX 写道HotSpot VM的话没内建的参数实现这个功能,要自己在VM里打patch加这功能不难。
但更靠谱的是利用JMX从外部自己写个工具定时轮寻Java堆的使用情况,当超过自己关注的阈值时让自己的工具主动触发JVM做heap dump。
Java SE 7的话甚至可以不轮寻,直接用MemoryMXBean上的notification就可以方便的监控Java堆的使用状况,使用量到达设定的阈值时就会发出notification。请参考
这里有例子教如何用JMX来触发heap dump,我懒得写了:
因为是用HotSpotDiagnosticMBean所以这代码只在HotSpot VM上有效。
那PermGen能监控吗?看用法只区分了堆和非堆
chenk818 写道那PermGen能监控吗?看用法只区分了堆和非堆
可以的然后针对它来设置usage threshold。软件与服务//
Xen虚拟机实战:如何用Linux命令创建快照
  虚拟机快照是一个非常好的功能,它能保存当前虚拟机的状态。不幸的是开源Xen不提供对快照的支持,而Linux能支持。由于开源Xen通常使用Linux作为它的特权域,所以你能使用Linux命令创建快照。
  逐个字节进行快照
  在Xen里创建快照的一种方法是在保存虚拟机当前状态后使用Linux dd。这包括以下步骤:
  1.使用xm save命令禁用当前的虚拟机状态并将其写入磁盘文件。这只把机器状态写入一个文件,不是用于Xen磁盘文件或分区的当前状态。使用名称linux01这样做,用xm save linux01 linux01.sav。注意这个命令将停止虚拟机。
  2.现在使用dd将磁盘镜像文件的当前状态转存到一个备份文件。下面的例子将为LVM逻辑卷:
  dd if=/dev/xenvols/linux01_root   of=/data/xen_linux01_root.img
  3.使用xm restore命令重新启动虚拟机。
  这种解决方案的主要缺点在于耗时。dd命令逐个字节地对虚拟机磁盘文件进行复制,因此需要消费大量时间。所以这种方案不是非常实用。
关键词:IT技术 虚拟化 评论
责任编辑:郑亮
All Rights Reserved, Copyright , .cn渝ICP证B2-号 如有意见请与我们联系 powered by 天极内容管理平台CMS4i
京公网安备84号

我要回帖

更多关于 虚拟机怎么快照 的文章

 

随机推荐