解决BUG一般步聚


我们在开发时,测的好好的,然后上测试,上生产环境,当数据量一大时,或并发大时,就会造成各种各样的问题。

如业务逻辑上的问题,造成这种原因是前期没有沟通好,或细节没有考虑那么全面,没考虑到这种情况的存在。

当然也包括技术上的问题,如内存泄露,程序假死,CPU过高等,造成这种原因是没有测试好。

解决这样的问题,一些实用命令,操作,工具如下。

@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
jmap -histo pid
查看堆内存(histogram)中的对象数量,大小

                num     #instances         #bytes  class name
                序号         实例个数            字节数       类名   
        ----------------------------------------------
         1:       3174877      107858256  [C
         2:       3171499       76115976  java.lang.String
         3:       1397884       38122240  [B
         4:        214690       37785440  com.test......Book
         5:        107345       18892720  com.test....Book
         6:         65645       13953440  [Ljava.lang.Object;
         7:         59627        7648416  <constMethodKlass>
         8:        291852        7004448  java.util.HashMap$Entry
         9:        107349        6871176  [[B

看看自己包下的类的个数是否有异常?
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
判断JVM垃圾回收是否正常,是不是在频繁的进行,垃圾回收?

jstat -gcutil pid 1000 5

S0     S1     E      O      P     YGC     YGCT    FGC    FGCT     GCT
73.54   0.00  99.04  67.52  98.49    166    0.252     6    0.331    0.583 


@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
jstack <pid> 查看线程运行情况。
例如,查找关键字,
Wait on condition
Waiting for monitor entry 和 in Object.wait()
deadlockthreads


@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@

生产DUMP文件,分析。
jmap -dump:format=b,file=heap.bin <pid>
dump文件可以通过MemoryAnalyzer分析查看,网址:http://www.eclipse.org/mat/,可以查看dump时对象数量,内存占用,线程情况等。

但这样存在一种问题,当JVM挂掉的时候,执行此命令,会存在无响应情况
解决方法是,在JVM启动时加参数

-XX:+HeapDumpOnOutOfMemoryError
  -XX:HeapDumpPath=${} 这样可以在发生down机的情况下,先生成dump(未验证)

@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@

以上都是简略的提示,具体情况还要具体分析。




 

你可能感兴趣的:(bug)