一、性能分析的常用手段

1、空间换时间,利用内存缓存从磁盘上取出的数据,CPU可以直接访问内存,从而比从磁盘读取数据更高的效率。

2、时间换空间,当空间成为瓶颈的时候,切开数据分批次处理,用更少空间完成任务的处理。

3、分而治之,把任务切分,分开执行。

4、异步处理,业务链路上有任务时间消耗较长,可以拆分业务,减少阻塞影响,常见的异步处理有MQ(消息队列)。

5、并行,用多个进程或者线程同时处理业务,缩短业务处理时间。

6、离用户更近一点,比如CDN技术,把用户请求的静态资源放在离用户更近的地方。

二、性能分析方法

1、自低而上:通过监控硬件及操作系统性能指标来分析性能问题。

2、自顶而下:通过负载生成来观测被测试系统的性能,比如响应时间、吞吐量。

三、性能分析流程

1、检查RT:响应时间

2、检查TPS:每秒完成事务数

3、检查负载机资源消耗,是否有性能问题:CPU使用率

4、检查web服务器的资源消耗:

1)检查CPU的使用率;

2)检查内存的使用情况;

3)检查磁盘使用情况;

4)检查占用的带宽;

5)分析web页面的响应组成

5、检查中间件的配置问题

6、数据库服务器资源消耗分析:

1)检查CPU的使用率;

2)检查内存的使用情况;

3)检查磁盘使用情况;

4)数据库监控

7、SQL分析:

1)定位不合理的sql占比;

2)索引是否正常应用;

3)检查共享sql是否合理范围;

4)检查解析是否合理;

5)检查数据ER结构是否合理;

6)检查数据热点问题;

7)检查数据分布是否合理;

8)检查碎片整理

四、系统性能关注点

1、系统资源

(1)CPU过高:

1)计算量大,比如运算、连接查询、数据统计;

2)非空闲等待,同一资源被不同线程请求,而此资源又需要保证一致性,只能前一个释放后一个再访问,导致等待;

3)过多的系统调用,系统调用操作系统所提供的程序接口;

4)过多的中断,中断是CPU用来响应请求的机制。

(2)内存吃紧,解决办法就是加内存,或者减少不必要的调用。

(3)磁盘繁忙,数据读写频繁。

(4)高并发造成网络拥堵。

2、操作系统

(1)系统负载:load average(CPU的任务队列长度)

(2)系统连接数的控制,操作系统为了安全会限制外部及内部建立TCP连接的数量,在服务器环境需要提供大量的服务,此时需要修改这个TCP连接数的限制。

(3)缓存:操作系统存在缓存机制,内存不够时,有虚拟内存,哲学都是提高IO效率的有效手段。

3、数据库

系统性能的好坏很大部分是由数据库系统、应用数据库设计及如何使用数据库来决定的,简单地把浙西应用系统分为OLTP(联机事务处理系统)与OLAP(联机分析处理系统)两种,以下为OLTP和OLAP的粗略比较:

(1)对于OLTP类型的常规办法是:

1)优化业务过程,尽量减少数据请求,不管是读还是写

2)优化sql语句提交效率

(2)对于OLAP类型的常规办法是:

1)预处理,比如物化、多维数据,先把数据放在后台统计,生成一个较小的数据集,然后程序对物化后的数据进行访问减小系统压力。

2)分而治之,比如并行查询

3)优化语句提高效率

(3)OLTP类型关注点:

1)慢查询

2)大事务

3)死锁

4)DB Time高

5)磁盘IO等待时间

6)对于一些热点数据,可以置入内存,提高响应数据,常见的缓存如memcache、redis等,Hibernate这种ORM模型的框架也提供二级缓存支撑。

4、中间件

J2EE架构的程序多数运行在Tomcat、Jboss、WebLogic、Jetty等中间件上。

(1)JVM:中间件是运行在JVM之上的,我需要监控jvm堆内存使用情况。包括GC频率,线程状态等。Full GC操作是对堆空间进行全面回收,所以频繁得Full GC会影响响应时间。监控线程运行状态主要关注Blocked状态线程,此状态说明当前线程运行相对较慢,长时间的Blocked可能是因为线程阻塞,甚至造成死锁。

(2)Thread pool:中间件在接收用户请求时为了节省建立连接、销毁连接的资源消耗,设计建立线程池,需要监控其使用情况,一般超过使用率时,可以考虑加大连接池数量。

(3)DB Connections pool:为了节省程序与DB建立连接、释放连接的资源消耗,设计数据库连接池,一般超过使用率时,可以考虑加大连接池数量。

Thread pool和DB Connections pool,我们都可以通过netstat命令统计其连接数。

5、应用程序

不同的架构存在不同的性能短板,抽象层次越高(低层封装程度越高),开发效率越高,对开发人员的要求越低,性能风险越高。往往性能风险都会集中在这一层次。我们常见的SSH架构是MVC模型。展现层view复制展现的内容,Controller负责请求接收,前台逻辑跳转;Model层实现业务逻辑,返回数据;数据层负责与数据库打交道。

6、web服务

关注点:

(1)页面的Size:动态数据、CSS、JS、图片等的大小

(2)隐藏的,无用的数据传输

web性能优化方向:

(1)页面静态化,先进行静态化然后提供访问,减少DB的负担

(2)减少页面的size

(3)砍掉无用的请求,无用的数据传输

(4)对数据做异步处理,事情分为多步,先完成优先级高的事情

