JVM性能监控与优化笔记(CPU)
基础
对于CPU层面的监控主要以下几个点:
- 是否系统态CPU的占用率高
- CPU运行队列中待运行的任务数
- 是否CPU停滞多,每时钟指令数(IPC)少(高级点,对于计算密集型的应用需要关注)
系统态CPU占用率高意味着共享资源有竞争或者有大量的I/O交互,因为这两类都会导致频繁的线程切换,所以会有大量的操作系统调用。
CPU调度程序运行队列中就是那些已准备好运行,正等待可用CPU的任务数(线程)。运行队列长度等于处理器个数时,不会有明显的性能下降。长度达到处理器个数的1倍时,则需要警惕了。而如果在较长的一段时间内,运行队列的长度达到处理器个数的3~4倍或者更多是,系统相应就会很慢了。
CPU停滞是指执行CPU指令所需的数据不在寄存器或者高速缓存中,需要从内存中调换,这时候就会导致CPU的停滞,但它仍然占用了CPU的时钟周期,所以会显示CPU还是很繁忙。
标准
一般不超出下面指标的情况都可以任务CPU处于合理的运行状态中
- 运行队列——每个处理器的运行队列不应多于1-3个。例如一个双核处理器的运行队列不应当多于6个进程。
- CPU利用率——如果CPU充分利用,应该达到一下的平衡比例
– 65-70%的用户时间
– 30-35%的系统时间
– 0-5%的空闲时间 - 上下文切换——上下文切换的数量直接决定了CPU的利用率。如果CPU利用率保持在上述的平衡比列,那么大量的上下文切换是正常的
监控工具
监控使用率
对于使用率的健康常用的工具有:vmstat,mpstat,top
vmstat
输入如下:
procs -----------memory---------- ---swap-- -----io---- -system-- ------cpu-----
r b swpd free buff cache si so bi bo in cs us sy id wa st
1 0 0 4710712 369028 1433668 0 0 11 22 380 70 15 3 82 0 0
0 0 0 4710892 369032 1433764 0 0 0 26 161 361 0 0 99 0 0
0 0 0 4710768 369040 1433764 0 0 0 8 150 292 0 0 100 0 0
输出的最后一列,即为cpu的占用率。
mpstat
mpstat用于观察多核CPU每一核的状态,同时它包含了更多的输出信息,例如
Linux 3.13.0-43-generic (X230) 2014年12月14日 _x86_64_ (4 CPU)
17时24分18秒 CPU %usr %nice %sys %iowait %irq %soft %steal %guest %gnice %idle
17时24分18秒 all 15.03 0.01 3.05 0.02 0.00 0.00 0.00 0.00 0.00 81.89
17时24分18秒 0 11.35 0.02 2.39 0.02 0.00 0.00 0.00 0.00 0.00 86.21
17时24分18秒 1 16.29 0.01 3.24 0.02 0.00 0.00 0.00 0.00 0.00 80.44
17时24分18秒 2 18.19 0.01 3.84 0.01 0.00 0.01 0.00 0.00 0.00 77.95
17时24分18秒 3 16.36 0.01 3.11 0.01 0.00 0.00 0.00 0.00 0.00 80.51
17时24分18秒 CPU intr/s
17时24分18秒 all 500.49
17时24分18秒 0 36.19
17时24分18秒 1 30.58
17时24分18秒 2 34.01
17时24分18秒 3 30.69
17时24分18秒 CPU 0/s 1/s 8/s 9/s 12/s 16/s 23/s 40/s 41/s 42/s 43/s 44/s 45/s 46/s NMI/s LOC/s SPU/s PMI/s IWI/s RTR/s RES/s CAL/s TLB/s TRM/s THR/s MCE/s MCP/s ERR/s MIS/s
17时24分18秒 0 0.00 0.08 0.00 0.00 0.21 0.17 0.00 0.00 1.32 0.00 0.02 21.08 3.41 0.00 0.00 102.20 0.00 0.00 1.03 0.00 18.50 0.01 1.08 0.00 0.00 0.00 0.00 0.00 0.00
17时24分18秒 1 0.00 0.00 0.00 0.01 0.22 0.07 0.00 0.00 0.37 0.00 0.12 0.00 12.64 0.00 0.00 76.54 0.00 0.00 0.87 0.00 16.62 0.01 0.94 0.00 0.00 0.00 0.00 0.00 0.00
17时24分18秒 2 0.00 0.00 0.00 0.00 0.10 0.24 0.00 0.00 0.40 0.00 0.00 0.01 0.73 0.00 0.00 113.41 0.00 0.00 0.99 0.00 21.63 0.01 1.02 0.00 0.00 0.00 0.00 0.00 0.00
17时24分18秒 3 0.00 0.00 0.00 0.00 0.09 0.43 0.00 0.00 0.50 0.00 0.00 0.00 0.80 0.00 0.00 83.13 0.00 0.00 0.78 0.00 17.68 0.01 0.88 0.00 0.00 0.00 0.00 0.00 0.00
17时24分18秒 CPU HI/s TIMER/s NET_TX/s NET_RX/s BLOCK/s BLOCK_IOPOLL/s TASKLET/s SCHED/s HRTIMER/s RCU/s
17时24分18秒 0 0.17 18.95 0.01 0.04 1.31 0.00 0.25 9.62 0.15 5.69
17时24分18秒 1 0.07 16.35 0.01 0.23 0.37 0.00 0.08 8.38 0.11 4.99
17时24分18秒 2 0.24 18.77 0.01 0.02 0.40 0.00 0.24 8.62 0.14 5.57
17时24分18秒 3 0.43 16.23 0.01 0.01 0.50 0.00 0.43 8.05 0.11 4.92
top
用top查看cpu信息时主要是可以查看每个java线程占用的CPU,再结合jstack的信息,可以发现占用CPU较高的线程,以及该线程当前在做的任务。
输入top命令后,按“H”键,或者直接用top -H启动top,即可按线程查看。
top - 17:37:02 up 23:14, 2 users, load average: 0.31, 0.18, 0.13
Threads: 495 total, 1 running, 494 sleeping, 0 stopped, 0 zombie
%Cpu(s): 0.8 us, 0.6 sy, 0.0 ni, 98.7 id, 0.0 wa, 0.0 hi, 0.0 si, 0.0 st
KiB Mem: 7894256 total, 3353116 used, 4541140 free, 370244 buffers
KiB Swap: 8102908 total, 0 used, 8102908 free. 1486564 cached Mem
Locate string
PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
1305 root 20 0 342460 61712 49948 S 2.0 0.8 13:18.28 Xorg
5840 ronry 20 0 847116 45540 21932 S 2.0 0.6 0:06.96 /usr/bin/termin
2195 ronry 20 0 1487912 91888 35680 S 0.7 1.2 16:39.39 compiz
8 root 20 0 0 0 0 S 0.3 0.0 0:03.33 rcuos/0
39 root 20 0 0 0 0 S 0.3 0.0 0:00.37 ksoftirqd/3
1227 root 20 0 4368 712 536 S 0.3 0.0 0:07.59 acpid
7386 ronry 20 0 1478608 128360 63084 S 0.3 1.6 3:17.79 Chrome_IOThread
7634 root 20 0 0 0 0 S 0.3 0.0 0:01.10 kworker/u16:1
8152 ronry 20 0 29440 1992 1164 R 0.3 0.0 0:00.10 top
1 root 20 0 33900 3212 1468 S 0.0 0.0 0:01.39 init
2 root 20 0 0 0 0 S 0.0 0.0 0:00.00 kthreadd
需要注意的是,top的pid是十进制的,与jstack的信息对比时,需要将其转换成16进制,才能找到对应线程的stack信息。
监控CPU调度程序运行队列
监控运行队列的长度使用vmstat命令,命令输出的第一行就是队列的长度。
调优
对于CPU层面的性能问题,一般可以从以下方面入手进行调优:
- 寻找更高效的算法(减少CPU的计算量)
- 减少线程切换(I/O等待,资源竞争)
JVM性能监控与优化笔记(CPU)的更多相关文章
- 性能调优之Java系统级性能监控及优化
性能调优之Java系统级性能监控及优化 对于性能调优而言,通常我们需要经过以下三个步骤:1,性能监控:2,性能剖析:3,性能调优 性能调优:通过分析影响Application性能问题根源,进行优化 ...
- Linux指令--性能监控和优化命令相关指令
原文出处:http://www.cnblogs.com/peida/archive/2012/12/05/2803591.html.感谢作者无私分享 性能监控和优化命令相关指令有:top,free,v ...
- 第八章 JVM性能监控与故障处理工具(2)
注意:该篇博客主要记录自<深入理解java虚拟机(第二版)> 说明:关于命令行的JVM性能监控与故障处理工具见<第七章 JVM性能监控与故障处理工具(1)> 1.图像化的故障处 ...
- Linux性能监控与分析之--- CPU
Linux性能监控与分析之--- CPU 望月成三人关注 2016.07.25 18:16:12字数 1,576阅读 2,837 CPU性能指标 用户进程使用CPU的比率 系统进程使用CPU的比率 W ...
- jvm性能监控与故障处理工具
jdk为我们提供了一系列的jvm性能监控和故障处理工具,在这里根据学习进度进行整理记录.便于之后查阅 1.jps 虚拟机进程工具 类似于Linux系统中的ps命令,用于查看虚拟机进程,常用的有以下功 ...
- JVM性能分析与优化
JVM性能分析与优化: http://www.docin.com/p-757199232.html
- JVM性能监控
有时候我们会碰到下面这些问题: OutOfMemoryError,内存不足 内存泄露 线程死锁 锁争用(Lock Contention) Java进程消耗CPU过高 这些问题在日常开发中可能被很多人忽 ...
- JVM性能监控与故障处理命令行工具
JDK命令行工具 Sun公司作为”礼物“赠送给JDK使用者的工具: 这些命令行工具大多是jdk/lib/tools.jar类库的一层薄包装,主要功能代码是在tools类库(不属于java的标准API) ...
- 第七章 JVM性能监控与故障处理工具(1)
1.定位系统问题 依据 GC日志 堆转储快照(heapdump/hprof文件) 线程快照(threaddump/javacore文件) 运行日志 异常堆栈 分析依据的工具 jps:显示指定系统内的所 ...
随机推荐
- IT第五天 - 循环的使用、本周总结 ★★★
IT第五天 上午 循环 1.while循环.do-while循环.switch语句块的使用 下午 编程 1.编程注释的编写 2.编程力求代码的精简,算法的优化 3.变量的优化使用 小项目 1.swit ...
- 卸载了PL/SQL Developer,说一下与Toad for Oracle的对照
曾经一直用PL/SQL Developer来管理Oracle.发现真的使用起来非常不方便.打开非常卡,并且界面左上角总是多出那个框,怎么都无法设置默认隐藏掉. 唯一让人认为非常值得的就是有一个美化工具 ...
- 【Oracle】ORA-06550 PLS-00201
ORA-06550 第1行,第7页 PLS-00201 必须声明标识符“PROC_****” 改错了首先检查连接的数据库库里面有没有这个存储过程.(检查是否配置对了数据库)
- centos下pg_dump的服务器版本不匹配问题
pg_dump: server version: 9.4.4; pg_dump version: 8.2.4 pg_dump: aborting because of server version m ...
- spring-mvc关键点掌握 high level
在本例中,我们将使用Spring MVC框架构建一个入门级web应用程序.Spring MVC 是Spring框架最重要的的模块之一.它以强大的Spring IoC容器为基础,并充分利用容器的特性来简 ...
- java 对象赋值问题
import java.io.*; class CCircle{ private static double pi = 3.1415; private double radius; public CC ...
- ZOJ 3879 Capture the Flag 15年浙江省赛K题
每年省赛必有的一道模拟题,描述都是非常的长,题目都是蛮好写的... sigh... 比赛的时候没有写出这道题目 :( 题意:首先输入4个数,n,q,p,c代表有n个队伍,q个服务器,每支队伍的初始分数 ...
- Webservice-WSDL详解(三)
怎样向别人介绍WS的功能呢?一般咱们会写接口文档,亦或口头告诉使用的人.这些方式都存在问题:其中一个我上篇中说过,客户端是无法直接使用服务端接口的:二是程序员在电脑前,想使用WS时,他们的工具(如Ec ...
- linux下C++开发工具
就C++开发工具而言,与Windows下微软(VC, VS2005等)一统天下相比,Linux/Unix下C++开发,可谓五花八门,各式各样.Emacs, vi, eclipse, anjuta,kd ...
- 常用位操作,读8位 I2C 1302 18B20 .
/*1302*/ unsigned char DS1302OutputByte(void) //实时时钟读取一字节(内部函数) { unsigned char i; for(i=8; i>0; ...