Linux Java程序debug总结
2017-04-28 12:35
211 查看
最近博主debug了远程Linux服务器上的Java程序,在此对过程中所使用的工具进行一番总结。
首先我们可以使用
指令来确认Java进程的pid:
f
然后我们可以使用
在确认我们Java程序所在进程出现问题后,我们使用如下指令来查看进程中线程的时间消耗情况:
通过对比各个线程消耗CPU时间的多少我们可以大致判定出问题所在线程,首先我们先把线程号转化为16进制格式:
然后在我们启动Java进程时加上以下配置参数:
然后我们启动jvisualvm,该工具为JDK自带,在JDK安装目录/bin目录下。
打开后我们使用远程监控:
右键添加远程主机,输入ip添加完成。
然后再右键添加JMX连接,输入对应的ip:port即可。
通过jvisualvm,我们既可以查看Java虚拟机总体的资源使用情况:
又可以查看其中每个线程的状况,必要时还可以dump内存进行debug:
使用Linux shell进行debug
通过putty登录到Linux服务器,我们可以使用Linux上的shell命令进行debug。首先我们可以使用
ps -e
指令来确认Java进程的pid:
f
然后我们可以使用
top -p pid来查看该进程所消耗的内存,与cpu占用情况:
在确认我们Java程序所在进程出现问题后,我们使用如下指令来查看进程中线程的时间消耗情况:
ps -mp pid -o THREAD,tid,time
通过对比各个线程消耗CPU时间的多少我们可以大致判定出问题所在线程,首先我们先把线程号转化为16进制格式:
printf "%x\n" tid然后通过jstack指令打印线程运行信息:
jstack pid |grep tid -A 30上述指令的意思为:打印pid进程的Java运行信息,截取带有tid线程号的行并输出其后30行的信息
使用jvisualvm进行远程debug
首先我们需要修改Linux 服务器上的/etc/hosts文件,把对应的hostname改为机器的外网ip:vi /etc/hosts
然后在我们启动Java进程时加上以下配置参数:
-Djava.rmi.server.hostname=xxx.xxx.xxx.xxx # Linux主机外网ip -Dcom.sun.management.jmxremote -Dcom.sun.management.jmxremote.port=28888 # 通信端口,在jvisualvm中需要填入 -Dcom.sun.management.jmxremote.authenticate=false # 不需要用户名密码登录 -Dcom.sun.management.jmxremote.ssl=false
然后我们启动jvisualvm,该工具为JDK自带,在JDK安装目录/bin目录下。
打开后我们使用远程监控:
右键添加远程主机,输入ip添加完成。
然后再右键添加JMX连接,输入对应的ip:port即可。
通过jvisualvm,我们既可以查看Java虚拟机总体的资源使用情况:
又可以查看其中每个线程的状况,必要时还可以dump内存进行debug:
相关文章推荐
- paip.注册java程序为LINUX系统服务的总结。
- linux下使用jni实现c++调用java程序(5)参考资料总结
- paip.注册java程序为LINUX系统服务的总结。
- Linux下Java程序中中文显示的一些问题的总结
- Linux中设定让Firefox可以运行Java程序,然后老爸就可以在家与“小白”决象棋了!
- Java程序性能优化总结--------变量和函数调用篇
- 把java程序作成windows EXE程序或windows服务---经典总结
- 把java程序作成windows EXE程序或windows服务---经典总结
- 让Java程序作为linux的Daemon后台运行
- Java程序中使用oracle数据库LOB字段的总结
- Java程序性能优化总结--------流程控制篇
- Java程序性能优化总结--------数据类型篇
- Java程序性能优化总结--------数组/集合篇
- 一个将java程序运行在linux系统后台的脚本
- Linux下运行JAVA程序——JRE安装和配置
- Java程序性能优化总结--------对象篇
- 使用fcitx修复linux下java程序不能使用iiim输入法的错误
- C程序员(特别是Linux下的)学习C++/Java有必要吗?
- Java控制程序流程总结
- Java程序性能优化总结--------线程、I/O及系统篇