死磕性能调优技巧,性能指标提升一倍以上!

Posted 芋道源码

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了死磕性能调优技巧,性能指标提升一倍以上!相关的知识,希望对你有一定的参考价值。


做积极的人,而不是积极废人!

源码精品专栏

 
  • 原创 | Java 2019 超神之路,很肝~

  • 中文详细注释的开源项目

  • RPC 框架 Dubbo 源码解析

  • 网络应用框架 Netty 源码解析

  • 消息中间件 RocketMQ 源码解析

  • 数据库中间件 Sharding-JDBC 和 MyCAT 源码解析

  • 作业调度中间件 Elastic-Job 源码解析

  • 分布式事务中间件 TCC-Transaction 源码解析

  • Eureka 和 Hystrix 源码解析

  • Java 并发源码

来源:TL  https://url.cn/5GRKpRR

  • 一、Java性能调优笔记

    • 调优步骤

    • 性能瓶颈的表象

    • 载外部处理系统的性能不足

    • CPU消耗分析

    • 上下文切换

    • 运行队列

    • 利用率

    • 网络IO消耗分析

    • 文件IO消耗分析

    • JVM堆外的内存

    • 文件IO消耗严重的解决办法

  • 二、性能调优的策略

    • 调优收益比

    • 三大调优有效原则

  • 三、调优源码


一、Java性能调优笔记

1、调优步骤

衡量系统现状、设定调优目标、寻找性能瓶颈、性能调优、衡量是否到达目标(如果未到达目标,需重新寻找性能瓶颈)、性能调优结束。

2.性能瓶颈的表象

资源消耗过多、外部处理系统的性能不足、资源消耗不多但程序的响应速度却仍达不到要求。

3、外部处理系统的性能不足

所调用的其他系统提供的功能或数据库操作的响应速度不够。

资源消耗不多但程序的响应速度却仍达不到要求:程序代码运行效率不够高、未充分使用资源、程序结构不合理。

4、CPU消耗分析

CPU主要用于中断、内核、用户进程的任务处理,优先级为中断>内核>用户进程。

5、上下文切换

每个线程分配一定的执行时间,当到达执行时间、线程中有IO阻塞或高优先级线程要执行时,将切换执行的线程。在切换时要存储目前线程的执行状态,并恢复要执行的线程的状态。

6、运行队列

每个CPU核都维护一个可运行的线程队列。系统的load主要由CPU的运行队列来决定。运行队列值越大,就意味着线程会要消耗越长的时间才能执行完成。

7、利用率

CPU在用户进程、内核、中断处理、IO等待、空闲,这五个部分使用百分比。

8、网络IO消耗分析

对于分布式Java应用,网卡中断是不是均衡分配到各CPU(cat/proc/interrupts查看)。

9、文件IO消耗分析

Linux在操作文件时,将数据放入文件缓存区,直到内存不够或系统要释放内存给用户进程使用。所以通常情况下只有写文件和第一次读取文件时会产生真正的文件IO。

10、JVM堆外的内存

swap的消耗、物理内存的消耗、JVM内存的消耗。

11、文件IO消耗严重的解决方法

从程序的角度而言,造成文件IO消耗严重的原因主要是多个线程在写进行大量的数据到同一文件,导致文件很快变得很大,从而写入速度越来越慢,并造成各线程激烈争抢文件锁。

二、性能调优的策略

好的调优策略是收益比(调优后提升的效果/调优改动所需付出的代价)最高的,通常来说简单的系统调优比较好做,因此尽量保持单机上应用的纯粹性, 这是大型系统的基本架构原则。

调优的三大有效原则:充分而不过分使用硬件资源、合理调整JVM、合理使用JDK包。

除了解性能调优的基本方法,大厂的动向也是需要了解的。以下是我整理的2019年百度、京东、腾讯、阿里巴巴等各大厂关于性能调优的面试题

也是前唯品会、京东电商架构师诸葛的课程内容。

参加腾讯课堂&图灵学院联合推出的《Java性能调优》训练营,还有机会赢取神秘大奖!

原价99元,本号粉丝特惠,仅需0.02元


扫码参与,先到先得

Java虚拟机底层原理与性能优化

  • Java虚拟机内存模型能说说吗?

  • 类加载器的双亲委派模型是什么?

  • JVM垃圾收集算法与收集器有哪些?

  • JVM诊断调优工具用过哪些?

  • 每秒几十万并发的秒杀系统为什么会频繁发生GC?

  • 日均百万级交易系统如何优化JVM?

  • 线上生产系统OOM如何监控及定位与解决?

  • 高并发系统如何基于G1垃圾回收器优化性能?

mysql索引数据结构与性能优化

  • 索引数据结构红黑树,Hash,B+树能说下吗?

  • 千万级数据表如何用索引快速查找?

  • 如何基于索引B+树精准建立高性能索引?

  • 联合索引底层数据结构又是怎样的?

  • 覆盖索引与聚集索引到底是什么?

  • Mysql最左前缀优化原则是什么?

  • 为什么推荐使用自增主键做索引?

  • 说说Mysql索引优化规范?

BIO,NIO,AIO,Netty以及Redis线程模型

  • BIO,NIO,AIO的区别?

  • 什么是阻塞IO以及非阻塞IO? 

  • 什么是同步IO以及异步IO? 

  • IO模型有几种?分别是什么? 

  • Reactor和Proactor IO设计模式是什么?

  • NIO底层select、poll和epoll实现的区别 ?

  • Java NIO的几个核心组成部分是什么?作用分别是什么?

  • Redis、Netty、Tomcat的线程模型与NIO的联系是什么?

最近面试BAT,整理了一份资料Java性能调优笔记及源码,覆盖了文件IO消耗分析、内存消耗分析、JVM调优、程序调优、文件IO消耗严重的解决方法等等。

获取方式:资料整理不易,报名“0.02元课程”即可免费领取,更多内容陆续奉上。

明天见(。・ω・。)ノ♡


点击阅读原文,立即参与课程直播~

以上是关于死磕性能调优技巧,性能指标提升一倍以上!的主要内容,如果未能解决你的问题,请参考以下文章

知道这些性能优化手段,工资起码提升一倍

怎样写出高性能的 Java 代码?

京东大牛性能调优经验全解,从未公布的技巧

iOS 之应用性能调优的25个建议和技巧

AMD展示64核EYPC处理器性能:比Intel至强8280快一倍以上

AutoML 助力 AI 性能调优