基础

对于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)的更多相关文章

  1. 性能调优之Java系统级性能监控及优化

    性能调优之Java系统级性能监控及优化   对于性能调优而言,通常我们需要经过以下三个步骤:1,性能监控:2,性能剖析:3,性能调优 性能调优:通过分析影响Application性能问题根源,进行优化 ...

  2. Linux指令--性能监控和优化命令相关指令

    原文出处:http://www.cnblogs.com/peida/archive/2012/12/05/2803591.html.感谢作者无私分享 性能监控和优化命令相关指令有:top,free,v ...

  3. 第八章 JVM性能监控与故障处理工具(2)

    注意:该篇博客主要记录自<深入理解java虚拟机(第二版)> 说明:关于命令行的JVM性能监控与故障处理工具见<第七章 JVM性能监控与故障处理工具(1)> 1.图像化的故障处 ...

  4. Linux性能监控与分析之--- CPU

    Linux性能监控与分析之--- CPU 望月成三人关注 2016.07.25 18:16:12字数 1,576阅读 2,837 CPU性能指标 用户进程使用CPU的比率 系统进程使用CPU的比率 W ...

  5. jvm性能监控与故障处理工具

    jdk为我们提供了一系列的jvm性能监控和故障处理工具,在这里根据学习进度进行整理记录.便于之后查阅 1.jps 虚拟机进程工具  类似于Linux系统中的ps命令,用于查看虚拟机进程,常用的有以下功 ...

  6. JVM性能分析与优化

    JVM性能分析与优化: http://www.docin.com/p-757199232.html

  7. JVM性能监控

    有时候我们会碰到下面这些问题: OutOfMemoryError,内存不足 内存泄露 线程死锁 锁争用(Lock Contention) Java进程消耗CPU过高 这些问题在日常开发中可能被很多人忽 ...

  8. JVM性能监控与故障处理命令行工具

    JDK命令行工具 Sun公司作为”礼物“赠送给JDK使用者的工具: 这些命令行工具大多是jdk/lib/tools.jar类库的一层薄包装,主要功能代码是在tools类库(不属于java的标准API) ...

  9. 第七章 JVM性能监控与故障处理工具(1)

    1.定位系统问题 依据 GC日志 堆转储快照(heapdump/hprof文件) 线程快照(threaddump/javacore文件) 运行日志 异常堆栈 分析依据的工具 jps:显示指定系统内的所 ...

随机推荐

  1. C 语言统计关键字出现次数

    #include <stdio.h> #include <ctype.h> #include <string.h> #define NKEYS (sizeof ke ...

  2. Android之drawable state各个属性具体解释

    我们在定义一个drawable的时候能够通过xml定义的drawable对象.它使得一个图片能在不同的状态下显示不同的图案,比方一个Button,它有pressed.focused,或者其他状态,通过 ...

  3. VS2005+WINDDK+Driver Studio 3.2个人总结

    通过在网上搜索大量的资料,终于把环境搭建起来.对于我这样的驱动新手来说,理应把高手们的东西整理并总结下,方便以后的初学者. 这三个软件的安装顺序没有具体规定,也有高手推荐的顺序,我自己也是重复安装卸载 ...

  4. hibernate一对多关联关系

    想了几天,终于知道sql语句的发出问题.查了很多书,感觉都没有说清楚,有的还是错的.请看下面: <?xml version="1.0"?> <!DOCTYPE h ...

  5. 一个人的旅行(Dijkstra算法)

    这道题可用Dijkstra算法,好像还有floyd等算法,慢慢研究 Description 虽然草儿是个路痴(就是在杭电待了一年多,居然还会在校园里迷路的人,汗~),但是草儿仍然很喜欢旅行,因为在旅途 ...

  6. oracle常用函数以及调用入参为record的存储过程的方法,

    转自:http://www.cnblogs.com/zhangronghua/archive/2007/08/20/862812.html SQL中的单记录函数1.ASCII返回与指定的字符对应的十进 ...

  7. [转]Mysql自动备份并保存近15天记录脚本

    本脚本主要现实在CentOS中实现对MySQL数据库的备份和保留最近十五天的备份文件.避免太多无用陈旧的备份占用空间. #!/bin/bash id='root' #用户名 pwd='123123' ...

  8. Oracle Dedicated server 和 Shared server(专用模式 和 共享模式) 说明(转)

    一.  官网说明 在DBCA 建库的时候,有提示让我们选择连接类型,这里有两种类型:专用服务器模式和共享服务器模式.默认使用专用模式.如下图: Oracle 官方文档对这两种文档的说明如下: Abou ...

  9. Linux ldconfig 查看动态库连接

    /usr/lib64/tls: (hwcap: 0x8000000000000000) [root@wx02 ~]# ldconfig -v | grep keep libzookeeper_mt.s ...

  10. HDU 4883 TIANKENG’s restaurant (贪心)

    链接:pid=4883">带我学习.带我飞 第一次BC,稳挂,WA n多次.今天又一次做了一下 略挫 #include <iostream> #include <cs ...