国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

【Java】 服務器cpu過高如何排查和解決?

這篇具有很好參考價值的文章主要介紹了【Java】 服務器cpu過高如何排查和解決?。希望對大家有所幫助。如果存在錯誤或未考慮完全的地方,請大家不吝賜教,您也可以點擊"舉報違法"按鈕提交疑問。

前言

對于互聯(lián)網公司,線上CPU飆升的問題很常見(例如某個活動開始,流量突然飆升時),按照本文的步驟排查,基本1分鐘即可搞定!特此整理排查方法一篇,供大家參考討論提高。

線上系統(tǒng)突然運行緩慢,CPU飆升,甚至到100%,以及Full GC次數過多,接著就是各種報警:例如接口超時報警等。此時急需快速線上排查問題。

不管什么問題,既然是CPU飆升,肯定是查一下耗CPU的線程,然后看看GC。

一、常見能夠引起CPU100%異常的情況都有哪些?

  1. Java 內存不夠或者溢出導致GC overhead limit exceeded。

  2. 代碼中互相競爭導致的死鎖。

  3. 特別耗費計算資源的操作,比如正則匹配,Java中的正則匹配默認有回溯問題,復雜的正則匹配引起的CPU異常。

  4. 死循環(huán)引起的CPU高度密集計算。
    針對第1種,根據Oracle官方資料,GC overhead limit exceeded表示JVM一直在GC導致應用程序變慢,具體量化指標就是JVM執(zhí)行垃圾回收花費超過98%的時間,但釋放出的可用堆內存卻少于2%,連續(xù)多次(一般5次)GC回收的內存都不足2%的情況下就會拋出此異常。

經過垃圾回收每次釋放的內存都少于2%很容易又被新生對象填滿,JVM快速進入下一次垃圾回收,無限循環(huán),由此引起頻繁的GC長期消耗我們服務器CPU資源,從而使CPU使用率達到100%

我們可以使用-XX:-UseGCOverheadLimit這個參數關閉GC overhead limit exceeded,但這樣治標不治本,建議檢查應用程序的內存使用是否合理以及是否需要增加堆內存。

二、服務器CPU使用率飆升異常,黃金4步排查法

  1. TOP命令找到占用CPU高的Java進程PID

    top

    java排查cpu高的原因,Java程序員進階之路,java,服務器,開發(fā)語言

  2. 根據進程ID找到占用CPU高的線程

    ps -mp pid -o THREAD,tid | sort -r

    java排查cpu高的原因,Java程序員進階之路,java,服務器,開發(fā)語言

  3. 將指定的線程ID輸出為16進制格式

    printf “%x\n” tid
    java排查cpu高的原因,Java程序員進階之路,java,服務器,開發(fā)語言

  4. 根據16進制格式的線程ID查找線程堆棧信息

jstack pid |grep tid -A 50

java排查cpu高的原因,Java程序員進階之路,java,服務器,開發(fā)語言

獲取到線程堆棧信息就好辦了,以上即是采用單線程模擬一個復雜的正則匹配的堆棧示例圖,可以看得出線程都在指向regex.Pattern,在生產多線程環(huán)境下這個復雜正則匹配會導致CPU利用率奇高。

三、排查 CPU 故障的常用命令

  • top:Linux 命令。可以實時查看各個進程的 CPU 使用情況。也可以查看最近一段時間的 CPU 使用情況。默認按 CPU 使用率排序。
  • ps:Linux 命令。強大的進程狀態(tài)監(jiān)控命令??梢圆榭催M程以及進程中線程的當前 CPU 使用情況。屬于當前狀態(tài)的采樣數據。
  • jstack:Java 提供的命令??梢圆榭茨硞€進程的當前線程棧運行情況。根據這個命令的輸出可以定位某個進程的所有線程的當前運行狀態(tài)、運行代碼,以及是否死鎖等等。
  • pstack:Linux 命令??梢圆榭茨硞€進程的當前線程棧運行情況。

四、什么場景會造成 CPU 低而負載確很高呢?

負載總結為一句話就是:需要運行處理但又必須等待隊列前的進程處理完成的進程個數。具體來說,也就是如下兩種情況:

等待被授權予 CPU 運行權限的進程、等待磁盤 I/O 完成的進程。

CPU 低而負載高也就是說等待磁盤 I/O 完成的進程過多,就會導致隊列長度過大,這樣就體現到負載過大了,但實際是此時 CPU 被分配去執(zhí)行別的任務或空閑,具體場景有如下幾種:文章來源地址http://www.zghlxwxcb.cn/news/detail-677686.html

  1. 數據庫抖動,造成線程隊列 hang 住,負載升高
  2. 磁盤讀寫請求過多就會導致大量 I/O 等待。CPU 的工作效率要高于磁盤,而進程在 CPU 上面運行需要訪問磁盤文件,這個時候 CPU 會向內核發(fā)起調用文件的請求,讓內核去磁盤取文件,這個時候會切換到其他進程或者空閑,這個任務就會轉換為不可中斷睡眠狀態(tài)。當這種讀寫請求過多就會導致不可中斷睡眠狀態(tài)的進程過多,從而導致負載高,CPU 低的情況。
  3. 外接硬盤故障,常見有掛了 NFS,但是 NFS server 故障比如系統(tǒng)掛載了外接硬盤如 NFS 共享存儲,經常會有大量的讀寫請求去訪問 NFS 存儲的文件,如果這個時候 NFS Server 故障,那么就會導致進程讀寫請求一直獲取不到資源,從而進程一直是不可中斷狀態(tài),造成負載很高。

