一.CPU,Mem過高怎么辦 --這是個開始


本身是名Java開發,在做了一段大數據的工作后,猛然間想對Java做個總結。

從未寫過技術博客,一時不知如何開始,思慮后,暫且以自己喜愛的方式來開篇。

工作中遇到過CPU或內存過高的問題,解決步驟:

  1. 通過top命令查看,得到pid.
  2. 通過ps -mp <pid> -o THREAD,tid,time,pid 命令,拿到tid.
  3. 使用jdk自動的工具,jstack -l 15605 > stack.txt,得到此時的線程狀態。(Stack文件描述了當時每個線程的狀態,這是一個很強大的知識點,后面慢慢細說。)
  4. 將步驟2中得cpu過高的tid,由十進制轉換為16進制(如果是windows server也可以通過在線的一些工具進行轉換。)
  5. 使用命令grep "3cfb" stack.txt -A30在生成的stack文件中查找,可以看出當前的程序是由於進行GC導致的cpu過高。
  6. JVM內存占滿會觸發GC(這是個知識點,GC的觸發機制,下節在細說),那我們就用jdk自帶的工具查看下此時的內存情況。jmap -dump:file=heap.dump,format=b <pid>
  7. 通過jdk自帶工具,jhat -JXmx1G heap.dump解析dump文件。(生成的dump文件一般會很大,所以需要大內存的PC去解析。另外,MAT(MemoryAnalyzer Tool)工具是eclipse的一個插件,也可以分析dump文件)

  8. Jhat命令在7000端口自動部署了web,可以通過serverIp:7000訪問

這是解決問題的的一個具體方法,這里涉及到了很多知識點,我准備依此為據,將知識點串起來。下次寫GC相關的一些東西。
              


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM