查看JAVA进程中哪个线程CPU消耗最高_JAVA本地远程连接linux程序监控状态

转载:http://www.cnblogs.com/tankaixiong/p/5995759.html
转载:http://www.cnblogs.com/tankaixiong/p/5984023.html

查看JAVA进程中哪个线程CPU消耗最高

一,在centos linux 上查看进程占用cpu过高

top 
shift+h
查看哪个进程程消耗最高
 
 

二,查看JAVA进程中哪个线程消耗最高

 
2.1 导出java运行的线程信息
 
jstack 进程id(jps查看)
jstack 进程id > ps.txt
jstack -l 进程id (窗口打印)
 
 
//另外还有一种方式
 
如果启动方式如下:
nohup java -classpath conf/:my.jar  com.tank.manClass>./log.out 2>&1 &
 
则执行:  kill -3 PID,进程信息会输出到/ log.out 
 
 
 
 
2.2 查找最消耗cpu的java线程
 
jps
找到java进程PID
命令:ps -mp  pid -o THREAD,tid,time   或者  ps -Lfp  pid
 查看JAVA进程中哪个线程CPU消耗最高_JAVA本地远程连接linux程序监控状态_第1张图片
通过%CPU和 TIME,判断占用的线程TID
 
找到TID,转换成16进制,然后在上面(jstack 进程id > ps.txt)导出的文件中搜索,就可以定位到具体的线程,类。

JAVA本地远程连接linux程序监控状态

环境:
 1.本地window
2.程序部署在centos
 

一,启动访问权限安全守护程序

新建文件:jstatd.all.policy ,注意路径
grant codebase "$JAVA_HOME/lib/tools.jar" { permission java.security.AllPermission; };

 

启动:
 screen jstatd -J-Djava.security.policy=jstatd.all.policy 

 

二,JAVA启动参数设置

JAVA_OPTS='-Dcom.sun.management.jmxremote.port=5656 -Dcom.sun.management.jmxremote.ssl=false -Dcom.sun.management.jmxremote.authenticate=false'   

 

 
注:
  1. -Dcom.sun.management.jmxremote.port :这个是配置远程 connection 的端口号的,要确定这个端口没有被占用
  2. -Dcom.sun.management.jmxremote.ssl=false 指定了 JMX 是否启用 ssl
  3. -Dcom.sun.management.jmxremote.authenticate=false 指定了JMX 是否启用鉴权(需要用户名,密码鉴权)
2,3两个是固定配置,是 JMX 的远程服务权限的
  查看JAVA进程中哪个线程CPU消耗最高_JAVA本地远程连接linux程序监控状态_第2张图片
 

三,可能遇到的问题

3.1 如果遇到无法远程连接问题。

查看 hostname -i

hostname对应的IP是不是远程连接的IP地址,如果不是则查看 cat /etc/host 添加ip 对本机对外IP的映射

 


你可能感兴趣的:(jvm)