关注微信公众号 “数联生活”关注后一起提升,然后点击右上角三个点,设为“星标”,获取更多技术、职场和其它高价值资讯。后台回复关键词【java】获取史上最强【java核心资料】与【Linux强悍总结笔记】下载链接。

很多朋友说他们公司系统从来没经过性能调优,功能测试完成后就上线了,上线后遇到问题也是修修补补,实在不济重启tomcat服务就好了。这要是内部管理系统出了事还好,搪塞一下领导就过去了,要是对外客户服务的系统就惨了,老是出问题有可能年底考核就嗝屁了。工欲善其事必先利其器,本文详细总结系统性能调优攻略,从此告别修修补补;天下武功唯快不破,史上最强Linux总结笔记帮助快速进行修复操作,告别领导烦人追问。

首先思考这几个问题:为什么要做性能调优?什么时候开始做?做性能调优是不是有标准可参考?

为什么要做性能调优?

一款线上产品如果没有经过性能测试,相当于一颗定时炸弹,不知道什么时候会出问题,也不清楚其爆发的临界值。有些性能问题是时间累积慢慢产生的,到一定时间就会爆发;而更多性能问题是由访问量的波动导致的,例如刚开始业务量和用户使用率不大,所以还没有引发这颗定时炸弹。

所有系统开发完后,多多少少都有性能问题,所以首先要把问题暴露出来,如进行压力测试、模拟可能的操作场景等等,然后针对这些问题通过性能调优去解决。性能能够直接影响业务价值,如用户用 App 查询某一条信息或抢购商品时若需要等待十几秒钟,那一般没人有这个耐心,有的可能直接骂娘。后台运营人员操作一个查询分析功能时要很久或者有时直接卡死,那他想哭的心都有。所以好的系统性能调优直接关系到用户体验和业务价值变现,这也是性能调优的直接目的和重要性。

性能调优的介入策略

一般项目开发初期需要在代码层面保证有效的编码,如减少磁盘 I/O 操作、降低竞争锁的使用以及使用高效的算法等等。对于较复杂业务,可以充分利用设计模式来优化业务代码。如用装饰模式而非代理模式去设计业务上有递进关系的功能。系统编码完成后,对系统进行压测,通过性能分析、统计工具来统计各项性能指标,看是否在预期范围之内。系统上线后,需要通过日志监控及性能统计日志来不断观测系统性能指标,一旦发现问题就要对日志进行分析并及时修复。

影响系统性能的因素

在系统运维和性能调优前,首先需要了解哪些计算机资源会成为系统的性能瓶颈,这是问题产生的原因,只有熟练掌握这些基础知识才能做到问题产生时了然于胸、对症下药。

CPU:有的应用需要大量计算,会长时间、不间断占用 CPU 资源,导致其他资源无法争夺到 CPU 而响应缓慢,从而带来系统性能问题。如代码递归导致的无限循环,正则表达式引起的回溯,JVM 频繁的 FULL GC,以及多线程编程造成的大量上下文切换等,这些都有可能导致 CPU 资源繁忙。

内存:Java 程序一般通过 JVM 对内存进行分配管理,主要用 JVM 中的堆内存来存储 Java 创建的对象。系统堆内存读写速度非常快,所以基本不存在读写性能瓶颈。但由于内存成本要比磁盘高,相比磁盘,内存的存储空间又非常有限。所以当内存空间被占满,对象无法回收时,就会导致内存溢出、内存泄露等问题。

磁盘 I/O:磁盘相比内存存储空间要大很多,但磁盘 I/O 读写的速度要比内存慢,虽然目前引入的 SSD 固态硬盘已经有所优化,但仍然无法与内存的读写速度相提并论。

网络:网络对系统性能来说起着至关重要作用,带宽过低则对传输数据比较大、或者并发量比较大的系统而言,网络就很容易成为性能瓶颈。

异常:Java 应用中,抛出异常需要构建异常栈,对异常进行捕获和处理,这个过程非常消耗系统性能。如果在高并发的情况下引发异常,持续进行异常处理,那么系统的性能就会明显地受到影响。

数据库:大部分系统都会用到数据库,而数据库操作往往是涉及到磁盘 I/O 的读写。大量的数据库读写操作,会导致磁盘 I/O 性能瓶颈,进而导致数据库操作的延迟性。对有大量数据库读写操作的系统来说,数据库的性能优化是整个系统的核心。

锁竞争:在并发编程中经常会需要多个线程共享读写操作同一个资源,为保证共享资源在一个线程写的时候不被另一个线程修改就会用到锁。锁的使用可能会带来上下文切换,从而给系统带来性能开销。JDK1.6 之后,Java 为降低锁竞争带来的上下文切换,对 JVM 内部锁已经做了多次优化,如新增偏向锁、自旋锁、轻量级锁、锁粗化、锁消除等。如何合理使用优化锁资源就需要了解更多操作系统知识、Java 多线程编程基础,积累项目经验,并结合实际场景去处理相关问题。

衡量系统性能的指标

了解上述影响系统性能的因素后,可以得到下面几个指标来衡量一般系统的性能。

1、响应时间

响应时间是衡量系统性能的重要指标之一,响应时间越短,性能越好,一般一个接口的响应时间是在毫秒级。在系统中,响应时间分为以下几种:

数据库响应时间:数据库操作所消耗的时间,往往是整个请求链中最耗时的;

服务端响应时间:服务端包括 Nginx 分发请求所消耗时间及服务端程序执行所消耗的时间;

网络响应时间:网络传输时网络硬件需要对传输的请求进行解析等操作所消耗的时间;

客户端响应时间:Web、App 客户端如果嵌入大量的逻辑处理,消耗的时间可能变长,成为系统的性能瓶颈。

2、吞吐量

TPS(每秒事务处理量)体现接口的性能,TPS 越大,性能越好。在系统中,吞吐量分为两种:磁盘吞吐量和网络吞吐量。磁盘吞吐量,磁盘性能有两个关键衡量指标。网络吞吐量指网络传输时没有帧丢失情况下,设备能够接受的最大数据速率。网络吞吐量不仅跟带宽有关系,还跟 CPU 处理能力、网卡、防火墙、外部接口以及 I/O 等等紧密关联。而吞吐量的大小主要由网卡的处理能力、内部程序算法以及带宽大小决定。

3、计算机资源分配使用率

通常由 CPU 占用率、内存使用率、磁盘 I/O、网络 I/O 表示资源使用率。其中任何一项分配不合理会影响整个系统性能。

4、负载承受能力

当系统压力上升时,可以观察系统响应时间的上升曲线是否平缓。这项指标能直观地反馈系统所能承受的负载压力极限。如当对系统进行压测时,系统响应时间会随着系统并发数的增加而延长,直到系统无法处理这么多请求,抛出大量错误时,就到了极限。

--END--

重点来了,长按下边二维码关注本号后台回复关键词【java】可获取史上最强【java核心资料】与【Linux强悍总结笔记】下载链接,亲测有效哦。


关于我们

以技术视角通世事文化之变、洞察技术业务于细末,以逻辑重塑大脑,用算法编码人生。分享有价值技术文章和思想、提供高价值资讯,欢迎长按二维码关注本号,一起关注机会、关注生活

