最近分析了很多的OOM的dump文件,对于weblogic又有了一些认识(只是对于我们的系统):
1.线程数量,130 - 178 ,最大的有达到350,不过有达到200的已经挂了。
2.线程的大小,1K-1M,绝大部分线程在这个区间,有很大的线程,通常都是与数据库有关。
3.一个线程有16M,是一个数据库连接,里面用hibernate的方式根据主键取了一条数据,起初为认为是字段太多导致,但我们看到一个数据库连接中的SQL字段是其几倍,但占用内存才是2M,我分析了两条sql,发现这个跟字段的长度有关系。
4.节点重启之前,一定要获取threads dump的信息,否则有一类宕机是找不到原因的。内存溢出,没有占用内存非常多的线程,都是占用内存很小的线程,就是太多。这种情况要通过thread dump找到线程的关联性。
5.当系统缓慢,数据库也没有问题,网络没问题,就得使用jmap dump内存看看。
jmap -dump:format=b,file=c:\2972.hprof 2972
6.gc回收频繁,这个现象只能说创建对象频繁或是创建了大对象。这种现象不能定位到具体的问题,还是得看JVM的内部对象才能定位。