1.查看內存情況
- free -h
解釋下基本概念
Mem
內存的使用信息Swap
交換空間的使用信息total
系統總的可用物理內存大小used
已被使用的物理內存大小free
還有多少物理內存可用shared
被共享使用的物理內存大小buff/cache
被 buffer 和 cache 使用的物理內存大小available
還可以被使用的物理內存大小(即系統可用內存約等於free+shared+buff/cache)
2.top查看內存占用,shift+m按MEN占用降序
top詳解請參考:https://www.cnblogs.com/zhoug2020/p/6336453.html
可以看出PID為45685的進程占用內存較多
3.查看45685進程的線程情況
- ps p 45685 -L -o pcpu,pmem,pid,tid,time,tname,cmd
PID:45685的進程產生了很多線程。
4.使用ps命令:
- ps -ef | grep java | grep -v grep
查看當前java進程列表
可以看到java進程是Tomcat的啟動進程,開啟多個Tomcat啟動進程,並且是同一個端口。由此,可以判斷,是因為關閉Tomcat服務時,java進程沒有自動關閉,導致內存沒有釋放。
5.使用lsof命令:
- lsof | grep java |grep -v grep >> 1.log
查看當前進程的運行狀態
- vi 1.log
按:輸入/ESTABLISHED,找到正常運行的進程
發現307100的進程運行正常
kill掉其余的進程
- kill -9 PID
原文鏈接:https://www.cnblogs.com/eeexu123/p/10913389.html
最后定位到是tomcat運行的jenkins的問題,具體問題正在排查。
排查的過程中起初以為是tomcat內存優化的問題,特此找到tomcat正確的jvm內存配置方案。
原文鏈接: https://blog.csdn.net/acwa123/article/details/72626921
Tomcat並不建議直接在catalina.sh里配置變量,而是寫在與catalina同級目錄(bin目錄)下的setenv.sh里。
所以如果我們想要修改jvm的內存配置,那么我們就需要修改setenv.sh文件(如果沒有就新建一個setenv.sh),寫入(大小根據自己情況修改):
export CATALINA_OPTS="$CATALINA_OPTS -Xms1600m"
export CATALINA_OPTS="$CATALINA_OPTS -Xmx1600m"
export CATALINA_OPTS="$CATALINA_OPTS -XX:MaxPermSize=256m"