EAS性能调优之客户端闪退

栏目:eas cloud知识作者:金蝶来源:金蝶云社区发布:2024-09-22浏览:1

EAS性能调优之客户端闪退

      在本篇文章中,我们聊一聊,EAS客户端在使用过程中,遇到了客户端突然“闪退”,是咋回事?

      其实,这是由于客户端,在某个时刻的内存占用超过了预设的Java虚拟机允许的最大内存导致的。在EAS客户端的启用过程中,我们会给客户端设置一些Java虚拟机的启动参数,如下图所示:

 -Xms JVM启动时,堆内存分配的最小空间。一般是建议配置和-Xmx保持一致,这样可以避免堆内存空间不足时,重新申请分配内存空间。

 -Xmx JVM启动时,堆内存分配的最大空间。当某一时刻客户端内存消耗超过了这个值,客户端就会抛出OutOfMemory的错误,造成客户端闪退。

-XX:MaxPermSizeJVM运行时,允许分配的最大持久代内存空间。持久代的概念主要是针对商用Java虚拟机Hotspot 而言,对其它虚拟机比如J9,JRockit,其实是没有这个概念的。所以这个参数,也仅仅是针对JDK8以下的Hotspot虚拟机而言。而从JDK8开始,Hotspot虚拟机也借鉴了堆外空间(元数据空间)来替代它。它一般主要用于存放加载的类信息、常量、静态变量、以及即时编译后的代码缓存等信息。

     而为了分析客户端闪退的原因,我们通常需要获取到客户端闪退时,Java虚拟机的堆转存储dump文件,用于分析当时内存占用的情况。从而分析出,内存泄露的原因。这里一般有三种方式:


      其一:给Java虚拟机添加启动参数(也就是在上图中-Xmx的位置,通过空格分隔),让客户端闪退时,自动在指定的目录下(例如: D:\\dump)创建dump文件。参数如下:

        -XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=D:/dump


      其二:在客户端运行的过程中,通过JDK自带的命令手工获取dump文件。如下所示:

      >jps –l    --获取机器上运行的JVM进程号jvmid

      >jmap –dump:[live],format=b,file=d:\heap.hrof  jvmid      --jmap命令手工获取dump文件


     其三:借助于工具比如 memory analysis tool、java visualVM来获取dump文件。如下图所示:




          获取到dump文件之后,我们通过MAT(memory analysis tool),打开dump文件。如下图所示:


       MAT工具是可以帮助我们做内存泄露的分析的。分析完成后,如下图所示,我们将很直观地看到内存泄露的原因,从而可以针对性地做出优化调整。


       也可以单击饼状图中的某一内存区域(此时某一个对象占用的内存)进行分析,List Objects菜单右边会出现,下面两个菜单,如下图所示:

WithOutgoing References -- 显示当前对象引用了那些外部对象

With Incoming References -- 显示当前对象被那些外部对象所引用


   而在list_Objects页签展示时,会同时显示Shallow heap(浅层堆)和Retained Heap(保留堆)。如下图所示:

       其中,Shallow heap(浅层堆)表示当前对象本身所占用的内存空间大小,而Retained Heap(保留堆)则是表示,如果将当前对象被GC(垃圾回收)掉,实际能够回收的内存空间。之所以两者会不一致,主要是由于该对象可能是某些内存空间(内部引用的外部对象)的唯一引用,因此当该对象被回收后,这些没有被引用的内存空间也会,一并会被回收掉。因此我们通常分析时,会更多的关注Retained Heap(保留堆)。

EAS性能调优之客户端闪退

在本篇文章中,我们聊一聊,EAS客户端在使用过程中,遇到了客户端突然“闪退”,是咋回事? 其实,这是由于客户端,在某...
点击下载文档
确认删除?
回到顶部
客服QQ
  • 客服QQ点击这里给我发消息