(java系统)压测以及系统优化手段

第一次面试的时候没准备好,一下子被问懵了,其实只要大概了解下有什么优化的方向,挑选你比较了解的层面,引导面试官去问,或者主动去详细解释你比较了解的方向。

一、压测-监控与分析

想要优化系统,首先得找到你的系统瓶颈在哪,这时候我们一般通过压测,分析系统的瓶颈。

1. 压测的主要流程

  1. 资源与环境准备:压测的系统环境要尽可能的保持与生产环境配置一致,如果存在差异,压测出来的结果可能毫无参考性,并提供额外的服务器部署监控工具
  2. 场景设计与数据准备:分析高并发量的核心业务流程,针对该流程进行数据的准备
  3. 脚本的录制:针对选用的压测工具,准备压测脚本
  4. 压测的执行:重复进行压测,并不断调整系统配置(JVM参数之类的),通过监控工具记录压测时的各类数据,包括系统的资源消耗情况,JVM信息,请求链路的处理速度等等。注意,压测的目的是分析瓶颈,应该合理的去设定并发量,而不是一开始就以破坏系统为目的,去暴力压测
  5. 压测结果分析: 针对记录的压测数据,分析出系统瓶颈,确定调优的方向

2. 压测工具介绍

这里只介绍几个免费工具,如果想用付费工具,感觉不如直接找专业的压测服务供应商

工具 说明 优点 缺点
JMeter Apache基于java的压测工具 支持各类插件,能满足大部分场景;支持的浏览器较多;支持jenkins;用起来简单,脚本也好写,新手墙裂推荐 对业务场景的支持比较差,集群压力测试时的启停很麻烦
ngrinder 基于python 部署简单;节点控制简单;有比较好看的WEB界面;实现多用户共享压测节点资源 似乎很久没更新,脚本比较难编写,数据源使用复杂,录制工具坑多,不是专业的压测人员请远离这玩意
AB Apache自带 体积小,方便发起压测 功能少到极致,只适合对单个接口进行压力测试
Gatling 基于Scala 开发的高性能服务器性能测试工具 压测节点性能非常高;支持Maven,Eclipse,IDEA,Jenkins;开源,且扩展性好 对业务场景的支持比较差,不支持分布式压力测试,语言学习升本较高

3. 监控工具

以下工具可以组合一起使用,一般使用zabbix+pinpoint就差不多了

Zabbix

基于WEB界面的提供分布式系统监视以及网络监视功能的企业级的开源解决方案。开源免费,支持中文,而且安装和配置很简单,学习成本低

主要功能(监控信息):CPU负荷、内存使用、磁盘使用、网络状况、端口监视、日志监视

Pinpoint

Pinpoint是一款全链路分析工具,提供了无侵入式的调用链监控、方法执行详情查看、应用状态信息监控等功能。

提供了调用链健康度和调用链响应的监控,能监控调用链路中,各个方法以及sql执行的耗时

Graylog

Graylog是一个开源的日志聚合、分析、审计、展现和预警工具。(监控界面的图表看起来很炫)

主要功能:应用日志收集,应用日志监控,接口健康度监控

二、系统优化的手段

通过压测的结果,我们分析出高并发的情况,系统的瓶颈,针对这些瓶颈,我们可以使用对应的手段去优化系统,这里只简单说下优化的考虑方向(以下仅为我能想到的方向,欢迎大家评论补充完善)

1. 增加硬件配置

在当前硬件性能逐渐增长的背景下,最最简单粗暴的方式:

  • 服务带宽不够:增加网络带宽,DNS域名解析分发多台服务器
  • web线程连接数不够:负载均衡,前置代理服务器nginx、apache,微服务集群等
  • 数据库连接查询上不去:数据库查询优化,读写分离,分表等
  • 系统整体压力过大:集群、负载均衡

2. 程序设计层面进行优化

  • 合理使用缓存,包括用户缓存,信息缓存等,多花点内存来做缓存,可以大量减少与数据库的交互,提高性能
  • 分析功能的必要性,为核心功能让位(类似微服务的服务降级思想?):例如统计的功能尽量做缓存,或按每天一统计或定时统计相关报表,避免在系统高负荷阶段使用
  • 能使用静态页面的地方尽量使用,减少容器的解析,尽量将动态内容生成静态html来显示
  • 允许的情况下,合理使用队列来缓解核心接口的压力,保证系统的稳定运行

3. 代码优化

pinpoint监控耗时请求,定位耗时方法并进行代码review,对代码结构进行优化,一般主要针对高频的核心业务代码

4. JVM参数调优

压测过程中,监控GC情况, 对各种系统参数配置进行调整,找出最优配置

5. 数据库优化

  • sql优化:pinpoint定位耗时请求,针对出现频率高的sql以及耗时高的sql进行优化
  • 数据库的表结构优化:合理建立索引,调整表结构
  • 数据库配置调优(本人没了解过,都是围观DBA大佬操作)

剩下的还有操作系统优化,系统架构优化(重构)等…

发布了20 篇原创文章 · 获赞 2 · 访问量 2888

猜你喜欢

转载自blog.csdn.net/Azhuzhu_chaste/article/details/105190631