[TOC]

错误1:xml文件encoding编码有误导致解析乱码

1
com.sun.org.apache.xerces.internal.impl.io.MalformedByteSequenceException: 3 字节的 UTF-8 序列的字节 3 无效

原因:在web.xml文件编辑的时候保存格式有误;

解决:

1
2
3
4
#解析xml时,有中文,此时把xml文件的头
<?xml version="1.0" encoding="UTF-8"?>
#改成:
<?xml version="1.0" encoding="GBK"?>

通过jmap性能监控:

概述:命令jmap是一个多功能的命令。它可以生成 java 程序的 dump 文件, 也可以查看堆内对象示例的统计信息、查看 ClassLoader 的信息以及 finalizer 队列。

命令:jmap -help:帮助信息

命令:jmap -heap pid
描述:显示Java堆详细信息

打印一个堆的信息,包括使用的GC算法、堆配置信息和各内存区域内存使用信息

显示参数详解:

Heap Configuration: //堆内存初始化配置
MinHeapFreeRatio=40 //对应jvm启动参数-XX:MinHeapFreeRatio设置JVM堆最小空闲比率(default 40)
MaxHeapFreeRatio=70 //对应jvm启动参数 -XX:MaxHeapFreeRatio设置JVM堆最大空闲比率(default 70)
MaxHeapSize=512.0MB //对应jvm启动参数-XX:MaxHeapSize=设置JVM堆的最大大小
NewSize = 1.0MB //对应jvm启动参数-XX:NewSize=设置JVM堆的‘新生代’的默认大小
MaxNewSize =4095MB //对应jvm启动参数-XX:MaxNewSize=设置JVM堆的‘新生代’的最大大小
OldSize = 4.0MB //对应jvm启动参数-XX:OldSize=:设置JVM堆的‘老生代’的大小
NewRatio = 8 //对应jvm启动参数-XX:NewRatio=:‘新生代’和‘老生代’的大小比率
SurvivorRatio = 8 //对应jvm启动参数-XX:SurvivorRatio=设置年轻代中Eden区与Survivor区的大小比值
PermSize= 16.0MB //对应jvm启动参数-XX:PermSize=:设置JVM堆的‘永生代’的初始大小
MaxPermSize=64.0MB //对应jvm启动参数-XX:MaxPermSize=:设置JVM堆的‘永生代’的最大大小

  Heap Usage:               //堆内存分步
  PS Young Generation
  Eden Space:          //Eden区内存分布
    capacity = 20381696 (19.4375MB)  //Eden区总容量
    used     = 20370032 (19.426376342773438MB)  //Eden区已使用
    free     = 11664 (0.0111236572265625MB)  //Eden区剩余容量
    99.94277218147106% used  //Eden区使用比率
 From Space:        //其中一个Survivor区的内存分布
     capacity = 8519680 (8.125MB)
     used     = 32768 (0.03125MB)
     free     = 8486912 (8.09375MB)
     0.38461538461538464% used
To Space:            //另一个Survivor区的内存分布
    capacity = 9306112 (8.875MB)
    used     = 0 (0.0MB)
    free     = 9306112 (8.875MB)
    0.0% used
PS Old Generation  //当前的Old区内存分布
    capacity = 366280704 (349.3125MB)
    used     = 322179848 (307.25464630126953MB)
    free     = 44100856 (42.05785369873047MB)
    87.95982001825573% used
PS Perm Generation  //当前的 “永生代” 内存分布
    capacity = 3

命令:jmap pid
描述:查看进程的内存映像信息,类似 Solaris pmap 命令。

使用不带选项参数的jmap打印共享对象映射,将会打印目标虚拟机中加载的每个共享对象的起始地址、映射大小以及共享对象文件的路径全称。这与Solaris的pmap工具比较相似。

命令:jmap -histo:live pid
描述:显示堆中对象的统计信息

其中包括每个Java类、对象数量、内存大小(单位:字节)、完全限定的类名。打印的虚拟机内部的类名称将会带有一个’*’前缀。如果指定了live子选项,则只计算活动的对象。

命令:jmap -clstats pid
描述:打印类加载器信息

-clstats是-permstat的替代方案,在JDK8之前,-permstat用来打印类加载器的数据
打印Java堆内存的永久保存区域的类加载器的智能统计信息。对于每个类加载器而言,它的名称、活跃度、地址、父类加载器、它所加载的类的数量和大小都会被打印。此外,包含的字符串数量和大小也会被打印。

命令:jmap -finalizerinfo pid
描述:打印等待终结的对象信息

Number of objects pending for finalization: 0 说明当前F-QUEUE队列中并没有等待Fializer线程执行final