Java web应用性能分析概叙

        “系统慢”,这是任何一个应用都会出现的问题,面对“系统慢”的问题,客户、测试、开发、管理者等不同角色的人员有不同反应:

        客户:啥破东西啊,这么卡!

        测试:性能bug已提交。

        开发:我本地很快啊,要不你重启一下!

        管理者:开会了。

        OK!“屁股决定脑袋”,扯淡结束,回归正题。

        

        为了便于区分,根据web请求响应模型,粗略分成客户端慢、服务端慢。

客户端慢

        客户端慢的原因比较难以控制(客户端的环境影响),因为差异性太大,且大部分原因是客户端所在环境导致,每个终端的情况可能都不一样;因此这里只做归纳,不做具体指导。

        但是在我们设计功能时需要考虑客户端慢的情况,比如物联网设备的弱网环境、客户端带宽不足导致视频通话或者影视观看卡顿、大型集会现场通过手机流量上网造成的基站通道拥堵(几万人的活动现场、无运营商加持,只通过当地基站,特别是拍照发朋友圈)。

        如果是因为应用导致的客户端慢,这个还是要重视,一般这种情况都归结于服务端慢,比如现场签到(扫同一个码)抽红包,扫码没有反应,客户端一直在转圈直到超时,排除客户端网络环境良好的原因,那么就是我们扫码服务接口对并发支持不够导致(这种都会在后面服务端慢找对应的)

服务端慢

        一般web应用慢,默认指服务端慢。因此本文重点讲解服务端慢。

        服务端慢的情况有很多:如下图所示,图一中每一个环节都可能会导致“系统慢”,再详细点如图二所示,一个web页面请求和响应整个过程中的每个节点都会导致“系统慢”,包括:服务器、网络、客户端浏览器、服务端的组件和应用。

        比如:web应用中的文件上传入库功能,多客户并发的上传大xls文件,100个用户并行上传100M的xls文件,并行上传过程中,服务端不仅仅要接受文件、还要打开文件逐行解析入库,不仅仅占用服务器带宽、CPU/内存/磁盘/数据库/JVM/GC都有影响。

