Java进程CPU占用高导致的网页请求超时的故障排查
生活随笔
收集整理的這篇文章主要介紹了
Java进程CPU占用高导致的网页请求超时的故障排查
小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.
作者:榮書
來源:https://blog.51cto.com/rongshu/2426712
一、發(fā)現(xiàn)問題的系統(tǒng)檢查:一個(gè)管理平臺(tái)門戶網(wǎng)頁進(jìn)統(tǒng)計(jì)頁面提示請(qǐng)求超時(shí),隨進(jìn)服務(wù)器操作系統(tǒng)檢查load average超過4負(fù)載很大,PID為7163的進(jìn)程占用到了800%多。
二、定位故障
根據(jù)這種故障的一般處理思路,先找出問題進(jìn)程內(nèi)CPU占用率高的線程,再通過線程棧信息找出該線程當(dāng)時(shí)在運(yùn)行的問題代碼段,操作如下:2.1、根據(jù)思路查看高占用的“進(jìn)程中”占用高的“線程”,追蹤發(fā)現(xiàn)7163的進(jìn)程中16298的線程占用較高,使用命令:
2.2、將16298的線程ID轉(zhuǎn)換為16進(jìn)制的線程ID。printf "%x\n" 162983faa
2.3、通過jvm的jstack查看進(jìn)程信息,發(fā)現(xiàn)是調(diào)用數(shù)據(jù)庫的問題。
2.4、既然是數(shù)據(jù)庫的問題就檢查數(shù)據(jù)庫,思路是先打印了所有在跑的數(shù)據(jù)庫線程,檢查后發(fā)現(xiàn)跟進(jìn)情況找到問題表:
2.4.1、打印mysql現(xiàn)有進(jìn)程信息,并把信息生成log文件,使用的命令如下:
grep Query mysql_full_process.log2.4.3、確認(rèn)表中數(shù)據(jù)量,發(fā)現(xiàn)表中已經(jīng)有將近300萬條數(shù)據(jù),判斷問題是查詢時(shí)間過長導(dǎo)致的,使用的命令如下:
use databases_name;select count(1) from table_name;2.4.4、確認(rèn)表是否有索引,發(fā)現(xiàn)表未創(chuàng)建索引;
show create table table_name\G三、確認(rèn)及處理問題:
詢問了研發(fā)表的數(shù)據(jù)是否重要,確認(rèn)不重要,檢查字段有時(shí)間字段,根據(jù)時(shí)間確認(rèn)只留一個(gè)月的數(shù)據(jù),操作如下:
3.1、清理數(shù)據(jù)只保留一個(gè)月的數(shù)據(jù),清理后數(shù)據(jù)只剩下4000多,使用命令如下;
3.2、由于表未加索引,所以給表創(chuàng)建索引,使用命令如下:
show create table table_name;
四、結(jié)果:
五、其他:
innodb_buffer_pool_size=4G
有道無術(shù),術(shù)可成;有術(shù)無道,止于術(shù)
歡迎大家關(guān)注Java之道公眾號(hào)
好文章,我在看??
新人創(chuàng)作打卡挑戰(zhàn)賽發(fā)博客就能抽獎(jiǎng)!定制產(chǎn)品紅包拿不停!總結(jié)
以上是生活随笔為你收集整理的Java进程CPU占用高导致的网页请求超时的故障排查的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: NYOJ 888 取石子(九)
- 下一篇: NYOJ 453 小珂的烦恼