1.GC日志分析
在JVM启动时加上一些参数,当JVM出问题时能记下一些当时的情况。GC的日志输出参数如下:
-verbose:gc 可以辅助输出一些详细的GC信息
-XX:+PrintGCDetails 输出GC的详细信息
-XX:+PrintGCApplicationStoppedTime 输出GC造成应用程序暂停的时间
-XX:+PrintGCDateStamps GC发生的时间信息
-XX:+PrintHeapAtGC 在GC前后输出堆中各个区域的大小
-Xloggc:[file] 将GC信息输出到单独的文件中
2. 对快照文件分析
可以通过 jmap -dump:format=b,file=[filename] [pid] 来记录下堆的内存快照,然后利用第三方工具,如mat来分析整个Heap的对象关联情况。
内存耗尽可能导致JVM直接垮掉,可以通过参数:-XX:+HeapDumpOnOutOfMemoryError来配置当内存耗尽时记录下内存快照,可以通过-XX:HeapDumpPath 来指定文件的路径。
3. JVM crash日志分析
JVM有时会因为自身的bug而直接垮掉,可以通过 -XX:ErrorFile=[filepath] 来指定jvm退出时产生日志文件的路径
-Xmx5000m 堆的最大size
-Xms5000m 堆的初始大小
-Xmn2000m 年轻代大小
-XX:PermSize=256m 永久区的大小
持久代一般固定大小为64m,所以增大年轻代后,将会减小年老代大小。此值对系统性能影响较大,Sun官方推荐配置为整个堆的3/8。
-Xss128k 每个线程的堆栈大小