




版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
第記一次線程爆滿導致服務器崩潰的問題排查及解決目錄問題介紹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. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 農產品批發市場合作運營協議
- 智能工廠智能生產線控制系統開發協議
- 委托加工制造合同及質量保證條款
- 浙江國企招聘2025臺州市城市建設投資發展集團有限公司招聘12人筆試參考題庫附帶答案詳解
- 2025重慶聯合產權交易所集團股份有限公司招聘31人筆試參考題庫附帶答案詳解
- 質量安全員試題及答案
- 2025冶金工業信息標準研究院招聘筆試參考題庫附帶答案詳解
- 電商產業園發展前景分析報告
- 紡織品設計師證書考試理念總結試題及答案
- 淘寶平臺客戶關系管理(CRM)戰略與實踐
- 電工電子學知到智慧樹章節測試課后答案2024年秋湖南大學
- 2024年高考物理試題(廣東卷) 含答案
- 陜西延長石油集團有限責任公司行測筆試題庫2024
- 【MOOC】計算機網絡-南京農業大學 中國大學慕課MOOC答案
- 《預裝式變電站》課件
- 北京工業大學《環境微生物學》2022-2023學年第一學期期末試卷
- 汽車修理工(技師)考試題庫(含答案)
- 《循環神經網絡》課件
- 新能源技術投資風險評估與管理策略考核試卷
- 2023北京朝陽區初三一模英語試題及參考答案
- 2024年浙江省中考社會試卷真題(含標準答案及評分標準)
評論
0/150
提交評論