Java 应用排障

最近做了一些troubleshooting 的工作,现在分享一点与 Java 应用排障有关的小知识给大家(不要钱),如果掌握了这几个工具可以帮忙你理性分析问题(分析问题有个好的思路是 "将正常和异常时的情况进行对比分析",一定可以找到些蛛丝马迹):

  • 1.查看当前系统有哪些 java 进程的,不加参数会列出所有的进程 id(但这个列表可能会不准确,如果查不到,还是要以 ps -ef 为准) jps
  • 2.查看 jvm 的 gc 情况,可以看到gc 次数,gc 停顿的时间等 jstat -gc pid
  • 3.查看 当前 jvm 进程的内存分配和使用情况,尤其可以看到老年代的分配大小及使用率。 jmap -heap pid
  • 4.查看当前jvm 中所有对象的大小和数量,用来分析 jvm 内存占用。 jmap -histo pid
  • 5. 查看当前 jvm 中的所有线程,用来分析线程堆栈。 jstack pid 如果查当前的总线程数, 可以用 jstack pid > thread.log 输出到 thread.log 文件中,然后用 grep 'prio='来进行过滤统计;也可以查看某组线程的数据量、线程 Runnable 等情况。

附上一个方便的脚本工具:

javatool.sh

javaProcess=$(ps -ef|grep java|grep -v grep|awk '{ print $2 }')
#echo "${javaProcess}"
for javaproc in ${javaProcess[@]} 
do
 echo " 进程号: ${javaproc}"
 echo "----------2-jvm 的 gc 情况:-----------"
   jstat -gc  ${javaproc}
sleep 2 
echo  "-----3-查看 当前 jvm 进程的内存分配和使用情况,尤其可以看到老年代的分配大小及使用率--------------"
   jmap -heap ${javaproc}
sleep 2
echo "4-查看当前jvm 中所有对象的大小和数量,用来分析 jvm 内存占用"
   jmap -histo  ${javaproc}
 sleep 2
 echo "5-查看当前 jvm 中的所有线程,用来分析线程堆栈"
 jstack  ${javaproc} >./${javaproc}.log
 grep "prio=" ./${javaproc}.log
  sleep 2
done

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值