标签:ror visualvm 速度 %x command 就是 grep oom ESS
jvm调优在我看来就是扩扩内存,修改一下虚拟机运行参数,再不行换个垃圾回收器,比如G1什么的。
但是,对运行时问题的定位却是个大问题,今天就来总结一下,这两天学习的关于jvm调优的一些查用的排查方式
因为在服务器上不只有Java进程还有其他进程,所以需要使用top命令进行查看,来,top命令
Linux top命令用于实时显示 process 的动态。
使用权限:所有使用者。
语法
top [-] [d delay] [q] [c] [S] [s] [i] [n] [b]
参数说明:
- d : 改变显示的更新速度,或是在交谈式指令列( interactive command)按 s
- q : 没有任何延迟的显示速度,如果使用者是有 superuser 的权限,则 top 将会以最高的优先序执行
- c : 切换显示模式,共有两种模式,一是只显示执行档的名称,另一种是显示完整的路径与名称
- S : 累积模式,会将己完成或消失的子行程 ( dead child process ) 的 CPU time 累积起来
- s : 安全模式,将交谈式指令取消, 避免潜在的危机
- i : 不显示任何闲置 (idle) 或无用 (zombie) 的行程
- n : 更新的次数,完成后将会退出 top
- b : 批次档模式,搭配 "n" 参数一起使用,可以用来将 top 的结果输出到档案内
使用截图(以我的服务器为例)
可以看到有很多的进程在运行.然后我们需要寻找的时java进程..貌似没有,搞错服务器了......
我们换个服务器重新来一次
这次可以看到啊,有Java进程在运行,然后可以看到用了0.3%的cpu,很少哈.如果说达到99%就说明时Java程序出问题了,就让我们假设Java程序出了问题,来看看具体的Java中线程 使用的是top -Hp pid
这样就可以看到有很多的Java线程在运行,就是圈主的那些,然后可以观察哪个线程占用最高,然后啊,因为这里是10进制,而在线程堆栈中显示的是16进制,可以使用windows自带的计算器进行计算哈,如图
看人家多贴心这里的选中DEC后输入数字就行了,然后查看HEX对应的值
不过我这里选的是另外一种方法,printf ‘%x\n‘ pid转换 假设出问题的线程是16949
然后使用jstack pid|grep 16进制的线程pid号进行查看
这里我的jstack命令不能用了...所以没办法截图,正常情况下是显示该线程的信息
这里OOM(OutOfMemoryError)溢出肯定是Java线程嘛,所以可以直接使用jps,查看正在运行的Java线程
然后使用jmap -histo命令查看,我们一般都是使用head -20查看前20行,看看是哪些对象占用的比较多.
标签:ror visualvm 速度 %x command 就是 grep oom ESS
原文地址:https://www.cnblogs.com/clion/p/14181545.html