1.jstace看有没有锁
2.看awr报告,找到最耗性能的sql。然后加索引,如果索引用的不太对,用hnit加以控制
遇到的性能解决实例:
lsof -p pid 发现几千个句柄无法回收。业务无法获取信息的句柄,系统出现too many open file错误,导致业务无法接入。
jvm的堆内存结构:
年轻代,老年代,持久代
年轻代会很快GC一次,老年代会很久GC一次。
造成的原因:
对象经过0次年轻代的GC就会进入老年代,所以对象一直在老年代,很久不会GC,打开的文件越来越多,才会出现句柄泄露。
tomcat7 catalina.sh中 JVM配置 MaxTenuringThreshold=0;
另:httpclent for循环调用会造成这样的情况。
解决:在finally中加releaseConnection
或者:method.setRequestHeader("connection","close") 表示用短连接。
**句柄** 是存放在栈内存中,对象是存放在堆内存中(分老年代和年轻代),(String 放在常量池中,或者说栈内存)
User u = new User();
u就是句柄,如果循环的创建很多User,有很多指向User的句柄,就可能造成句柄泄露。