一、內存占用過高
1、造成服務器內存占用過高只有兩種情況:內存溢出或內存泄漏
(1)內存溢出:程序分配的內存超出物理內存的大小,導致無法繼續分配物理內存,出現OOM報錯。
(2)內存泄漏:不再調用的對象一直占用著內存不釋放,導致所占用的這塊內存被浪費掉,久而久之,內存泄漏的對象堆積起來,也會導致物理機的內存被耗盡,出現OOM報錯。
2、內存過高的檢測辦法:
一般我們的Java服務器都是部署在Linux機器上面,可以通過jvm自帶的命令進行一些檢測:
(1)查看對象的數目和占用內存大小;
(2)如果需要進一步定位問題代碼,那么就需要把Java程序的內存鏡像導出,再具體分析了,通過如下命令導出程序的內存鏡像。
二、CPU使用過高
1、當程序發現CPU使用過高的情況時,可以使用Windows系統的Process Explorer工具來找到CPU高消耗的線程,所以需要在Windows機器上面搭建好服務器的測試環境,盡量模擬出線上CPU飆升的情況;
2、模擬好環境后,通過任務管理器,在進程一欄中找到Java程序的進程號;
3、下載Process Explorer工具:
4、打開工具后,根據剛才的進程號找到進程;
5、然后右鍵-->Properties,再選擇Threads選項卡,點進CPU排序,可以找到消耗CPU最多的那個線程;
6、使用科學計算器,將十進制的線程號轉成十六進制,比如493620-->78834;
7、到此已經拿到了可能出問題的進程號和線程號,接下來使用jvm內置的命令來導出Java的堆棧信息:
jstack -l <進程號> > <導出目錄+文件名>
8、打開導出的堆棧信息,并全文搜索剛剛拿到的十六進制的線程號,就可以找到出問題的代碼具體位置了。
-
cpu
+關注
關注
68文章
11277瀏覽量
224948 -
內存
+關注
關注
9文章
3209瀏覽量
76357 -
JAVA
+關注
關注
20文章
3001瀏覽量
116419
發布評論請先 登錄
全球首創!RISC-V+AI架構高性能服務器CPU成功點亮
全液冷服務器系統架構設計案例分享
香港服務器租用的CPU和內存分配優化
服務器數據恢復—服務器斷電導致raid模塊損壞的數據恢復案例
華納云服務器角色服務器失敗的原因和解決辦法
ARM集群服務器 定義
服務器CPU架構解析,從x86到ARM:一文吃透其分類及對應品牌優勢
服務器使用過程中卡頓如何排查
DeepSeek企業級部署服務器資源計算 以raksmart裸機云服務器為例
Java服務器內存和CPU占用過高的原因
評論