https://blog.csdn.net/Oeljeklaus/article/details/80656732

Java性能调优

随着应用的数据量不断的增加,系统的反应一般会越来越慢,这个时候我们就需要性能调优。性能调优的步骤如下:

寻找性能瓶颈

通常性能瓶颈的表象是

  • 资源消耗过多、外部处理系统的不足,
  • 或者资源消耗不多,但是程序的响应速度却达不到要求。

下面的分析针对于Linux。

CPU消耗分析

CPU主要用于中断、内核以及用户进程的处理;优先级为中断、内核和用户进程。我们首先有了解3个概念。

1.上下文切换

线程从CPU换出到下一次执行,称为一次上下文切换。上下文切换过多带来的影响:内核占用较多的CPU使用时间,响应速度下降。

2.运行队列

每一个CPU核都维护一个可运行的线程队列,一般建议每个CPU的运行队列是1-3个。

3.利用率

CPU利用率为CPU在用户进程、内核、中断处理、IO等待以及空闲5个部分使用百分比。可以使用top或者pidstat命令查看。

top

1.2%us,表示用户进程处理所占的百分比,0.4%sy表示系统内核线程处理所占用的百分比,0.0%表示改变优先级任务所占的百分比,98%id表示CPU空闲时间所占的百分比,0.0%wa表示等待IO所占用百分比,0.0%hi表示由于硬件中断所占用的百分比;0.4%si表示软件中断所占用的百分比;

可以在上面试图的基础上按1,就可查看每个CPU的运行情况。注意两图的变化:

可以查看每个进程所占用的CPU情况。

pidstat

需要安装sysstat,然后在使用pidstat 1 2,表示每隔1s输出,一共输出两次,如下

cpu表示当前使用CPU的个数,如果需要详细查看某一个进程,可以使用如下命令

TID表示线程id,这个命令的好处是可以查看每一个线程的具体CPU和线程使用率。

需要知道的是CPU消耗主要集中在us,sy两个值中。

1.us

java造成高us的主要原因是:线程一直处于可运行状态、通常是循环、正则和无阻塞运行造成的;还有一个原因是频繁的GC。解决问题的思路是

先通过Linux命令定位出那一个线程的us较高,然后将线程的id转化为16进制,然后通过 kill -3 [javapid]或者jstack的方式dump出应用的java线程信息,通过之前转化出来的16进制值找到nid值的线程。该线程也就是CPU消耗型线程,这里需要多采样几次,以确保准确。

2.sy

造成这个的主要原因是:启动了很多的线程,且这些线程主要是阻塞和可执行之间切换,然后造成了大量的上下文切换。

解决思路同上。

