1.问题
最近一周真是不太平,应用几乎每天都会挂,而且还每天的原因都不一样
2.以下就几种原因简单的说下
1)内存溢出
现象:内存告警,拿不到数据库连接,高full gc
分析:增加jvm参数,full gc时生成dump日志,分析dump日志,发现有一个查询占了内存的60+%。。。,看内存占比前几位的全是string对象,而且全是重复的,
那么就直接去看这个查询啊,一看这个查询的sqlmap,发现里面用了in,而当时生产环境这条sql in后面带了20000+的id去查询db,而db根据id来分库分表,然后根据id,这个sql会落到其中的700+张表,呵呵,那么问题来了,这台应用就会建立700+的db链接和700+的prepareStatement,大量的string对象其实就是这个prepareStatement,每个占了内存的0.03%,700+就占了差不多21%,进而导致整个应用内存吃紧,最终OOM
2)还tm是内存溢出
现象:内存告警,高full gc
<