java排查進(jìn)程占用系統(tǒng)內(nèi)存高方法
1、top 查看進(jìn)程內(nèi)存
top 查看具體是哪個(gè)進(jìn)程吃內(nèi)存較多,接下來我們以排查第一個(gè)為例

話外音
根據(jù)pid 查找 pid所屬的 docker D
docker inspect -f "{{.Id}} {{.State.Pid}} {{.Config.Hostname}}"
$(docker ps -q) |grep <PID>2、定位線程問題
(通過命令查看9534進(jìn)程的線程情況)
命令:ps p 7051 -L -o pcpu,pmem,pid,tid,time,tname,cmd

由此可以看到這PID:7051 的進(jìn)程產(chǎn)生了很多線程。接下來就可以通過jstack查看內(nèi)存使用的堆棧。
具體可以執(zhí)行 ps p 7051 -L -o pcpu,pmem,pid,tid,time,tname,cmd |wc -l 來查具體有多少線程

3、查看內(nèi)存使用的堆棧
在這里我們挑選了TID=7053的線程進(jìn)行分析,首先需要將7053這個(gè)id轉(zhuǎn)換為16進(jìn)制。需輸入如下命令
執(zhí)行命令 printf "%x\n" 7053

4、將PID為7051的堆棧信息打印到j(luò)stack.log中
命令:jstack -l 7051> /usr/local/temp/jstack.log
5、查看日志
好多waiting的,具體需要開發(fā)查看代碼,為何這么多線程等待
可以看到這個(gè)線程狀態(tài)為:RUNNABLE。是正在運(yùn)行狀態(tài)的
另外其它的大部分線程狀態(tài)為:WAITING。通過查看文件分析 看到大量 Java Thread State。
說明它在等待另一個(gè)條件的發(fā)生,來把自己?jiǎn)拘?,或者干脆它是調(diào)用了 sleep(N)。
此時(shí)線程狀態(tài)大致為以下幾種:
java.lang.Thread.State: WAITING (parking):一直等那個(gè)條件發(fā)生;
java.lang.Thread.State: TIMED_WAITING (parking或sleeping):定時(shí)的,那個(gè)條件不到來,也將定時(shí)喚醒自己。

以上就是java排查進(jìn)程占用系統(tǒng)內(nèi)存高方法的詳細(xì)內(nèi)容,更多關(guān)于java進(jìn)程占用排查的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!
相關(guān)文章
Spring根據(jù)URL參數(shù)進(jìn)行路由的方法詳解
這篇文章主要給大家介紹了關(guān)于Spring根據(jù)URL參數(shù)進(jìn)行路由的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起來看看吧。2017-12-12
Flink自定義Sink端實(shí)現(xiàn)過程講解
這篇文章主要介紹了Flink自定義Sink端實(shí)現(xiàn)過程,在Fink官網(wǎng)中sink端只是給出了常規(guī)的write api.在我們實(shí)際開發(fā)場(chǎng)景中需要將flink處理的數(shù)據(jù)寫入kafka,hbase kudu等外部系統(tǒng)2023-01-01
教你如何測(cè)試Spring Data JPA的Repository
Spring Data JPA 提供了一些便捷的方式來測(cè)試這種持久層的代碼,常見的兩種測(cè)試類型是集成測(cè)試和單元測(cè)試,本文通過示例代碼給大家介紹的非常詳細(xì),感興趣的朋友跟隨小編一起看看吧2024-08-08
Java程序執(zhí)行時(shí)間的2種簡(jiǎn)單方法
這篇文章介紹了Java程序執(zhí)行時(shí)間的2種簡(jiǎn)單方法,有需要的朋友可以參考一下2013-09-09
SpringBoot中MybatisX插件的簡(jiǎn)單使用教程(圖文)
MybatisX 是一款基于 IDEA 的快速開發(fā)插件,方便在使用mybatis以及mybatis-plus開始時(shí)簡(jiǎn)化繁瑣的重復(fù)操作,本文主要介紹了SpringBoot中MybatisX插件的簡(jiǎn)單使用教程,感興趣的可以了解一下2023-06-06

