1.性能分析本质

寻找系统的性能瓶颈(木桶理论/短板效应),并处理系统的性能瓶颈

2.性能分析主要指标负载、响应和服务器CPU\MEM等的使用率

3.性能分析主要工具

LoadRunner VisualVM和MySql客户端工具(或类似工具)

4.性能分析及处理思路

4.1. 代码

避免代码里面的循环数据库查询(梳理业务,基本都可以实现为非循环方式)

避免代码里面的循环数据库更新处理(插入、更新等),尽量采用批量方式

避免生产新的,耗时的对象,即消耗内存,又消耗CPU 使用private、final和static方法,即使代码结构合理,也能运行更有效率

采用必要的缓存(主要针对不易变化的,非实时性要求的数据,比如字典表,排名等)

4.2. 业务

业务是否可以简化?

简化之后是不是可以去掉不必要的代码?是不是可以实现更简单,逻辑更清晰?

对代码的调整很多其实也是对业务的精炼!

4.3. SQL(MySql)

1、开启慢查询(捕获慢查询SQL语句)

在my.cnf文件[mysqld]后面,添加如下:

slow_query_log

slow_query_log_file=/export/servers/mysql/mysql_slow.log

long_query_time=0.1

2、show full processlist

压力测试期间,捕获当前执行SQL语句,重点关注state列和info列

Id

User

Host

db

Command

Time

State

Info

318236

root

ads_online

7085

Sleep

SELECT

state

列正常情况下应该都是空(应为执行都很快),但假如你看到了sending data, statistics等,很不幸(如果很多),这往往伴随着CPU

时间占比很高,这个时候往往表明你需要调整该SQL语句,或者相关调用代码或者其余处理措施(当然,有时候是负载实在太高了!)Info列则是当前执行的SQL语句,show full processlist中的full的作用就是你可以查看完整的SQL语句

3、解释相关SQL语句

Explain/相关MySql客户端工具

4.4. 配置

1、数据库服务器配置,重点关注以下配置(具体参数配置标准请google):

max_connections=1000

key_buffer_size = 16M :

主要针对MyISAM存储引擎

table_open_cache=10000

innodb_buffer_pool_size = 10g :

主要针对InnoDB存储引擎

query_cache_size=32m

可通过SHOW GLOBAL STATUS LIKE 'qcache%';

查看查询缓存的使用情况,单交易压力测试表征意义不大,要在混合场景稳定性测试等环境中观察

2、应用服务器配置(内存、线程池)

请参考TOMCAT6性能优化文档

3、数据库连接池

根据实际需要配置(一般和线程池数目相当)

5.瓶颈定位方式

5.1. 基于单交易压力测试单交易压力测试等,最好排除相关影响因数,比如你要测试一个添加,但你需要先进

入一个列表,才能处理添加,这个时候,你可能需要在脚本里面将这个列表的代码去掉,避免该处代码对添加事务的影响,使添加事务更纯净,更易于定位问题

5.2. 监控相关服务器资源使用情况重点关注CPU时间占比,内存等使用情况,可通过top、vmstat等命令监控比如此次性能分析过程中数据库库服务器CPU

占比很容易很高(往往解决了一个又来了另一个),这时可以通过数据库客户端工具摘取当前执行SQL语句,并通过工具分析(或者自己explain),查看索引使用情况,如果没有索引或不存在有效索引,则

添加相关索引,并且注意调用该语句的代码是否是循环处理的,如果是循环处理,请提炼至循环外层

5.3. 通过VisualVM进行CPU、内存使用采样及垃圾回收监控比如通过CPU采用,分析相关方法执行CPU占比,定位执行时间过长的方法,进行相关优化。

5.4. 通过代码屏蔽方式定位

注意事项:

1、避免压力测试脚本问题及其与环境、配置问题

比如压力测试脚本不纯净,服务器对某一IP过多访问存在限制、线程池配置太小,数据库连接池配置太小,文件打开数超过系统限制等

2、避免问题定位错误

某次压测发现CPU占比很高(90%),进行过一定的分析,发现数据库服务器网络负载在200多M(浏览器压测情况下没有启用缓存,页面图片量比较大),开始认为是网络带宽问题,但实际上,把页面的代码都注释掉(基本空页面),带宽很低,但CPU并没有降低,最后通过添加MySql查询缓存解决该问题!某次压测发现数据库服务器A的CPU占比很低,但就是TPS很低(正常情况下,数据库没有压力,适当的迸发环境下TPS一般应比较高),用工具连接数据库服务器,执行show processlist 发现state基本为空,很正常,查询相关配置参数,也没做更改。之后想起来还有另外一台数据库服务器B,会不会是B服务器导致的了?在B服务器上top一看,CPU占比90%,show full processlsit数据库一看,

state很多sending data,info列重复很多一个查询语句,explain该语句,发现该语句缺少相应的索引!添加相关索引即TPS恢复正常