(5)智能DNS及CDN加速,让响应数据里用户更近,回避缓解网络瓶颈

leip与mysql数据库_性能分析方法 - osc_xm8bu282的个人空间 - OSCHINA - 中文开源技术交流社区...相关推荐

  1. mysql v8 漏洞_mysql'密码安全 - osc_v8gts6gd的个人空间 - OSCHINA - 中文开源技术交流社区...

    MYSQL数据库的安全配置 MYSQL密码的修改与恢复 MYSQL数据库密码的修改 Mysql5.7以下默认root登录密码为空,安装完成之后首先需要修改root的登录密码. # mysqladm – ...

  2. gogs mysql 报错_Gogs服务搭建 - osc_2ltf3y0p的个人空间 - OSCHINA - 中文开源技术交流社区...

    Gogs 安装教程(最简单版) 简介 Gogs 的目标是打造一个最简单.最快速和最轻松的方式搭建自助 Git 服务.使用 Go 语言开发使得 Gogs 能够通过独立的二进制分发,并且支持 Go 语言支 ...

  3. mysql双活存储容量 TB_Mysql双活方案 - osc_fted3syf的个人空间 - OSCHINA - 中文开源技术交流社区...

    #### 说明 Mysql主主互备即为两个mysql的互为备份机 ##### Windows下安装步骤(Linux下步骤类似,基本就是装上mysql,然后修改配置来完成主从的设置) - step1.下 ...

  4. MySQL安装2出现Typical_Mysql安装 - osc_c7lpn2ge的个人空间 - OSCHINA - 中文开源技术交流社区...

    以下内容较长,请仔细阅读: 1.首先进入安装界面,按"Next"继续: 2.选择Custom,有Typical(默认).Complete(全装),一般根据选择安装自己的MySQL, ...

  5. mysql慢sql分析平台_慢SQL分析工具 - __KK的个人空间 - OSCHINA - 中文开源技术交流社区...

    分析mysql日志的工具: mysqldumpslow mysqlbinlog myprofi mysql-explain-slow-log mysql-log-filter pt-query-dig ...

  6. mysql连库串_数据库连接串整理 - osc_ac5z111b的个人空间 - OSCHINA - 中文开源技术交流社区...

    常用JDBC驱动与连接字符串 MySQL driver:com.mysql.jdbc.Driver url:jdbc:mysql://localhost:3306/mydb MySQL url格式:j ...

  7. 大数据系列的默认端口_各大数据库默认端口 - 感觉太煽情的个人空间 - OSCHINA - 中文开源技术交流社区...

    一 :Oracle 驱动:oracle.jdbc.driver.OracleDriver URL:jdbc:oracle:thin:@<:port>:dbname 注:machine_na ...

  8. mysql里面除号写法_MySQL常见函数 - osc_mgt0rm0m的个人空间 - OSCHINA - 中文开源技术交流社区...

    概念:函数类似于java的方法(将实现某个功能的逻辑语句封装到方法中,对外暴露一个公开的名字,就是方法名). 好处: 1.隐藏类具体功能的实现细节 2.提高代码的重用性 调用: SELECT 函数名( ...

  9. mysql部署练习_MySQL主从练习 - osc_b9r67jnt的个人空间 - OSCHINA - 中文开源技术交流社区...

    1.按照1核CPU.4G内存.40G硬盘创建两台名为node-1和node-2的云主机. 2.在公有云中完成一个名为intnetX的内部网络为192.168.X.0的云主机网络区域配置,将该网络网关设 ...

最新文章

  1. DeepCut及DeeperCut:基于Tensorflow的人体姿态估计
  2. UVa 11520 Fill the Square 填充正方形
  3. php数组全排列,元素所有组合
  4. 【web安全】Xss Exploits and Defense翻译2
  5. 文件系统raw什么意思oracle,raw扫盲
  6. 华为c语言编程规范_C语言编程规范
  7. 借力IBM 贵州移动搭建云计算民生服务平台
  8. C/C++排序算法(1)直接插入排序
  9. 工具箱锁打不开了怎么办_木门门锁坏了怎么办?维修小技巧在手不发愁
  10. 怎么把php写入文件格式,如何将一个PHP数组有格式的写入文件中
  11. Shiro 支持三种方式的授权
  12. 使用jQuery+huandlebars遍历中if判断
  13. 累次积分怎么计算_【高等数学】二重积分化累次积分方法
  14. flutter友盟统计
  15. NanUI 无边框拖拽
  16. 项目集管理-PgMP
  17. 联想拯救者y空间_锐龙H真给劲儿 联想拯救者R7000 2020首测
  18. git从本地仓库更新项目到远程仓库指定分支
  19. UE4 关卡蓝图实现开关门
  20. 导进去然后这边就报错了 看修改也看不懂

热门文章

  1. 网站被k的症状原因有哪些-怎么恢复
  2. SAX EntityResolver 的作用
  3. NAT、远程访问和站点间***集成
  4. PHP仿百度实现弹窗登录效果,js仿百度登录页实现拖动窗口效果
  5. cordova指定版本_cordova 插件的安装和删除
  6. python安装方法_听说你安装Python包很慢,试试这个方法
  7. java nio connect_服务器或客户端上的Java NIO套接字在什么时...
  8. objective-c 2.0编程语言,Objective-C 2.0编程快速上手 EXE版[12MB]
  9. java适应性自旋锁_深夜!小胖问我,什么是自旋锁?怎么使用?适用场景是啥?...
  10. UAT测试的带队经验