CPU 100% 問(wèn)題
線(xiàn)上問(wèn)題處理 CPU 100% 2017-05-27
背景
由于之前做了個(gè)單點(diǎn)登錄,導(dǎo)致首次訪(fǎng)問(wèn)子系統(tǒng)都要去驗(yàn)證登錄、獲取權(quán)限,生成seesion,速度慢,用戶(hù)體驗(yàn)差
故做了個(gè)ajax請(qǐng)求,去提前獲取session,當(dāng)時(shí)做完自測(cè)的時(shí)候是有302錯(cuò)誤的,沒(méi)有在意,覺(jué)得并不影響,然后直接上線(xiàn)。
結(jié)果炸了,2天以后cpu 100%, 如下圖, 重啟之后正常, 過(guò)了1天 又100%。
解決過(guò)程
執(zhí)行 top
命令, 結(jié)果如下
執(zhí)行 top -H -p25493
執(zhí)行 jstack 25493 | grep -A 40 63a5
發(fā)現(xiàn)占用cpu的線(xiàn)程是gc, 初步認(rèn)定是堆內(nèi)存爆滿(mǎn)
看了下pinpoint 更加直觀 如下
重啟之后 正常
jmap 保存快照。
VisualVM分析快照 有個(gè)OM 錯(cuò)誤
JProfilter分析快照 session 有300W個(gè) 驚呆了。。。
故障原因分析
根據(jù)pinpoint,內(nèi)存上升過(guò)程基本在一條直線(xiàn)上,說(shuō)明session在不停的產(chǎn)生
大概是因?yàn)閍jax請(qǐng)求之后在無(wú)限重定向。
由于這個(gè)ajax請(qǐng)求沒(méi)有攜帶session的cookie,所以就不停的產(chǎn)生session了。
但是有點(diǎn)很奇怪,自測(cè)的時(shí)候重定向幾次后就不會(huì)再重定向了
而線(xiàn)上情況看來(lái)是有個(gè)請(qǐng)求一直在重定向,難道重定向次數(shù)還跟跟瀏覽器有關(guān)?
解決方法
代碼回滾
教訓(xùn)
不要忽視小錯(cuò)誤
優(yōu)化什么的,能推就推了,畢竟能力差