手机看片精品高清国产日韩,色先锋资源综合网,国产哺乳奶水91在线播放,乱伦小说亚洲色图欧洲电影

幫助中心 >  技術知識庫 >  云服務器 >  服務器教程 >  服務器卡頓、CPU飆升、接口負載劇增,如何定位到Java代碼?

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

2023-07-07 13:53:58 1872

一、線上服務器CPU飆升,如何定位到Java代碼

 

解決這個問題的關鍵是要找到Java代碼的位置。下面分享一下排查思路,以CentOS為例,總結為4步。

 

1步,使用top命令找到占用CPU高的進程。

 

2步,使用ps –mp命令找到進程下占用CPU高的線程ID。

 

3步,使用printf命令將線程ID轉換成十六進制數。

 

4步,使用jstack命令輸出線程運行狀態的日志信息。

 

二、生產環境服務器變慢,如何診斷處理

生產環境服務器變慢主要涉及3個維度:CPU利用率、磁盤I/O效率、內存瓶頸。

1、CPU利用率

 

CPU利用率過高或者CPU利用率過低,都會影響程序的處理效率。CPU利用率過高,說明當前服務器要處理的指令比較多,當CPU忙不過來的時候,指令的運行效率自然就會下降,用戶的感受就是程序響應變慢了。

 

針對這個問題,我們可以使用top命令查詢當前系統中占用CPU過高的進程,并定位到這個進程中比較活躍的線程。再通過jstack命令打印當前虛擬機的線程快照,根據快照日志排查問題代碼。

 

如果CPU利用率過低,則說明程序資源使用不夠,可以增加線程數量提升程序性能。

2、磁盤I/O效率

 

在程序運行過程中會直接或者間接涉及一些與磁盤I/O相關的操作,比如程序直接讀/寫磁盤或者程序依賴的第三方組件對磁盤進行持久化存儲,此時磁盤I/O效率就會對程序運行效率產生影響。

 

針對這種情況可以使用iostat命令查看,如果磁盤負載較高,可以針對性地進行優化。比如,借助緩存系統,減少磁盤I/O次數;用順序寫替代隨機寫入,減少尋址開銷;使用mmap替代read/write,減少內存拷貝次數。另外,磁盤I/O效率可以通過CPU與負載的非線性關系體現出來。當負載增大時,系統吞吐量不能有效增大,CPU不能線性增長,則很可能是磁盤I/O出現阻塞。

3、內存瓶頸

 

內存作為一塊臨時存儲數據的組件,所有CPU運行的指令都需要從內存中去讀/寫。內存的合理使用可以減少應用和磁盤的I/O頻率,減少網絡I/O的頻率,極大地提升I/O性能。

 

JVM對內存的合理分配,能夠避免頻繁的YGC和FULL GC。當內存使用率較高時,可以用dump命令查出JVM堆內存,用MAT工具進行分析,查出大對象或者占用內存最多的對象,以及排查是否存在內存泄漏的問題。如果用 dump 命令查出的堆內存文件正常,則可以考慮是堆外內存被大量使用導致出現問題,此時需要借助操作系統的pmap命令查出進程的內存分配情況。如果CPU和內存使用率都很正常,那么就需要進一步開啟GC日志,分析用戶線程暫停的時間、各部分內存區域GC次數和時間等指標,這里可以借助jstat命令或可視化工具GCEasy等。如果問題出在GC上,則考慮是不是內存不足,然后根據垃圾對象的特點進行參數調優,使用更適合的垃圾收集器,用jstack命令分析各個線程的狀態。如果問題比較隱蔽,則考慮是否開啟JMX,使用 visualmv 等可視化工具進行遠程監控與分析。

提交成功!非常感謝您的反饋,我們會繼續努力做到更好!

這條文檔是否有幫助解決問題?

非常抱歉未能幫助到您。為了給您提供更好的服務,我們很需要您進一步的反饋信息:

在文檔使用中是否遇到以下問題: