




版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
第記一次線程爆滿導致服務器崩潰的問題排查及解決目錄問題介紹1.重啟服務器2.修改最大線程數3.查找線程最大的java程序4.導出問題程序的線程日志5.找到問題代碼6.解決方案
問題介紹
測試服務器突然無法連接,ssh登錄不上。只有重啟才能解決。重啟一天后,又連接不上了。
于是有了下面的排查過程,最終發現是有個java程序一直在創建線程,導致線程達到服務器最大數量,服務器崩潰。
1.重啟服務器
重啟后,ssh連接發現下面問題
forkfaild:Cannotallocatememory
以為是內存滿了
于是,free-h,查看內存情況,還有,觀察一段時間后,內存沒多大變化
2.修改最大線程數
經過各種百度,都說可以通過修改服務器的最大線程數來解決,于是我也這么干了。當時做的時候沒有截圖,所以下面截圖是網上找的,湊合看看。
查看最大進程數sysctlkernel.pid_max
ps-eLf|wc-l查看進程數
修改最大進程數后系統恢復
echo1000000/proc/sys/kernel/pid_max
永久生效
echo"kernel.pid_max=1000000"/etc/sysctl.conf
sysctl-p
3.查找線程最大的java程序
上一步擴大了線程數量后,感覺有點不對,因為之前沒有這么配置都可以正常運行,為什么突然服務器掛了呢?肯定是有程序在作怪。
于是決定找出占用線程最多的程序。回顧最近幾天,服務器中只部署了幾個springboot程序。問題一定出在它們之中。
查看線程數量前20的java程序
ps-Lef|awk‘{sum[$2]++}END{for(pidinsum)printpid,sum[pid]}'|sort-nr-k2|head-n20
[root@se-test-lky01~]#ps-Lef|awk'{sum[$2]++}END{for(pidinsum)printpid,sum[pid]}'|sort-nr-k2|head-n20
160743100
313861226
201201072
19548985
9697829
3005796
641344
19016324
16924315
17870300
6417293
8351171
7332168
18259167
19821161
16311157
18433151
18048136
14347104
2559100
觀察一段時間后,發現進程id為16074的java程序的線程數不斷增長。
4.導出問題程序的線程日志
[root@se-test-lky01~]#jstack16074thread_dump.log
分析日志,發現下面情況,線程數量不斷增加,代碼位置在FtpMonitorProcess.java:85
"Thread-4655"#4774prio=5os_prio=0tid=0x00007f84aa2fe000nid=0xd408bwaitingformonitorentry[0x00007f802b704000]
java.lang.Thread.State:BLOCKED(onobjectmonitor)
atcn.cloudwalk.bat.util.http.FtpUtil.connect(FtpUtil.java:246)
-waitingtolock0x00000006c09c1888(ajava.lang.Classforcn.cloudwalk.bat.util.http.FtpUtil)
atcess.FtpMonitorProcess$1.run(FtpMonitorProcess.java:85)
atjava.lang.Thread.run(Thread.java:748)
"Thread-4654"#4773prio=5os_prio=0tid=0x00007f84aa2fc000nid=0xd408awaitingformonitorentry[0x00007f802b805000]
java.lang.Thread.State:BLOCKED(onobjectmonitor)
atcn.cloudwalk.bat.util.http.FtpUtil.connect(FtpUtil.java:246)
-waitingtolock0x00000006c09c1888(ajava.lang.Classforcn.cloudwalk.bat.util.http.FtpUtil)
atcess.FtpMonitorProcess$2.run(FtpMonitorProcess.java:114)
atjava.lang.Thread.run(Thread.java:748)
5.找到問題代碼
發現這個方法每次被調用就會創建一個新的線程。而這個方法是被定時任務調用的,每10秒調用一次。
問題就出在ftp沒有配置,所以線程內執行ftp操作時,線程阻塞,沒能釋放。若ftp可用,則不會出現線程阻塞問題。
這就是問題根源。
privatevoidlistDeviceFiles(){
newThread(newRunnable(){
@Override
publicvoidrun(){
logger.debug("開始獲取[ftp-設備]文件...");
try{
StringworkDir=ftpConfig.getWorkdir();
//連接
FTPClientftpClient=FtpUtil.connect(ftpConfig);
ftpClient.changeWorkingDirectory(workDir);
ftpClient.changeWorkingDirectory(SubscribeDataTypeEnum.DEVICE_INFO.getKey().toString());
FTPFile[]files=ftpClient.listFiles();
for(FTPFilefile:files){
decomposeFile(file,ftpClient);
ftpClient.logout();
}catch
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業或盈利用途。
- 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 兒童心理健康的提升與干預
- 【教學案例】跨境電商專題頁營銷策劃
- 保護輸電線路安全法律問題分析
- 陜西省渭南市蒲城縣2024-2025學年七年級下學期末質量檢測語文試卷(含答案)
- 山東省德州市2025屆高三下學期三模生物試卷(有答案)
- 巾幗活動展覽活動方案
- 工會冬季出游活動方案
- 工廠小年活動策劃方案
- 展館內文化沙龍活動方案
- 小班特色涂鴉活動方案
- 華南理工大學《機器學習》2022-2023學年期末試卷
- 2024年人教版八年級語文下冊期末考試卷(附答案)
- 影視劇組場地租賃合同
- 個體工商戶食品安全管理制度
- TSXCAS 015-2023 全固廢低碳膠凝材料應用技術標準
- 北京交通大學《交通系統建模與測試技術》2022-2023學年第一學期期末試卷
- 耳穴考核試題及答案
- 2024年浙江省中考社會試卷真題(含標準答案及評分標準)
- 廣東省廣州市白云廣雅2024-2025學年七年級上學期開學測英語試題+(無答案)
- 《無人機法律法規知識》課件-第1章 民用航空法概述
- 農作物植保員技能競賽備考試題庫400題(含答案)
評論
0/150
提交評論