JVM性能调优

来源:互联网 发布:小个子穿衣购买软件 编辑:程序博客网 时间:2024/05/02 00:20

转载自:

http://yhjhappy234.blog.163.com/blog/static/3163283220122298232721/?suggestedreading&wumii

在上文中我们分析了很多性能监控工具,介绍这些工具的目的只有一个,那就是找出对应的性能瓶颈。盲目的性能调优是没有效果的,只有充分知道了哪里出了问题,针对性的结果才是立竿见影的。解决了主要的性能问题,那些次要的性能问题也就不足为虑了!

我们知道,性能问题无非就这么几种:CPU、内存、磁盘IO、网络。那我们来逐一介绍以下相关的现象和一些可能出现的问题。

一、CPU过高。

查看CPU最简单的我们使用任务管理器查看,如下图所示,windows下使用任务管理器查看,Linux下使用top查看。

深入理解JVM—性能调优 - 一线天色 天宇星辰 - 一线天色 天宇星辰
深入理解JVM—性能调优 - 一线天色 天宇星辰 - 一线天色 天宇星辰

一般我们的服务器都采用Linux,因此我们重点关注一下Linux(注:windows模式下相信大家已经很熟悉了,并且前面我们已经提到,使用资源监视器可以很清楚的看到系统的各项参数,在这里我就不多做介绍了)

top视图下,对于多核的CPU,显示的CPU资源有可能超过100%,因为这里显示的是所有CPU占用百分百的总和,如果你需要看单个CPU的占用情况,直接按键1就可以看到。如下图所示,我的一台测试机为816GB内存。

深入理解JVM—性能调优 - 一线天色 天宇星辰 - 一线天色 天宇星辰

 在

top视图下,按键shift+h后,会显示各个线程的CPU资源消耗情况,如下图所示:

深入理解JVM—性能调优 - 一线天色 天宇星辰 - 一线天色 天宇星辰

 我们也可以通过

sysstat工具集的pidstat来查看

注:sysstat下载地址:http://sebastien.godard.pagesperso-orange.fr/download.html

安装方法:

1chmod +x configure

2./configure

3make

4make install

如输入pidstat 1 2就会隔一秒在控制台输出一次当然CPU的情况,共输出2

深入理解JVM—性能调优 - 一线天色 天宇星辰 - 一线天色 天宇星辰

 除了

toppidstat以外,vmstat也可以进行采样分析

深入理解JVM—性能调优 - 一线天色 天宇星辰 - 一线天色 天宇星辰

 相关

toppidstatmstat的用法大家可以去网上查找。

下面我们主要来介绍以下当出现CPU过高的时候,或者CPU不正常的时候,我们该如何去处理?

CPU消耗过高主要分为用户进程占用CPU过高和内核进程占用CPU过高(在Linuxtop视图下us指的是用户进程,而sy是指内核进程),我们来看一个案例:

深入理解JVM—性能调优 - 一线天色 天宇星辰 - 一线天色 天宇星辰

 程序运行前,系统运行平稳,其中蓝色的线表示总的

CPU利用率,而红色的线条表示内核使用率。部署war测试程序,运行如下图所示:

深入理解JVM—性能调优 - 一线天色 天宇星辰 - 一线天色 天宇星辰

 对于一个

web程序,还没有任何请求就占用这么多CPU资源,显然是不正常的。并且我们看到,不是系统内核占用的大量CPU,而是系统进程,那是哪一个进程的呢?我们来看一下。

深入理解JVM—性能调优 - 一线天色 天宇星辰 - 一线天色 天宇星辰

 很明显是我们的

java进程,那是那个地方导致的呢?这就需要用到我们之前提到的性能监控工具。在此我们使用可视化监控工具VisualVM

深入理解JVM—性能调优 - 一线天色 天宇星辰 - 一线天色 天宇星辰

 首先我们排除了是

GC过于频繁而导致大CPU过高,因为很明显监控视图上没有GC的活动。然后我们打开profilter去查看以下,是那个线程导致了CPU的过高?

深入理解JVM—性能调优 - 一线天色 天宇星辰 - 一线天色 天宇星辰

 前面一些线程都是容器使用的,而下面一个线程也一直在执行,那是什么地方调用的呢?查找代码中使用


0 0
原创粉丝点击