运维小知识

Java Cpu   过高定位

1.jps 获取Java进程的PID。

2.jstack pid >> java.txt 导出CPU占用高进程的线程栈。

3.top -H -p PID 查看对应进程的哪个线程占用CPU过高。

4.echo "obase=16; PID" | bc 将线程的PID转换为16进制,大写转换为小写。

5.在第二步导出的Java.txt中查找转换成为16进制的线程PID。找到对应的线程栈。

6.分析负载高的线程栈都是什么业务操作。优化程序并处理问题。

1.jstack pid

jstack能得到运行java程序的java stack和native stack的信息。可以轻松得知当前线程

的运行情况。如下图所示

2. jmap

得到运行java程序的内存分配的详细情况。例如实例个数,大小等

jmap -histo pid

jmap -dump:format=b,file=test.bin pid

java获取内存dump的几种方式

2.1.获取内存详情:jmap -dump:format=b,file=e.bin pid
这种方式可用内存分析工具分析情况,例如 jvisualvm.exe、visualvm等方式。

2.2.获取内存dump: jmap -histo:live pid
这种方式会先出发fullgc,所有如果不希望触发fullgc 可以使用jmap -histo pid

2.3.jdk启动加参数:
-XX:+HeapDumpBeforeFullGC
-XX:HeapDumpPath=/httx/logs/dump

3.Jstat

3.1 这是一个比较实用的一个命令,可以观察到classloader,compiler,gc相关信息。

可以时时监控资源和性能

3.2 命令格式

-class:统计class loader行为信息

-compile:统计编译行为信息

-gc:统计jdk gc时heap信息

-gccapacity:统计不同的generations(不知道怎么翻译好,包括新生区,老年区,

permanent区)相应的heap容量情况

-gccause:统计gc的情况,(同-gcutil)和引起gc的事件

-gcnew:统计gc时,新生代的情况

-gcnewcapacity:统计gc时,新生代heap容量

-gcold:统计gc时,老年区的情况

-gcoldcapacity:统计gc时,老年区heap容量

-gcpermcapacity:统计gc时,permanent区heap容量

-gcutil:统计gc时,heap情况

3.3 输出参数内容

S0 — Heap上的 Survivor space 0 区已使用空间的百分比

S0C:S0当前容量的大小

S0U:S0已经使用的大小

S1 — Heap上的 Survivor space 1 区已使用空间的百分比

S1C:S1当前容量的大小

S1U:S1已经使用的大小

E — Heap上的 Eden space 区已使用空间的百分比EC:Eden space当前容量的大小

EU:Eden space已经使用的大小

O — Heap上的 Old space 区已使用空间的百分比

OC:Old space当前容量的大小

OU:Old space已经使用的大小

P — Perm space 区已使用空间的百分比

OC:Perm space当前容量的大小

OU:Perm space已经使用的大小

YGC — 从应用程序启动到采样时发生 Young GC 的次数

YGCT– 从应用程序启动到采样时 Young GC 所用的时间(单位秒)

FGC — 从应用程序启动到采样时发生 Full GC 的次数

FGCT– 从应用程序启动到采样时 Full GC 所用的时间(单位秒)

GCT — 从应用程序启动到采样时用于垃圾回收的总时间(单位秒),它的值等于YGC+FGC

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值