Java系统资源消耗定位概述

【wifi密码破解软件下载】

通常运行的Java程序遇到性能问题表象是资源消耗过多、外部处理系统的性能不足,或者资源消耗不多,但是程序响应速度却达不到要求。

资源主要消耗在CPU 、文件IO、网络IO以及内存方面,机器资源是有限的,当某资源消耗过多时,通常会造成系统的响应速度慢。

CPU消耗分析

可以使用top或者pidstat 方式来查看进程中线程的CPU消耗情况。

输入top命令,可以查看CPU的消耗情况:

Java系统资源消耗定位概述

 

如果想查看每个核的消耗情况,限进入top视图,然后 按1:

Java系统资源消耗定位概述

 

进top视图后按 shift+h,可以查看线程CPU消耗情况:

Java系统资源消耗定位概述

 

输入pidstat 1 2 将会每隔1秒输出当前活动进程的CPU消耗情况,共输出两次:

Java系统资源消耗定位概述

 

输入pidstat -p [PID] -t 1 t查看具体进程CPU消耗:

Java系统资源消耗定位概述

 

linux 还可以使用vmstat 查看CPU的上下文切换、运行队列、利用率的信息。ps Hh -eo tid,pcpu 方式也可以用来查看具体线程的CPU消耗状况;sar来查看一定时间范围内以及历史的CPU消耗状况。

当CPU消耗严重时,我们主要观察us、sy、wa、hi ,wa的值是IO等待消耗的,hi硬件中消耗的,例如网卡接收数据频繁。Java应用消耗CPU主要体现在 us、sy两个值上。

us过高时主要Java程序消耗了大部分CPU,这个时候我们通关相关命令找到消耗CPU高的线程ID,(kill-3 pid 或者jstack )导出堆栈,然后定位到具体线程。CPU占用高的线程会一直处于可运行(Runnable)状态。

造成这个原因一般是在执行死循环、无阻塞、正则、大运算量、频繁GC。

sy高,表示线程花很多时间在做上下文切换,一般是创建线程太多、并且这些线程多少处于不断阻塞(IO等待、锁等待)he执行状态切换。这个也可以通过线程堆栈分析找出阻塞状态、锁竞争状态过的线程。

文件IO消耗分析

可以使用pidstat 查看线程的文件IO消耗。

输入:pidstat -d -t -p [pid] 1 100

使用iostat查看整个系统的文件IO消耗情况

Java系统资源消耗定位概述

 

使用iostat查看IO消耗情况时,首先要关注的是CPU的iowait%所占的百分比,当iowait占据了主要百分比时,就表示要关注IO消耗了,这时可以通过使用iostat -x这种方式来详细查看具体情况。

Java应用造成文件IO消耗严重主要是多个线程需要进行大量内容写入,或者磁盘设备本身的处理速度慢,文件系统慢,操作的文件过大。

网络IO消耗分析

网络IO的消耗非常值得关注,在linux系统采用sar来分析网络IO的消耗情况

输入sar -n ALL 1 2

Java系统资源消耗定位概述

 

内存消耗分析

对JVM堆以外的内存方面消耗,最为值得关注的是swap的消耗以及物理内存额消耗,可以通过vmstat 、sar、top 、pidstat 等方式来查看swap 和物理内存的消耗情况

Java应用在创建线程和使用Direct ByteBuffer是使用堆外内存,内存消耗重点关注堆内内存的使用,可以使用jmap,stat,mat,visualvm等方法分析。JVM内存消耗过多会导致 GC频繁,CPU消耗增加,应用线程执行速度下降,甚至造成OutOfMemoryError,最终进程挂掉。

通常运行的Java程序遇到性能问题表象是资源消耗过多、外部处理系统的性能不足,或者资源消耗不多,但是程序响应速度却达不到要求。

资源主要消耗在CPU 、文件IO、网络IO以及内存方面,机器资源是有限的,当某资源消耗过多时,通常会造成系统的响应速度慢。

CPU消耗分析

可以使用top或者pidstat 方式来查看进程中线程的CPU消耗情况。

输入top命令,可以查看CPU的消耗情况:

Java系统资源消耗定位概述

 

如果想查看每个核的消耗情况,限进入top视图,然后 按1:

Java系统资源消耗定位概述

 

进top视图后按 shift+h,可以查看线程CPU消耗情况:

Java系统资源消耗定位概述

 

输入pidstat 1 2 将会每隔1秒输出当前活动进程的CPU消耗情况,共输出两次:

Java系统资源消耗定位概述

 

输入pidstat -p [PID] -t 1 t查看具体进程CPU消耗:

Java系统资源消耗定位概述

 

linux 还可以使用vmstat 查看CPU的上下文切换、运行队列、利用率的信息。ps Hh -eo tid,pcpu 方式也可以用来查看具体线程的CPU消耗状况;sar来查看一定时间范围内以及历史的CPU消耗状况。

当CPU消耗严重时,我们主要观察us、sy、wa、hi ,wa的值是IO等待消耗的,hi硬件中消耗的,例如网卡接收数据频繁。Java应用消耗CPU主要体现在 us、sy两个值上。

us过高时主要Java程序消耗了大部分CPU,这个时候我们通关相关命令找到消耗CPU高的线程ID,(kill-3 pid 或者jstack )导出堆栈,然后定位到具体线程。CPU占用高的线程会一直处于可运行(Runnable)状态。

造成这个原因一般是在执行死循环、无阻塞、正则、大运算量、频繁GC。

sy高,表示线程花很多时间在做上下文切换,一般是创建线程太多、并且这些线程多少处于不断阻塞(IO等待、锁等待)he执行状态切换。这个也可以通过线程堆栈分析找出阻塞状态、锁竞争状态过的线程。

文件IO消耗分析

可以使用pidstat 查看线程的文件IO消耗。

输入:pidstat -d -t -p [pid] 1 100

使用iostat查看整个系统的文件IO消耗情况

Java系统资源消耗定位概述

 

使用iostat查看IO消耗情况时,首先要关注的是CPU的iowait%所占的百分比,当iowait占据了主要百分比时,就表示要关注IO消耗了,这时可以通过使用iostat -x这种方式来详细查看具体情况。

Java应用造成文件IO消耗严重主要是多个线程需要进行大量内容写入,或者磁盘设备本身的处理速度慢,文件系统慢,操作的文件过大。

网络IO消耗分析

网络IO的消耗非常值得关注,在linux系统采用sar来分析网络IO的消耗情况

输入sar -n ALL 1 2

Java系统资源消耗定位概述

 

内存消耗分析

对JVM堆以外的内存方面消耗,最为值得关注的是swap的消耗以及物理内存额消耗,可以通过vmstat 、sar、top 、pidstat 等方式来查看swap 和物理内存的消耗情况

Java应用在创建线程和使用Direct ByteBuffer是使用堆外内存,内存消耗重点关注堆内内存的使用,可以使用jmap,stat,mat,visualvm等方法分析。JVM内存消耗过多会导致 GC频繁,CPU消耗增加,应用线程执行速度下降,甚至造成OutOfMemoryError,最终进程挂掉。

猜你喜欢

转载自www.cnblogs.com/wifi8/p/9749443.html
今日推荐