7. 深入了解性能优化

7.1 影响系统性能的方方面面

影响系统性能的因素有很多,以下列举了常见的一些系统性能优化的方向:

7.2 常用的性能评价和测试指标

响应时间

提交请求和返回该请求的响应之间使用的时间,一般比较关注平均响应时间。

如:数据库查询花费的时间,将字符回显到终端上花费的时间,访问 Web 页面花费的时间;

并发量

指同一时刻,对服务器有实际交互的请求数。和网站在线用户数的关联。

吞吐量

对单位时间内完成的工作量(请求)的量度。

如:每分钟的数据库事务,每秒传送的文件千字节数,每分钟的 Web 服务器命中数。

通常,平均响应时间越短,系统吞吐量越大;平均响应时间越长,系统吞吐量越小。但是,系统吞吐量越大,未必平均响应时间越短。

7.3 常用的性能优化手段

对于系统的性能调优,总体上从如下三个方面入手:

  1. 前端优化
  2. 应用服务性能优化
  3. 存储性能优化

但是无论怎么优化,总原则就是:

  • 避免过早优化,优化的前提是基本功能完成且测试通过;
  • 进行系统性能测试,需要通过性能测试来确定性能,不能主观臆测;
  • 寻找系统瓶颈,分而治之,逐步优化。

前端优化

  • 浏览器/App
  1. 减少请求数;
  2. 使用客户端缓冲;
  3. 启用压缩
  4. 资源文件加载顺序
  5. 减少Cookie传输
  • CDN加速

  • 反向代理缓存

  • WEB组件分离

应用服务性能优化

1. 缓存

优先考虑使用缓存优化性能。

2. 集群

3. 异步

  • 异步与同步:关注的是结果消息的通信机制。
  • 阻塞和非阻塞:关注的是等待结果返回给调用方的状态。

组合起来有4种状态。

4. 程序

  • 代码级别:选择合适的数据结构、选择更优的算法、编写更少的代码。
  • 并发编程:充分利用CPU多核,尽量使用线程池,合理设置线程数量,尽量使用JDK 提供的各种并发框架和工具;实现线程安全的类,避免线程安全问题;同步下减少锁的竞争:缩小锁的范围,减少锁的粒度,锁分段,替换独占锁,读写锁,CAS代替锁,ThreadLocal等。
  • 资源复用:减少开销很大的系统资源的创建和销毁。单例模式和池化技术。
  • JVM调优

GC调优的方向:GC的时间够小,GC的次数够少

大多数的Java应用不需要GC调优,大部分需要GC调优的,不是参数问题,是代码问题
GC调优是最后手段。

GC调优的优先级:
第一位:选择合适的GC回收期
第二位:选择合适的堆大小
第三位:选择年轻代在堆中的比重

步骤:
1.监控GC的状态

  1. 分析结果,判断是否要优化
    minGC 时间《 50ms,10s一次
    FullGC执行1s一下,频率10分钟以上

打印GC日志:

-XX:+PrintGCDetails
-XX:+HeapDumpOnOutOfMemoryError
-XX:HeapDumpPath
-XLogger:logpath
-XX:PrintHeapAtGC

存储性能优化

  • 尽量使用SSD
  • 定时清理数据或者按数据的性质分开存放
  • 结果集处理

本文由『后端精进之路』原创,首发于博客 http://teckee.github.io/ , 转载请注明出处

搜索『后端精进之路』关注公众号,立刻获取最新文章和价值2000元的BATJ精品面试课程。

