Java性能调优(一):调优的流程和程序性能分析
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性能调优(一):调优的流程和程序性能分析的更多相关文章
- Java性能调优笔记
Java性能调优笔记 调优步骤:衡量系统现状.设定调优目标.寻找性能瓶颈.性能调优.衡量是否到达目标(如果未到达目标,需重新寻找性能瓶颈).性能调优结束. 寻找性能瓶颈 性能瓶颈的表象:资源消耗过多. ...
- Java程序性能优化读书笔记(一):Java性能调优概述
程序性能的主要表现点: 执行速度:程序的反映是否迅速,响应时间是否足够短 内存分配:内存分配是否合理,是否过多地消耗内存或者存在内存泄漏 启动时间:程序从运行到可以正常处理业务需要花费多少时间 负载承 ...
- 《Java性能调优》学习笔记(1)
性能的参考指标 执行时间 -- 从代码开始运行到结束的时间 CPU时间 -- 函数或者线程占用CPU的时间 内存分配 -- 程序在运行时占用内存的情况 磁盘吞吐量 -- 描述IO的使用情况 网络吞吐量 ...
- Java性能调优:利用JMC分析性能
Java性能调优作为大型分布式系统提供高性能服务的必修课,其重要性不言而喻. 好的分析工具能起到事半功倍的效果,利用分析利器JMC.JFR,可以实现性能问题的准确定位. 本文主要阐述如何利用JMC分析 ...
- Java性能调优:利用JFR生成性能日志
Java性能调优作为大型分布式系统提供高性能服务的必修课,其重要性不言而喻. 好的分析工具能起到事半功倍的效果,利用分析利器JMC.JFR,可以实现性能问题的准确定位. 本文主要阐述如何利用JFR生成 ...
- 第六章 Java性能调优工具(待续)
Java性能调优工具 Windows工具 JDK命令行工具 JConsole工具 Visual VM多合一工具 Visual VM对QQL的支持 MAT内存分析工具 MAT对QQL的支持 JProfi ...
- java 性能调优和GC
JAVA 性能调优和GC http://blog.csdn.net/gzh0222/article/details/7663181 JAVA GC调优手记 http://blog.csdn.net/f ...
- Java性能调优概述
目录 Java性能调优概述 性能优化有风险和弊端,性能调优必须有明确的目标,不要为了调优而调优!!!盲目调优,风险远大于收益!!! 程序性能的主要表现点 执行速度:程序的反映是否迅速,响应时间是否足够 ...
- JAVA性能监控与调优参考文档链接
JAVA性能监控与调优参考文档链接 jdk8工具集 https://docs.oracle.com/javase/8/docs/technotes/tools/unix/index.htmlTroub ...
随机推荐
- 【Java集合系列一】ArrayList解析
一.基础简介 1.ArrayList继承关系 2.底层用数组来存储数据,数据会在ArrayList创建的时候一并初始化.如果创建ArrayList的时候,没有设置容量,则会delay到第一次add数据 ...
- Java基础-常用工具类(二)
Scanner 类 java.util.Scanner 是 Java5 的新特征,我们可以通过 Scanner 类来获取用户的输入. 通过 Scanner 类的 next() 与 nextLine() ...
- Java容器解析系列(5) AbstractSequentialList LinkedList 详解
AbstractSequentialList为顺序访问的list提供了一个骨架实现,使实现顺序访问的list变得简单; 我们来看源码: /** AbstractSequentialList 继承自 A ...
- fullpage 中输入框弹起 页面上移问题处理
fullpage页面要是有输入框的话 点击输入框 键盘弹出的时候会把输入框也顶起来 页面就会向上移 但是键盘收回的时候页面还是上移的状态 对于这个问题只在android手机上出现 为了解决这个问题 ...
- 结对项目——黄金分割点游戏(陈香宇&蔡春燕)
结对项目名称:黄金分割点游戏(单机) 运行环境:vs 编译语言:c语言 项目分析: 实现的功能:用户可以选择继续游戏并且可以保存之前获得的分数,但是为了游戏的公平性,游戏的参数人数一开始用户确定以后就 ...
- js使页面重定向
location.assign("http://www.baidu.com"); window.location="http://www.baidu.com"; ...
- 莫烦tensorflow(5)-训练二次函数模型并用matplotlib可视化
import tensorflow as tfimport numpy as npimport matplotlib.pyplot as plt def add_layer(inputs,in_siz ...
- 自动化测试-1.selenium简介
1. selenium一个自动化测试工具,适用于测试web系统2. selenium支持多种编程语言:python .java .c#.ruby3.selenium支持多浏览器,selenium脚本可 ...
- ArcGIS统计栅格像元值并转换为矢量图层
很多时候,我们需要得到矢量数据区域所对应栅格数据的像元统计值(求平均.求和等),然后将获得的统计值赋给矢量图层的属性表,在ArcGIS中操作如下:(PS:第一次写技术文章,望大家多多体谅与支持,么么哒 ...
- ES6 promise学习笔记 -- 基本用法
ES6 规定,Promise对象是一个构造函数,用来生成Promise实例. 下面代码创造了一个Promise实例. const promise = new Promise(function(reso ...