服务端慢的原因
  1. 网络攻击:DDos攻击、网站CC攻击、XSS跨网脚本攻击、CSRF等;  如ddos这种,占用服务端连接数,让正常业务请求无路可走。
  2. 服务器带宽不足:服务器带宽不足会导致网络拥堵,web应用访问变慢,以及访问报错(408 request timeout,504 gateway timeout),影响客户体验,最终会导致潜在客户流失。
  3. 服务器资源不足:(cpu/内存/磁盘/网卡/显卡等性能瓶颈)、容器性能瓶颈(docker等),
  4. 中间件慢:(RPC框架、WEB服务器、MQ消息队列(KFK、RocketMQ、RabbitMQ等)、
  5. 数据库慢:(关系型数据库Oracle、MySQL、PostgreSQL、SQL Server等;非关系型数据库Redis、MongoDB,ElasticSearch等)、
  6. 应用慢:(前端页面加载慢、jvm、GC、锁、线程池、java容器使用不当、业务设计不合理、框架设计不合理、写日志文件、并发)

        当然很多服务端慢的情况都是关联影响的,需要综合具体情况具体分析。这里先做一个概叙,待后续整理发布。

一、性能优化考虑点

        当我需要进行性能优化时,说明我们服务器无法满足日益增长的业务。性能优化是一个比较大的课题,需要从以下2个方面进行探讨。

  1. 当前系统结构瓶颈
  2. 了解业务模式 原理、性能和安全
二、当前系统结构瓶颈     

        首先需要了解的是当前系统瓶颈,用的是什么,跑的什么业务。里面的服务是什么样子,每个服务最大支持多少并发。比如针对Nginx而言,我们处理静态资源最高的并发是多大。

  1. 可以通过查看当前cpu负荷,内存使用率,进程使用率来做简单判断。还可以通过操作系统的一些工具来判断当前系统性能瓶颈,如分析对应日志,查看请求数量。
  2. 也可以通过nginx vts模块来查看对应的连接数,总握手次数,总请求数。以对上线进行压力测试,来了解当前的系统的性能,并发数,做好性能评估。
三、了解业务模式

        虽然我们是在做性能优化,但还是要熟悉业务,最终目的都是为了业务服务的。我们要了解每一个接口业务类型是什么样的业务,

        比如电商抢购模式,这种情况配是流量会很小,但是到了抢购时间,流量一下子就会猛涨。也要了解系统层级结构,每一层中间层做的是代理还是动静分离,还是后台进行直接服务。需要我们对业务接入层和系统层次要有一个梳理。

     图一 web软件架构图

图二  基于springclod的软件架构图

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/bicheng/1672.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【OpenGL实验】在python、Qt5、pyOpenGL程序的若干要点

实验效果图: 代码 目录 一、说明二、关于QGLWidget2.1 三个方便的虚函数2.2 析构函数2.3 QGLWidget析构函数三、关于QGLWidget的三个虚函数分工3.1 initializeGL:数据准备、数据绑定分离3.2 resizeGL:视角改变函数3.3 paintGL:绘画函数四、主窗口的配合:刷新周期的设定4…

git 冲突与解决冲突

目录 1.使用 git 解决冲突 GIT 常用命令 制造冲突 解决冲突 2.使用 IDEA 解决冲突 产生冲突 解决冲突 1.使用 git 解决冲突 GIT 常用命令 命令作用git clone克隆git init初始化git add 文件名添加到暂存区git commit -m " 日志信息" 文件名提交到本地库git st…

记录一个Maxwell采集MySQL数据时报安全证书时间不通过的问题

【背景描述】 我的zk,kafka和Maxwell都正常启动了 此时我需要用Maxwell将MySQL的一张表user_info将其全量同步到kafka当中时发生报错,命令如下: [atguiguhadoop102 datas]$ /opt/module/maxwell/bin/maxwell-bootstrap --database gmall --…

ACE Lab 数据恢复/数据取证技术交流研讨会

2024年4月20-21日,ACE Lab 数据恢复/数据取证技术交流研讨会在北京举行,天津鸿萌科贸发展有限公司参加了这次技术研讨会。 ACE Lab 的 PC-3000 系列产品是数据恢复及取证领域的顶级工具,深受领域内专家的推崇。 本次技术交流带来了如下最新技…

【Python-装饰器】

Python-装饰器 ■ 简介■ 装饰器的一般写法(闭包写法)■ 装饰器的语法 (outer写法) ■ 简介 装饰器其实是一种闭包, 功能就是在不破坏目标函数原有的代码和功能的前提下为目标函数增加新功能。 ■ 装饰器的一般写法(闭包写法&am…

分享购热潮席卷而来:解析其背后的成功密码

亲爱的朋友们,我是微三云的周丽,一名专注于私域电商模式创新的探索者。 随着数字化时代的到来,消费者的购物行为也在不断变化,因此,企业必须不断地探索新的ying销方式,以xi引用户、提升xiao售额。而最近备…

SVN泄露(ctfhub)

目录 下载安装dvcs-ripper 使用SVN 一、什么是SVN? 使用SVN能做什么? 二、SVN泄露(ctfhub) SVN源代码漏洞的主要原因: 工具准备:dirsearch、dvcs-ripper 网络安全之渗透测试全套工具篇(内…

深入理解VGG网络,清晰易懂

深入理解VGG网络 VGG网络是深度学习领域中一个非常经典的卷积神经网络(CNN)架构,由牛津大学的视觉几何组(Visual Geometry Group)提出。它在2014年的ImageNet挑战赛中取得了第二名的好成绩,并且在随后的许…

智慧水务能效管理系统平台/地下污水厂配电系统电气安全设计

安科瑞电气薛瑶瑶18701709087 1、引言 地下水污厂在城市建设中扮演着重要的角色,负责对城市污水和废物进行处理和排放。然而,由于地下水污厂中存在着许多危险因素,如有害气体、液体和固体废物等,因此要保证电气安全。电气安全系统是地下水污厂安全生产的重要保障措施之一,包括…

C语言进阶课程学习记录-函数参数的秘密

C语言进阶课程学习记录-函数参数的秘密 实验实验小结调用约定实验-求平均数实验-可变参数的函数小结 本文学习自狄泰软件学院 唐佐林老师的 C语言进阶课程&#xff0c;图片全部来源于课程PPT&#xff0c;仅用于个人学习记录 实验 #include <stdio.h>int func(int i, int…

MySQL学习笔记1(MySQL基础)

1.MySQL基础 1.数据库相关概念 ​ *数据库&#xff1a;存储数据的仓库&#xff0c;数据是有组织的进行存储 DtaBase(DB) ​ *数据管理系统&#xff1a;操纵和管理数据库的大型软件 DataBase Management System (DBMS) ​ *SQL&#xff1a;操作关系型数据库的编程语言&#…

初始C++

1. C关键字(C98) C总计63个关键字&#xff0c; C语言32个关键字 ps&#xff1a;下面我们只是看一下C有多少关键字&#xff0c;不对关键字进行具体的讲解。后面我们学到以后再 细讲。 2. 命名空间 在C/C中&#xff0c;变量、函数和后面要学到的类都是大量存在的&#xff0c;…

JAVA学习笔记28(常用类)

1.常用类 1.1 包装类 1.包装类的分类 ​ 1.针对八中基本数据类型相应的引用类型–包装类 ​ 2.有了类的特点&#xff0c;就可以调用类中的方法 2.包装类和基本数据类型的转换 ​ *装箱&#xff1a;基本类型 --> 包装类型 //手动装箱 int n1 100; Integer integer ne…

【C语言__函数栈帧的创建和销毁__复习篇9】

目录 前言 一、知识补充 二、分析创建和销毁的过程 三、前言问题回答 前言 本篇主要讨论以下问题&#xff1a; 1. 编译器什么时候为局部变量分配的空间 2. 为什么局部变量的值是随机的 3. 函数是怎么传参的&#xff0c;传参的顺序是怎样的 4. 形参和实参是什么关系 5. 函数…

电商平台业务及架构演变史

不少人认为电商系统很简单&#xff0c;因为现在做电商的太多了&#xff0c;看到的电商产品也多。看来看去产品都差不多&#xff0c;没什么特别。 其实中国电商发展已有20多年历史&#xff0c;电商以销售为核心连接着研、产、供、销、服整套的信息系统体系。其中的设计并没有那…

企业公众号数量怎么申请

一般可以申请多少个公众号&#xff1f;许多用户在申请公众号时可能会遇到“公众号显示主体已达上限”的问题。这是因为在2018年11月16日对公众号申请数量进行了调整&#xff0c;具体调整如下&#xff1a;1、个人主体申请公众号数量上限从2个调整为1个。2、企业主体申请公众号数…

vue---计算属性

姓名案例 1.使用插值语法实现 <!DOCTYPE html> <html><head><meta charset"UTF-8" /><title>姓名案例_插值语法实现</title><!-- 引入Vue --><script type"text/javascript" src"../js/vue.js"&g…

从源码选择到国际化运营:打造成功的跨境电商网站必备指南

跨境电商网站的成功离不开经过精心策划和执行的全面计划。从源码选择到国际化运营&#xff0c;每一步都至关重要。作为跨境电商领域的专家&#xff0c;我将为您提供打造成功跨境电商网站的必备指南&#xff0c;帮助您开拓全球市场&#xff0c;提升边际收入。 选择优质的跨境电…

云服务器ECS选型知多少

云服务器ECS选型知多少 ECS产品规格如何选择实例规格变配 说到云服务器ECS选型&#xff0c;那可以说太重要了。因为对于一个项目来说&#xff0c;从项目到开始到最后的部署上线&#xff0c;每一步都需要付出&#xff0c;这些对于企业或者个人来说都是一笔投入&#xff0c;那么如…

会议预告 | 易基因与您相约2024中国衰老科学大会(附日程) 新品首发

由中国细胞生物学学会衰老细胞生物学分会等单位联合主办&#xff0c;瓯江实验室、温州医科大学老年研究院等共同承办的2024中国衰老科学大会暨国际衰老生物学大会将于2024年4月26日-28日在温州召开。本次大会以“解码衰老”为主题&#xff0c;旨在汇聚全球科研精英&#xff0c;…