如何导出Java应用程序的内存快照文件

如何导出Java应用程序的内存快照文件,第1张

问了一下我之前的在远标教育的大学樱前悉同学,他说在windows下找到要导出的Java应用的进程号。比如我要导出本机的Eclipse的内存快照,因为Eclipse也是Java应用。首先要找到Eclispe的进程号。在命令行输入:tasklist | findstr eclipse。

可以看到,Eclispe的进程号是悔薯8052。然后在命令行输入:jmap -dump:format=b,file=elipse.hprof 8052。file=elipse.hprof意思是设置生成的文件名,8052就是Java程序的进程号。

如果是在Linux系统下面,在命令行脊乎输入:ps -ef | grep eclipse。

可以看到eclipse的进程号是2622。同样,在命令行输入:jmap -dump:format=b,file=elipse.hprof 2622。

把生成的elipse.hprof在SecureCRT命令行输入:sz elipse.hprof,把文件下载到本地,用MAT之类的工具进行分析就可以了。

文件系统快照 (File System Snapshots) 顾名思义就是在文件系统上照张相片,也就是将文件系统当时的情形记录下来,就好像照相一样。日后您可以一张一张照片翻出来看。例如,您目前文件系统中有十个档案,我们先使用文件系统快照拍一张照片。之后我们可以删除档案,在目前文件系统中已经没有东西了。但如果您将照片挂入,您还是可以看到这些档案。简单的来说,文件系统快照的功能就是隐者握记录当时文件系统的状态。

文件系统快照只能用在独立的「文件系统」。例如我们的 /home、/var 分别是独立的分割区 /dev/ad0s1d 及 /dev/ad0s1e,则我们可以对 /home 及 /var 做文件系统快照。

让我们实际 *** 作一次如何进行快照。建立文件系统快照的方法有二个,一是使用 mount 指令,另一个是使用 mksnap_ffs。例如我们灶庆在将 /home 这一个分割区做一个文件系统快照,并将快照存成 /home/snapshot20050730,可以使用下列指令:

# mount -u -o snapshot /home/snapshot20050730 /home

或是

# mksnap_ffs /home /home/snapshot20050730

您会发现在 /home 中多了一个文件名为 snapshot20050730。这个档案就是现在这个时间点的文件系统状态。必须要注意的是,如果您要对 /home 做快照,在快照时只能将结果放在 /home 目录下。例如,你可以放在 /home/snapshot/20050730,或是 /home/alex/backup/0730。但是不能放在 /var/snap.0730。也就是对某一个文件系统进行快照的结果只能放在该文件系统中。但是快照完成后,您就可以将它复制到其它地方。

现在,您可以在 /home 中先建一些档案,等一下我们再将刚才的 snapshot 翻开来看,您会发现这些新建的档案都不会出现在「照片」中。

我们现在来看看要怎么把「照片」翻开来看。要看快照的内容可以使用下列指令:

# mdconfig -a -t vnode -f /home/snapshot20050730 -u 3

# mount -r /dev/md3 /mnt

上面的指令是将快照档案挂入第 3 个 md 装置,再使用 mount 指令将它像文件系统一样挂入。因为这是快照,照片是不能修改的,所以我们只能以只读格式挂入。您现在可以看一下 /mnt 中的档案,是不是和您 /home 中的档案一样,但却没有新建的档案存在。而且您可以试着开启档案,连档案内容都一样。很神奇吧,杰克!

md是FreeBSD 中一种特别的装置,它可以让我们将档案仿真成文件系统,您可以随意指定没有在使用中的 md 装置,如 md1、md2、md3 等。我们使用 mdconfig 这个指令将嫌孙设定档案使用某一个编号的装置,在挂入时必须也使用相对的编号 (例如上面的 md3)。而在使用完快照后,我们必须将它卸载,并释放md装置:

# umount /mnt

# mdconfig -d -u 3

以上就是文件系统快照,是不是很好用。

同一个文件系统中最多可以有 20 个档案统快照,如果您有旧的快照不用了,可以直接使用 rm 指令删除它。如果您要查找某一目录下所有的快照,可以使用下列指令:

# find /home -flags snapshot

如果您查看一下我们做出来的快照,您会发现它的档案大小和文件系统大小一模一样。但是如果您将它放在原本的文件系统中,它是不占空间的。如果您将 /home 的快照复制到其它的分割区中,它才会真正的占空间。

这么神奇的文件系统快照有什么功用呢?实际上的应用可多了。您有没有发现文件系统快照的速度非常快,这一点可以让我们在备份时更快。传统上,如果您要备份系统,您必须先停止网络服务,以免使用者数据备份到一半却有人修改而造成错误,接着您才可以备份数据。而这样一来,服务中断的时间会非常长,直到整个档案备份完为止。

而利用文件系统快照,您先停止网络服务,将文件系统进行快照,快照完后立即启用网络服务。接下来,再将快照挂入后依正常程序备份即可。或者,您也可以直接备份快照的档案即可。如此一来,服务中断的时间就可以大幅减少了,是不是很赞!


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/yw/12424580.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-25
下一篇 2023-05-25

发表评论

登录后才能评论

评论列表(0条)

保存