JAVA性能优化,从此不再重启tomcat服务相关推荐

  1. Java性能优化,操作系统内核性能调优,JYM优化,Tomcat调优

    文章目录 Java性能优化 尽量在合适的场合使用单例 尽量避免随意使用静态变量 尽量避免过多过常地创建Java对象 尽量使用final修饰符 尽量使用局部变量 尽量处理好包装类型和基本类型两者的使用场 ...

  2. 拉勾教育 | Java 性能优化实战 21 讲

    开篇词 开篇词 | Java 性能优化,是进阶高级架构师的炼金石 你好,我是李国.作为<Java 性能优化与面试 21 讲>这个课程的作者,我先来简单介绍下自己. 我曾任京东金融.陌陌科技 ...

  3. 赠书:《Java性能优化实践》,众多业内大佬推荐阅读

    没有捷径可走的 Java 性能优化 多年来,用 Google 搜索 Java performance tuning,出现的三篇最热门文章之一是于 1997 年到 1998 年左右发表的文章,这篇文章在 ...

  4. 推荐:Java性能优化系列集锦

    Java性能问题一直困扰着广大程序员,由于平台复杂性,要定位问题,找出其根源确实很难.随着10多年Java平台的改进以及新出现的多核多处理器,Java软件的性能和扩展性已经今非昔比了.现代JVM持续演 ...

  5. 新书上市 | 《Java性能优化实践》,众多业内大佬推荐阅读

    没有捷径可走的 Java 性能优化 多年来,用 Google 搜索 Java performance tuning,出现的三篇最热门文章之一是于 1997 年到 1998 年左右发表的文章,这篇文章在 ...

  6. Java 性能优化的五大技巧

    要对你的 Java 代码进行优化,需要理解 Java 不同要素之间的相互作用,以及它是如何与其运行时的操作系统进行交互的.使用下面这五个技巧和资源,开始学习如何分析和优化你的代码吧. 在我们开始之前, ...

  7. java性能优化权威指南_Java性能优化权威指南 PDF扫描[132MB]

    Java性能优化权威指南主要为Java SE 和Java EE 应用的性能调优提供建议.主要包括以下几方面:性能监控.性能分析.Java HotSpot VM 调优.高效的基准测试以及Java EE ...

  8. 如何在Linux操作系统定时重启Tomcat服务?

    如何在Linux操作系统定时重启Tomcat服务? 背景: 正常情况下启动和关闭tomcat程序命令如下: /application/tomcat/bin/startup.sh /applicatio ...

  9. Shell in AIX Web端 自动远程执行重启tomcat服务命令

    2019独角兽企业重金招聘Python工程师标准>>> Web端 自动远程执行重启tomcat服务命令 vi restart.sh   #!/bin/sh JAVA_HOME=/us ...

最新文章

  1. 整理一份详细的数据预处理方法
  2. 谷歌15个人工智能开源免费项目!开发者:懂了
  3. [置顶] Android输入输出机制之来龙去脉之前生后世
  4. 基于区块链的健康链系统设计与实现(2)区块链平台Web服务器
  5. SQL SERVER 中identity
  6. sdut 汉诺塔系列2
  7. 阿里云IoT Studio升级版新增解决方案引擎 大幅提升方案交付效率
  8. javaweb项目得执行过程及servlet得请求(Httprequest)和响应(Httpresponse)
  9. 十字星文化获数千万元A轮融资,腾讯持续下注
  10. java字符串替换 数组,Java工具类-拆分字符串组装数组,替换字符
  11. Python 调度算法 死锁 静动态链接 分页分段(七)
  12. vscode开发python使用教程_VSCode 支持Python
  13. 通俗理解激活函数作用和常见激活函数总结:sigmoid、tanh、relu、Leaky-relu、P-relu、R-Relu、elu
  14. 【离散数学】集合论 第四章 函数与集合(5) 集合的基数、可数与不可数集合
  15. Pycharm安装numpy失败
  16. 泱脏武器库之 CVE 2021-4034 Polkit 提权小结
  17. Java计算机毕业设计德云社票务系统源码+系统+数据库+lw文档
  18. 透过表象看本质!?之三——Kalman滤波
  19. #读书笔记—《自控力》第二章
  20. “现在的自动驾驶太保守!”看看轻舟智航联合创始人大方这篇论文怎么说

热门文章

  1. 2023年美赛C题Wordle预测问题三、四建模及Python代码详细讲解
  2. 理财就是理生活读后感
  3. 启动计算机引导windows10,Win10系统引导项丢失了怎么办?修复Win10系统启动引导项的方法...
  4. 介绍一些比较方便好用的爬虫工具和服务
  5. 找数据?这几个数据源网站你都知道吗!?
  6. 如何整合润乾报表到spring boot项目
  7. 小程序如何加入企业微信群聊
  8. 微信 android兼容性问题怎么解决方案,微信7.0版本与EMUI系统兼容性问题,华为官方是这样回复的...
  9. 怎么压缩PDF文件大小?分享几个压缩文件的方法
  10. Python面试题大全总结