在系統(tǒng)部署生產(chǎn)環(huán)境后, 在十天左右就會(huì)出現(xiàn)系統(tǒng)反應(yīng)慢, 堆爆了,cpu占用百分百的情況。 在重啟tomcat后情況就恢復(fù)了。
在經(jīng)過詳細(xì)的 跟蹤, 線程dump, 堆dump 下來分析后, 線程沒有問題, 發(fā)現(xiàn)有兩個(gè)原因:
1: 通過memory analyzer 分析 堆dump文件后, 有一個(gè)緩存對(duì)象無限增長(zhǎng),并保持活動(dòng), 導(dǎo)致回收不了, 堆爆掉。
2:由于后臺(tái) 頻繁gc, 導(dǎo)致系統(tǒng)響應(yīng)慢,導(dǎo)致 liunx服務(wù)器的 time_wait 連接數(shù)量飆升, 參數(shù)沒有設(shè)置: 將超時(shí)等待的連接用于新的連接。 導(dǎo)致前臺(tái)請(qǐng)求不夠。
解決方案:
1: 緩存對(duì)象 無限增長(zhǎng) 回收不了的問題 解決方案為: 本來使用過后不用的對(duì)象應(yīng)該移除的, 沒有移除成功, 將此bug修復(fù), 保持增長(zhǎng)和移除相對(duì)穩(wěn)定。
2: 超時(shí)等待的原因解決: 文章地址: https://www.aliyun.com/jiaocheng/810456.html
這個(gè)命令是查詢連接數(shù):
netstat -n | awk '/^tcp/ {++state[$NF]} END {for(key in state) print key,"/t",state[key]}'
TIME_WAIT 250263
TIME_WAIT 250263
CLOSE_WAIT 57
FIN_WAIT2 3
ESTABLISHED 2463
SYN_RECV 8
time_wait 數(shù)量過多:
可以修改系統(tǒng)的/etc/sysctl.conf配置來減少TIME_WAIT的tcp連接:
vi /etc/sysctl.conf
net.ipv4.tcp_syncookies = 1(某些情況下該參數(shù)已啟用)
net.ipv4.tcp_tw_reuse = 1
net.ipv4.tcp_tw_recycle = 1
net.ipv4.tcp_fin_timeout = 30
然后執(zhí)行/sbin/sysctl -p讓參數(shù)生效。再用命令查看TIME_WAIT連接數(shù) netstat -ae | grep “TIME_WAIT” |wc -l 發(fā)現(xiàn)大量的TIME_WAIT 已不存在。
這個(gè)圖片為:出現(xiàn)卡頓時(shí)的 jvisualvm 的監(jiān)控, cpu使用百分比, 頻繁gc, 堆使用百分百。
以下圖片為 memory Analyzer 工具分析 堆dump文件的圖像
以下圖片為老區(qū)中 無限增長(zhǎng)的對(duì)象的類名, 對(duì)象及大小。
本站文章版權(quán)歸原作者及原出處所有 。內(nèi)容為作者個(gè)人觀點(diǎn), 并不代表本站贊同其觀點(diǎn)和對(duì)其真實(shí)性負(fù)責(zé),本站只提供參考并不構(gòu)成任何投資及應(yīng)用建議。本站是一個(gè)個(gè)人學(xué)習(xí)交流的平臺(tái),網(wǎng)站上部分文章為轉(zhuǎn)載,并不用于任何商業(yè)目的,我們已經(jīng)盡可能的對(duì)作者和來源進(jìn)行了通告,但是能力有限或疏忽,造成漏登,請(qǐng)及時(shí)聯(lián)系我們,我們將根據(jù)著作權(quán)人的要求,立即更正或者刪除有關(guān)內(nèi)容。本站擁有對(duì)此聲明的最終解釋權(quán)。