我是靠谱客的博主 淡然哈密瓜,最近开发中收集的这篇文章主要介绍一次JVM调优经历,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

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调优经历所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(58)

评论列表共有 0 条评论

立即
投稿
返回
顶部