概述
free -g
内存过多
1、top
M---查看内存排序
P----查看CPU排序
找到内存过多的PID号(进程号)
PID(Process Identification)操作系统里指进程识别号,也就是进程标识符。操作系统里每打开一个程序都会创建一个进程ID,即PID。
2、top -H -p 74142
二、查看对应进程的java堆栈信息
查看进程中的线程 ps -mp 74142 -o THREAD,tid,time
根据找到的进程,可以去查看对应的java堆栈信息,来进一步定位是哪一段代码出现了问题。
通过jstack -l 线程id
可以查看java进程的堆栈信息,这里的pid是进程号。
在堆栈信息中nid指的就是线程id,但是这里的线程id是16进制,我们之前获取的线程id是10进制的,需要转换一下,比如我查到线程id是14533,转换后是38c5,所以在jstack -l结果中查看38c5这个线程。
top命令的补充
top命令是Linux上进行系统监控的首选命令,但有时候却达不到我们的要求,比如当前这台服务器,top监控有很大的局限性。这台服务器运行着websphere集群,有两个节点服务,就是【top视图 01】中的老大、老二两个java进程,top命令的监控最小单位是进程,所以看不到我关心的java线程数和客户连接数,而这两个指标是java的web服务非常重要的指标,通常我用ps和netstate两个命令来补充top的不足。
复制代码 代码如下:
监控java线程数:
ps -eLf | grep java | wc -l
复制代码 代码如下:
监控网络客户连接数:
netstat -n | grep tcp | grep 侦听端口 | wc -l
上面两个命令,可改动grep的参数,来达到更细致的监控要求。
在Linux系统“一切都是文件”的思想贯彻指导下,所有进程的运行状态都可以用文件来获取。系统根目录/proc中,每一个数字子目录的名字都是运行中的进程的PID,进入任一个进程目录,可通过其中文件或目录来观察进程的各项运行指标,例如task目录就是用来描述进程中线程的,因此也可以通过下面的方法获取某进程中运行中的线程数量(PID指的是进程ID):
复制代码 代码如下:
ls /proc/PID/task | wc -l
在linux中还有一个命令pmap,来输出进程内存的状况,可以用来分析线程堆栈:
复制代码 代码如下:
pmap PID
最后
以上就是淡然哈密瓜为你收集整理的一次JVM调优经历的全部内容,希望文章能够帮你解决一次JVM调优经历所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复