站長(zhǎng)資訊網(wǎng)
        最全最豐富的資訊網(wǎng)站

        Tomcat占用CPU過高解決方法

        問題描述

        在工作中經(jīng)常遇到Tomcat占用CPU居高不下,top顯示結(jié)果超過200%,請(qǐng)求無法響應(yīng),針對(duì)這種情況有以下處理辦法進(jìn)行排查。請(qǐng)求無法響應(yīng)。

        問題排查

        1、獲取進(jìn)程信息

        通過jdk提供的jps命令可以快速查出jvm進(jìn)程

        jps pid

        2、查看jstack信息

        jstack pid

        3、將十進(jìn)制pid轉(zhuǎn)換為16進(jìn)制

        將十進(jìn)制轉(zhuǎn)換成16進(jìn)制
        # printf “%xn” 19713–>將第2步查到占用較高CPU的線程號(hào)轉(zhuǎn)換為16進(jìn)制,以便于jstack查看
        4d01

        #jstack pid | grep 0x4d01–> 0x4d01為第3步19713轉(zhuǎn)換為16進(jìn)制后的數(shù)字,因?yàn)閖stack顯示的線程號(hào)是以16進(jìn)制表示的!

        將16進(jìn)制轉(zhuǎn)換成十進(jìn)制
        # printf “%dn” 0x4d19

        jstack的作用是顯示正在運(yùn)行的所有Java線程情況,jstack pid | grep 0x4d01的意思只顯示某個(gè)java線程的運(yùn)行信息。通過這種方法,可以將此線程正在運(yùn)行的方法顯示出來,將此方法交給開發(fā)即可。(也可能jstack pid | grep 0x4d01什么都沒有出來的)

        4、打印線程的堆棧信息

        jstack pid | grep tid -A 30

        此處不一一列表各tid的堆棧信息了,在其中一個(gè)的tid堆棧信息中找到了問題的原因

        5、進(jìn)一步排查,分析每個(gè)線程的cpu占用量

        簡(jiǎn)單點(diǎn)兒的方法則是,查出進(jìn)程id后,通過如下命令查看該進(jìn)程中每個(gè)線程的資源使用情況

        top -H -p pid  -H用于顯示某個(gè)進(jìn)程的所有線程

        從這里獲取pid(線程id),轉(zhuǎn)換為16進(jìn)制,然后去stack信息中查找對(duì)象的線程信息。

        通過上述方法,查出tomcat進(jìn)程對(duì)應(yīng)的線程cpu占用率累積之和約80%,遠(yuǎn)小于top給出的200%+

        說明并不存在長(zhǎng)期占用cpu的線程,應(yīng)該是屬于有許多短暫性的cpu密集計(jì)算。進(jìn)而懷疑是不是jvm內(nèi)存不足,頻繁gc導(dǎo)致。

        jstat -gc pid

        發(fā)現(xiàn)jvm內(nèi)存使用并未出現(xiàn)異常,gc次數(shù)明顯暴漲

        查完內(nèi)存,由于本身是一個(gè)網(wǎng)絡(luò)程序,進(jìn)一步排查網(wǎng)絡(luò)連接。

        6、問題定位

        查詢tomcat對(duì)應(yīng)端口的tcp鏈接,查看是否存在大量EASTABLISH的鏈接,或還有部分其它狀態(tài)的連接。

        netstat -anlp | grep port

        netstat狀態(tài)說明:

        LISTEN:偵聽來自遠(yuǎn)方的TCP端口的連接請(qǐng)求
        SYN-SENT:再發(fā)送連接請(qǐng)求后等待匹配的連接請(qǐng)求(如果有大量這樣的狀態(tài)包,檢查是否中招了)
        SYN-RECEIVED:再收到和發(fā)送一個(gè)連接請(qǐng)求后等待對(duì)方對(duì)連接請(qǐng)求的確認(rèn)(如有大量此狀態(tài),估計(jì)被flood***了)
        ESTABLISHED:代表一個(gè)打開的連接
        FIN-WAIT-1:等待遠(yuǎn)程TCP連接中斷請(qǐng)求,或先前的連接中斷請(qǐng)求的確認(rèn)
        FIN-WAIT-2:從遠(yuǎn)程TCP等待連接中斷請(qǐng)求
        CLOSE-WAIT:等待從本地用戶發(fā)來的連接中斷請(qǐng)求
        CLOSING:等待遠(yuǎn)程TCP對(duì)連接中斷的確認(rèn)
        LAST-ACK:等待原來的發(fā)向遠(yuǎn)程TCP的連接中斷請(qǐng)求的確認(rèn)(不是什么好東西,此項(xiàng)出現(xiàn),檢查是否被***)
        TIME-WAIT:等待足夠的時(shí)間以確保遠(yuǎn)程TCP接收到連接中斷請(qǐng)求的確認(rèn)
        CLOSED:沒有任何連接狀態(tài)

        解除Tomcat中POST方式上傳文件的大小限制

        當(dāng)服務(wù)器是Tomcat時(shí),通過POST上傳的文件大小的最大值為2M(2097152)。

        如果想修改該限制,修改方法如下:

        tomcat目錄下的conf文件夾下,server.xml 文件中以下的位置中添加maxPostSize參數(shù)

        <Connector port=”8081″ 
                      maxThreads=”150″ minSpareThreads=”25″ maxSpareThreads=”75″ 
                      enableLookups=”false” redirectPort=”8443″ acceptCount=”100″ 
                      debug=”0″ connectionTimeout=”20000″ 
                      disableUploadTimeout=”true” URIEncoding=”GBK” 
                      maxPostSize=”-1″/>

        注意:maxPostSize參數(shù)只有當(dāng)request的Content-Type為“application/x-www-form-urlencoded”時(shí)起作用。

        從 apache-tomcat-7.0.63 開始,參數(shù) maxPostSize 的含義就變了: 如果將值設(shè)置為 0,表示 POST 最大值為 0,不限制 POST 大小需要將值設(shè)置為 -1。,在此版本之前設(shè)置為 0 表示不限制 POST 大小。

        贊(0)
        分享到: 更多 (0)
        網(wǎng)站地圖   滬ICP備18035694號(hào)-2    滬公網(wǎng)安備31011702889846號(hào)
        主站蜘蛛池模板: 国产麻豆一精品一AV一免费| 高清在线亚洲精品国产二区| 日韩精品亚洲人成在线观看| 成人午夜精品亚洲日韩 | 精品久久久久久无码中文字幕一区| 国产精品国产三级国产AⅤ| 精品国产一区二区三区久久久狼| 精品免费久久久久国产一区| 欧美精品/日韩精品/国产精品| 精品一区二区三区在线成人 | 国产精品狼人久久久久影院| 国产精品网站在线观看免费传媒| 亚洲av午夜精品一区二区三区| 99久久精品无码一区二区毛片| 99在线精品免费视频九九视| 亚洲Av无码精品色午夜| 免费观看四虎精品成人| 国产精品亚洲玖玖玖在线观看| 日韩一级精品视频在线观看| 99RE6热在线精品视频观看| 老司机性色福利精品视频| 亚洲欧洲精品无码AV| 亚洲国产精品日韩| 欧美精品人爱a欧美精品| 国产午夜精品久久久久九九| 人精品影院| 国产精品主播一区二区| 国产精品成人免费观看 | 久久国产精品一国产精品金尊| 亚洲精品一品区二品区三品区| 亚欧洲精品在线视频免费观看| 精品午夜福利1000在线观看| 国产精品伦理久久久久久| 91亚洲国产成人久久精品 | 亚洲精品美女久久久久99| 欧美亚洲成人精品| 久久久久国产精品嫩草影院 | 99热热久久这里只有精品68| 国产偷亚洲偷欧美偷精品 | 国内精品伊人久久久久影院对白| 国产精品国产欧美综合一区 |