五、監(jiān)控發(fā)現線上機器內存占用率居高不下,如何分析進行優(yōu)化?

  1. 使用top -p pid針對所要查的 pid 查看該進程的 CPU 和內存以及負載情況。
  2. jmap -histo:live [pid],然后分析具體的對象數目和占用內存大小,從而定位代碼。
  3. jmap -dump:live,format=b,file=xxx.xxx [pid],然后利用 MAT 工具分析是否存在內存泄漏等等。

到了這里,關于【Java】 服務器cpu過高如何排查和解決?的文章就介紹完了。如果您還想了解更多內容,請在右上角搜索TOY模板網以前的文章或繼續(xù)瀏覽下面的相關文章,希望大家以后多多支持TOY模板網!

本文來自互聯(lián)網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。如若轉載,請注明出處: 如若內容造成侵權/違法違規(guī)/事實不符,請點擊違法舉報進行投訴反饋,一經查實,立即刪除!

領支付寶紅包贊助服務器費用

相關文章

  • Java應用CPU占用過高問題排查

    測試環(huán)境CPU突然升高,日志查詢無異常,可以通過使用jvm的調試工具定位問題。 1.定位java服務進程 2.定位java線程 3.定位代碼塊 1.定位進程 獲取cpu占用高的進程pid 2.定位線程 轉16進制 3.定位代碼 目的:將當前堆棧信息保存為文件,通過16進制的TID查找問題所在的代碼塊;

    2024年02月12日
    瀏覽(21)
  • oracle服務器的CPU占用率一直100%排查方式

    oracle服務器的CPU占用率一直100%排查方式

    公司開發(fā)、測試、演示環(huán)境,三個環(huán)境的oracle服務器無論服務器是否空閑, CPU的占用率一直是100%, 一直也沒有找到問題原因,今天就花了一整天時間研究這個問題。 awr報告是oracle 10g下提供的一種性能收集和分析工具,它能提供一個時間段內整個系統(tǒng)資源使用情況的報告,

    2024年02月14日
    瀏覽(19)
  • 【面試】線上Java程序占用 CPU 過高請說一下排查方法?

    【面試】線上Java程序占用 CPU 過高請說一下排查方法?

    這個問題可以說是 Java 面試的高頻面試題了,有很多面試官都喜歡問這個問題,問題可能是下面這樣的。 線上一臺服務器 CPU 使用率100% 了,如果你碰到這樣的情況,如何排查并找到問題原因? 這就是一個套路題,所謂套路題就是有標準的套路解法的,掌握了套路,不僅能解

    2024年02月09日
    瀏覽(25)
  • 排查Docker容器Java程序CPU過高問題以及處理方法

    因為Docker里java程序運行環(huán)境是用的jre,沒有top和jstack命令,所以要在容器里安裝top和jattach,來查看和導出線程信息。 系統(tǒng):Debian10 鏡像:openjdk:8u275-jre-slim-buster 容器ID:99abe55a98dc 一.安裝top: ?? ?1.進入容器: ? ?? ?2.因為官方鏡像地址太慢,所以 修改源地址:https://develop

    2024年02月11日
    瀏覽(21)
  • 服務器卡頓、CPU飆升、接口負載劇增,如何定位到Java代碼?

    服務器卡頓、CPU飆升、接口負載劇增,如何定位到Java代碼?

    ??本文收錄于,Java基礎教程(進階篇)。 目前已經800+訂閱,CSDN最強Java專欄,包含全部Java基礎知識點、Java8新特性、Java集合、Java多線程、Java代碼實例,理論結合實戰(zhàn),實現Java的輕松學習。 解決這個問題的關鍵是要找到Java代碼的位置。下面分享一下排查思路,以CentOS為例

    2024年02月11日
    瀏覽(17)
  • k8s排查Java應用CPU負載過高問題

    k8s排查Java應用CPU負載過高問題

    因為k8s發(fā)布的pod還未加入資源的監(jiān)控,在查看pod負載時發(fā)現其中pod占用1核CPU 2.1通過debug排查 下一步可以到對應的node節(jié)點查看對應進程的信息,也可以通過debug在當前節(jié)點進行排查(當節(jié)點太多懶得登錄過去時) top命令找到所在節(jié)點進程信息,找到問題進程 查看詳細線程 通

    2024年02月05日
    瀏覽(25)
  • 美國服務器網絡延遲過高的原因及解決方案

    美國服務器網絡延遲成為了一個普遍存在的問題 。尤其是對于使用美國服務器的用戶來說, 網絡延遲過高是一個常見的困擾 。本文將探討 美國服務器網絡延遲過高的原因 ,并提供一些 解決方案 。 1. 距離因素 :美國位于亞洲大陸的對面,所以如果用戶位于亞洲地區(qū),使用

    2024年01月20日
    瀏覽(23)
  • 服務器卡頓如何排查?

    服務器網絡卡,一般情況下,請先檢查您服務器的使用情況。 1.CPU使用率是否大于50%。 2.網絡使用率是否過高。 3.內存使用率是否過高。 如果出現上述情況,則表明您的服務器或網絡無法承載您目前的服務,請聯(lián)系技術人員調整您的資源。租用服務器后在使用過程中,客戶會

    2024年02月11日
    瀏覽(19)
  • Java進程內存占用過高,排查解決方法

    Java進程內存占用過高,排查解決方法 在Java應用程序開發(fā)過程中,我們經常會遇到Java進程占用內存過高的問題。這可能會導致系統(tǒng)性能下降、應用程序崩潰甚至無法啟動。本文將介紹一些常見的排查和解決方法,幫助您解決Java進程內存占用過高的問題。 檢查內存泄漏 內存泄

    2024年02月07日
    瀏覽(24)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

支付寶掃一掃領取紅包,優(yōu)惠每天領

二維碼1

領取紅包

二維碼2

領紅包