经常看到有人问这样的问题,我项目部署上去的时候可以访问,过一段时间后就无法访问了。往往还附带一句:没有任何错误日志。
最近,我也遇到过这样的问题,开始我定位到项目的一个具体功能,这个功能看起来很耗内存,试了几次确实是一调用它的接口就会导致项目出现卡顿,或者直接响应超时。
领导给的说法是我给这个项目分配的内存小了,让我改大一些。
虽然我用的默认的内存配置,但我很不认同这种说法,什么功能需要特地调内存,不调内存还运行不了?但是当时我也不能直接反驳领导的说法。
我没有去调内存,而是在服务器想 jstack 把这个应用的 jvm 运行栈给打出来。我第一想到的是应该有死锁,然而并没有死锁。但是在慢慢看运行栈的时候,发现很多线程 waiting condition.而且定位的都是同一行代码。
这没什么好说的,直接看源码,发现问题代码是这样写的
try{
}
catch()
{
}
coutdownLacth.countDown();
这个不在 finally 里面 countDown 的操作不用解释,懂的自然都懂。也是为什么会有很多线程等待的原因,改完代码上线运行,问题自然是解决了。
欢迎来到这里!
我们正在构建一个小众社区,大家在这里相互信任,以平等 • 自由 • 奔放的价值观进行分享交流。最终,希望大家能够找到与自己志同道合的伙伴,共同成长。
注册 关于