JVM性能优化系列-(7) 深入了解性能优化的更多相关文章

  1. SSE图像算法优化系列二十二:优化龚元浩博士的曲率滤波算法,达到约1000 MPixels/Sec的单次迭代速度

      2015年龚博士的曲率滤波算法刚出来的时候,在图像处理界也曾引起不小的轰动,特别是其所说的算法的简洁性,以及算法的效果.执行效率等方面较其他算法均有一定的优势,我在该算法刚出来时也曾经有关注,不过 ...

  2. PLSQL_性能优化系列10_Oracle Array数据组优化

    2014-09-25 Created By BaoXinjian

  3. Mysql优化系列之表设计规范和优化

    一.范式 如果详细的讲范式,要写大大大篇文章来讲,这里假设大家知道一些基本的范式规则,我用简洁的语句和例子说明 第一范式:列不可再分,譬如地址字段,可以再细分为省市区门牌号等等(其实还是看需求怎么整) ...

  4. 优化系列 | DELETE子查询改写优化

    0.导读 有个采用子查询的DELETE执行得非常慢,改写成SELECT后执行却很快,最后把这个子查询DELETE改写成JOIN优化过程 1.问题描述 朋友遇到一个怪事,一个用子查询的DELETE,执行 ...

  5. JVM性能优化系列-(1) Java内存区域

    1. Java内存区域 1.1 运行时数据区 Java虚拟机在执行Java程序的过程中会把它所管理的内存划分为若干个不同的数据区域.主要包括:程序计数器.虚拟机栈.本地方法栈.Java堆.方法区(运 ...

  6. JVM性能优化系列-(2) 垃圾收集器与内存分配策略

    2. 垃圾收集器与内存分配策略 垃圾收集(Garbage Collection, GC)是JVM实现里非常重要的一环,JVM成熟的内存动态分配与回收技术使Java(当然还有其他运行在JVM上的语言,如 ...

  7. JVM性能优化系列-(3) 虚拟机执行子系统

    3. 虚拟机执行子系统 3.1 Java跨平台的基础 Java刚诞生的宣传口号:一次编写,到处运行(Write Once, Run Anywhere),其中字节码是构成平台无关的基石,也是语言无关性的 ...

  8. JVM性能优化系列-(4) 编写高效Java程序

    4. 编写高效Java程序 4.1 面向对象 构造器参数太多怎么办? 正常情况下,如果构造器参数过多,可能会考虑重写多个不同参数的构造函数,如下面的例子所示: public class FoodNor ...

  9. JVM性能优化系列-(5) 早期编译优化

    5. 早期编译优化 早起编译优化主要指编译期进行的优化. java的编译期可能指的以下三种: 前端编译器:将.java文件变成.class文件,例如Sun的Javac.Eclipse JDT中的增量式 ...

随机推荐

  1. 吴裕雄--天生自然python Google深度学习框架:经典卷积神经网络模型

    import tensorflow as tf INPUT_NODE = 784 OUTPUT_NODE = 10 IMAGE_SIZE = 28 NUM_CHANNELS = 1 NUM_LABEL ...

  2. codeforce 1188A1 Add on a Tree 树

    题意:给你一个树,有一种操作,选择两个叶子节点,然后把这两个叶子节点间的路径全部加或减一个值.问你给出的树上的每一条边经过若干次操作是否可以为任意值. 分析:画几个图后可以发现,如果树中存在一个点的度 ...

  3. python学习——函数返回值及递归

    返回值 return语句是从python 函数返回一个值,在讲到定义函数的时候有讲过,每个函数都要有一个返回值.Python中的return语句有什么作用,今天小编就依目前所了解的讲解一下.pytho ...

  4. Centos7.5 firewalld防火墙配置

    CentOS 7.0默认使用的是firewall作为防火墙 1.查看firewall服务状态 systemctl status firewalld 2.查看firewall的状态 firewall-c ...

  5. centos7_安装jira7

    centos7 安装jira7 参考文档:http://www.cnblogs.com/kevingrace/p/7608813.html 1.准备环境 centos7 memory:8G stora ...

  6. iOS雪花动画、音频图、新闻界面框架、2048游戏、二维码条形码扫码生成等源码

    iOS精选源码 粒子雪花与烟花的动画 iOS 2048游戏 JHSoundWaveView - 简单地声波图.音波图 一个可快速集成的新闻详情界面框架,类似今日头条,腾讯新闻 二维码/条形码扫描及扫描 ...

  7. 2)thinkphp的带有命名空间的自动加载机制

    (1)为啥thinkphp里面的文件要是写你的命名空间,要与你的路径一样,因为在thinkphp实现自动加载机制的原理,就是靠的你的命名空间对应这个路径,然后自动加载机制通过这个路径找到你的类文件,然 ...

  8. jquey ajax 将变量值封装json传入JAVA action获取解析

    最近在做一个小小的功能模块,前台有很多的数据需要传入到后台,前台页面设计如下: 看起来不是很清楚,总之表单中的数据都要提交到后台进行处理,然后插入到数据库,而且是一起提交到后台的,实现的方法大致有两种 ...

  9. Create Access Point on Archlinux

    Create Access Point on Archlinux */--> Create Access Point on Archlinux 1 Solution Download creat ...

  10. 66)PHP,会话技术

    其实刷新(F5)就是一个新的请求. 会话技术的实现:1.Cookie    2.Session(其实cookie能做的,session也能做.session能做的,cookie也能做.就是cookie ...