JAVA程序性能分析及调优浅析的更多相关文章

  1. 【Java VisualVM】使用 VisualVM 进行性能分析及调优

    转载:https://blog.csdn.net/lmb55/article/details/79267277 一.概述 开发大型 Java 应用程序的过程中难免遇到内存泄露.性能瓶颈等问题,比如文件 ...

  2. 使用VisualVM进行性能分析及调优(转)

    VisualVM 是一款免费的\集成了多个 JDK 命令行工具的可视化工具,它能为您提供强大的分析能力,对 Java 应用程序做性能分析和调优.这些功能包括生成和分析海量数据.跟踪内存泄漏.监控垃圾回 ...

  3. 八、jdk工具之JvisualVM、JvisualVM之二--Java程序性能分析工具Java VisualVM

    目录 一.jdk工具之jps(JVM Process Status Tools)命令使用 二.jdk命令之javah命令(C Header and Stub File Generator) 三.jdk ...

  4. 转:使用 VisualVM 进行性能分析及调优

    使用 VisualVM 进行性能分析及调优 VisualVM 是一款免费的\集成了多个 JDK 命令行工具的可视化工具,它能为您提供强大的分析能力,对 Java 应用程序做性能分析和调优.这些功能包括 ...

  5. 使用VisualVM 进行性能分析及调优

    概述 开发大型 Java 应用程序的过程中难免遇到内存泄露.性能瓶颈等问题,比如文件.网络.数据库的连接未释放,未优化的算法等.随着应用程序的持续运行,可能会造成整个系统运行效率下降,严重的则会造成系 ...

  6. 使用 VisualVM 进行性能分析及调优

    VisualVM 是一款免费的性能分析工具.它通过 jvmstat.JMX.SA(Serviceability Agent)以及 Attach API 等多种方式从程序运行时获得实时数据,从而进行动态 ...

  7. [java] JVM监控与调优

    原文出处:http://www.cnblogs.com/zhguang/p/java-jvm-gc.html   光说不练假把式,学习Java GC机制的目的是为了实用,也就是为了在JVM出现问题时分 ...

  8. jvm系列(六):Java服务GC参数调优案例

    本文介绍了一次生产环境的JVM GC相关参数的调优过程,通过参数的调整避免了GC卡顿对JAVA服务成功率的影响. 这段时间在整理jvm系列的文章,无意中发现本文,作者思路清晰通过步步分析最终解决问题. ...

  9. 一文读懂Java GC原理和调优

    概述 本文介绍GC基础原理和理论,GC调优方法思路和方法,基于Hotspot jdk1.8,学习之后将了解如何对生产系统出现的GC问题进行排查解决 阅读时长约30分钟,内容主要如下: GC基础原理,涉 ...

随机推荐

  1. Java基础知识强化之网络编程笔记21:Android网络通信之 Android常用OAuth登录(获取令牌信息)

    1. 首先我们去下载开发相关SDK(Android): 下载百度使用OAuth的SDK(Android),如下: 下载链接为:http://developer.baidu.com/wiki/index ...

  2. Ajax学习笔记(1)

    Ajax全称为Asynchronous Javascript and XML.一般用于页面数据交互响应,最大的好处是响应时无需刷新页面. Ajax的优点: 1.不需要插件的支持.用户只需允许javas ...

  3. Maven(3.0.5) 环境的安装配置

    Maven 安装步骤 JDK 安装:在使用 Maven 之前,要确定已经安装了 JDK. huey@huey-K42JE:~$ java -version java version "1.7 ...

  4. Android——获取网络图片

    布局 <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:too ...

  5. JobControl管理多job依赖完整示例

    处理 复杂的要求的时候,有时一个mapreduce程序是完成不了的,往往需要多个mapreduce程序,这个时候就要牵扯到各个任务之间的依赖关系,所谓 依赖就是一个MR Job 的处理结果是另外的MR ...

  6. JD(转载)

    时间:2012-9-11 地点:川大 我只能说第一家公司,不是一般的火爆.不得不吐槽一下: 京东宣讲完全没有计划,只看到个下午两点半宣讲,结果跑过去,下午两点是宣讲管培的.在川大外的德克士呆了一下午. ...

  7. HW—字符串最后一个单词的长度,单词以空格隔开。

    描述 计算字符串最后一个单词的长度,单词以空格隔开. 知识点 字符串,循环 运行时间限制 0M 内存限制 0 输入 一行字符串,长度小于128. 输出 整数N,最后一个单词的长度. 样例输入 hell ...

  8. 【HTTPS】Https和SSL学习笔记(二)

    此文讲述证书的相关信息,参考文章链接http://www.guokr.com/post/116169/ 一. 证书的类型 常用的几种证书如下: (1) SSL证书,用于加密HTTP (2) 代码签名证 ...

  9. Menu bar missing from ClearCase Explorer

    See following links: Menu bar missing from ClearCase Explorer Understanding the Rational ClearCase E ...

  10. linux下查看端口的连接数

    linux下,可以通过natstat命令来查看端口的连接状况,比如连接数 例如,查看9090端口的连接状况: 查看某个端口的连接数netstat -nat | grep -iw "9090& ...