Java性能调优(一):调优的流程和程序性能分析的更多相关文章

  1. Java性能调优笔记

    Java性能调优笔记 调优步骤:衡量系统现状.设定调优目标.寻找性能瓶颈.性能调优.衡量是否到达目标(如果未到达目标,需重新寻找性能瓶颈).性能调优结束. 寻找性能瓶颈 性能瓶颈的表象:资源消耗过多. ...

  2. Java程序性能优化读书笔记(一):Java性能调优概述

    程序性能的主要表现点: 执行速度:程序的反映是否迅速,响应时间是否足够短 内存分配:内存分配是否合理,是否过多地消耗内存或者存在内存泄漏 启动时间:程序从运行到可以正常处理业务需要花费多少时间 负载承 ...

  3. 《Java性能调优》学习笔记(1)

    性能的参考指标 执行时间 -- 从代码开始运行到结束的时间 CPU时间 -- 函数或者线程占用CPU的时间 内存分配 -- 程序在运行时占用内存的情况 磁盘吞吐量 -- 描述IO的使用情况 网络吞吐量 ...

  4. Java性能调优:利用JMC分析性能

    Java性能调优作为大型分布式系统提供高性能服务的必修课,其重要性不言而喻. 好的分析工具能起到事半功倍的效果,利用分析利器JMC.JFR,可以实现性能问题的准确定位. 本文主要阐述如何利用JMC分析 ...

  5. Java性能调优:利用JFR生成性能日志

    Java性能调优作为大型分布式系统提供高性能服务的必修课,其重要性不言而喻. 好的分析工具能起到事半功倍的效果,利用分析利器JMC.JFR,可以实现性能问题的准确定位. 本文主要阐述如何利用JFR生成 ...

  6. 第六章 Java性能调优工具(待续)

    Java性能调优工具 Windows工具 JDK命令行工具 JConsole工具 Visual VM多合一工具 Visual VM对QQL的支持 MAT内存分析工具 MAT对QQL的支持 JProfi ...

  7. java 性能调优和GC

    JAVA 性能调优和GC http://blog.csdn.net/gzh0222/article/details/7663181 JAVA GC调优手记 http://blog.csdn.net/f ...

  8. Java性能调优概述

    目录 Java性能调优概述 性能优化有风险和弊端,性能调优必须有明确的目标,不要为了调优而调优!!!盲目调优,风险远大于收益!!! 程序性能的主要表现点 执行速度:程序的反映是否迅速,响应时间是否足够 ...

  9. JAVA性能监控与调优参考文档链接

    JAVA性能监控与调优参考文档链接 jdk8工具集 https://docs.oracle.com/javase/8/docs/technotes/tools/unix/index.htmlTroub ...

随机推荐

  1. jar 包启动

    java -Xms256m -Xmx512m -Xmn256m -jar /home/apps/video/video.jar --spring.profiles.active=test #!/bin ...

  2. Linux磁盘格式化

    CentOS7所支持的文件系统格式:默认是用xfs作为系统的文件系统. "/"和"/boot"都是xfs格式! [root@linux-xl ~]# cat / ...

  3. 移动端H5拍照代码实现及外网部署

    最近的工作中,遇到了一个需求:对于无APP登陆权限的人员,提供拍照上传功能,以便生成更完善的出工记录.经研究讨论,决定实现的机制为:由合法的人员登陆APP认领相关工作任务,并生成当天当工作的唯一二维码 ...

  4. dos脚本2

    一.简单批处理内部命令简介  1.Echo 命令  打开回显或关闭请求回显功能,或显示消息.如果没有任何参数,echo 命令将显示当 前回显设置.  语法  echo [{on off}] [mess ...

  5. 剑指Offer 28. 数组中出现次数超过一半的数字 (数组)

    题目描述 数组中有一个数字出现的次数超过数组长度的一半,请找出这个数字.例如输入一个长度为9的数组{1,2,3,2,2,2,5,4,2}.由于数字2在数组中出现了5次,超过数组长度的一半,因此输出2. ...

  6. 官网下载MySQL最新版本的安装包

    下载地址:http://www.mysql.com/downloads/ 1.选择下载社区版本 MySQL Community Edition (GPL)Community (GPL) Downloa ...

  7. AspectJ的拓展学习--织入顺序和通知参数指定

    前言: 其实spring的aop非常的强大, 因此研究一下AspectJ还是有必要, 而不是仅仅停留在初级的阶段. 比如spring的事务是基于aop来实现的, 如果不能深入的研究, 可能很多知识点, ...

  8. Python全栈之路----常用数据类型--集合

    集合(set):无序的,不重复的数据组合,它的主要作用如下:  · 去重,把一个列表变成集合,就自动去重了  · 关系测试,测试两组数据之间的交集.差集.并集等关系 1.基本操作:修改,删除,合并 & ...

  9. linux的基本操作2

    /dev/ha[a-d] IDE硬盘(过时了)/dev/sd[a-p] U盘,scsi,sata,ssd硬盘(流行)/dev/cdrom   光盘 CD-ROM/dev/mouse 鼠标 fdisk ...

  10. 使用vsftp服务传输文件