最近面试华为OD岗的时候面试官问到我这样一个问题:如何调试服务器上跑着的程序。jdk自带的就可以。
我查了jdk自带的有这几种jps、jstack、jstat、jmap、jinfo。
比较有名的还有阿里的arthas。arthas我理解是整合了以上的一些方法,变成了一个可交互的终端。
jps
查看java程序进程
jstack
打印栈日志,查看解决方法。如发现死锁的问题
没找到能成功的方法
【已解决】发现是docker的问题,使用–cap-add=SYS_PTRACE
参考https://blog.csdn.net/kinginblue/article/details/78078028
jstack -l -F 1 > test.dump
参考https://blog.csdn.net/mynamepg/article/details/81702075
jstat
是一个监视内存的工具,可以用来监视VM内存内的各种堆和非堆的大小及其内存使用量,以及加载类的数量。
jstat -gc 1
jstat -gcutil 1
参考 https://blog.csdn.net/zhaozheng7758/article/details/8623549
jinfo
没成功,说是没有权限
Operation not permitted
尝试了
echo 0 > /proc/sys/kernel/yama/ptrace_scope
没有行
【已解决】发现是docker的问题,使用–cap-add=SYS_PTRACE
参考https://blog.csdn.net/kinginblue/article/details/78078028