品味性能之道<二>:性能工程师可以具备的专业素养
- 程序语言原理,包括:C、C++、java及jvm、ASP,因为建站大部分外围应用和中间件都是JAVA编写,大部分的电商平台采用的ASP编写,底层核心系统是C/C++编写;
- 数据库管理和性能优化,数据库永远的性能要点,包括:传统的关系型数据库oracle、db2、mysql、sql server等,更有对象型新贵数据库mongodb、hadoop、Cassandra等;
- kernel的实现(比如内存管理、文件系统、系统调用、线程与进程管理),如果不熟悉kernel,确实很难在底层系统的性能测试上有所建树;
- 前端html、css、javascript、flash等技术,懂得浏览器加载原理以及优化策略;
- 主要硬件知识,特别是存储相关,这块主要是受国外Percona公司的Peter和Vadim影响,他们能成为世界公认的mysql性能专家,他们熟悉mysql源码当然很重要,但也与他们那非常渊博的底层硬件知识是分不开的;
- linux管理和shell编程,shell的熟练决定了工作效率;
- 至少一种性能测试工具,不止使用,更包括原理与如何改造扩展;
- 一种脚本语言ruby、perl、python,快捷构建各种性能所需小工具有利于提升工作效率;
看懂程序的性能
- 执行速度:程序的反应是否迅速,响应时间是否足够短;
- 内存分配:内存分配是否合理,在一般应用场景中是否过多地占用内存或者存在泄漏,在批处理应用场景中是否尽可能的占用内存或者存在泄漏;
- 启动时间:程序从运行到可以正常处理业务需要花费多长时间;
- 负载承受能力:当系统压力上升时,系统的执行速度、响应时间的上升曲线是否平缓(也可叫做性能拐点);
性能的参考指标
- 执行时间:一段代码从开始运行到运行结束,所使用的时间;
- CPU时间:函数或者线程占用CPU的时间;
- 内存分配:程序在运行时占用的内存空间;
- 磁盘吞吐量:描述I/O的使用情况;
- 网络吞吐量:描述网络的使用情况;
- 响应时间:系统对某用户行为或者事件做出响应的时间。响应时间越短,性能越好;
木桶原理与性能瓶颈
- 磁盘I/O:由于磁盘I/O读写的速度要比内存慢很多,程序在运行过程中,如果需要等待磁盘I/O完成,那么抵消的I/O操作会拖累整个系统;
- 网络带宽:对网络数据进行读写的情况与磁盘I/O类似。由于网络环境的不确定性,尤其是对互联网上远端数据的读写,网络速度可能比本地磁盘I/O更慢。因此,如不加特殊处理,也极有可能成为系统瓶颈;
- CPU:对计算资源要求较高的应用,由于其长时间、不间断地大量占用CPU资源,那么对CPU的争夺将导致性能问题。如科学计算、3D渲染等对CPU需求旺盛的应用;
- 异常处理:对Java应用来说,异常的捕获和处理时非常消耗资源的。如果程序高频率地进行异常处理,则整体性能便会有明显下降;
- 数据库:大部分应用程序都离不开数据库,而海量数据的读写操作可能是相当费时的。而应用程序可能需要等待数据库操作完成或者返回请求的结果集,那么缓慢的同步操作将成为系统瓶颈。
- 锁竞争:对高并发程序来说,如果存在激烈的锁竞争,无疑是对性能极大的打击。锁竞争将会明显增加线程上下文切换的开销。而且,这些开销都是与应用需求无关的系统开销,白白占用宝贵的CPU资源,却不带来任何好处。
- 内存:一般来说,只要应用程序设计合理,内存读写速度上不太可能成为性能瓶颈。除非应用程序进行了高频率的内存变换和扫描,但这些情况比较少见。使内存制约系统性能的最可能的情况是内存大小不足。与磁盘相比,内存的大小似乎小的可怜,这意味着应用软件只能尽可能将常用核心数据读入内存,这在一定程度上降低了系统性能。
JAVA performance把应用中代码引起的性能问题分为以下几类
- 低效的算法、数据结构
- 锁竞争
- 低效的代码
Amahl定律










浅析CPU资源
- 用户态
- 系统态资源消耗
在linux下使用top命令查看cpu消耗,top命令使用的一些tips:
给出当前服务器时间,启动时间,当前登录用户,以及系统负载情况。需要注意的是linux的系统负载是以1分钟、5分钟和15分钟内的平均值 来衡量的。
列出系统进程任务情况分别如下:
- total指的是系统总共250个进程;
- running指的是1个进程处于运行状态;
- sleeping指的是249个空闲进程;
- stopped指的是0个停止进程;
- zombie指的是0个僵尸进程。僵尸进程指的是子进程退出后父进程并没有处理子进程的退出信号,导致子进程变为僵尸进程。
给当前CPU的工作情况分别如下:
- %us(user)指的是cpu用在用户态程序上的时间;
- %sy(sys)指的是cpu用在内核态程序上的时间;
- %ni(nice)指的是用在nice优先级调整过的用户态程序上的时间;
- %id(idle)指的是cpu空闲时间;
- %wa(iowait)指的是cpu等待系统io的时间;
- %hi指的是cpu处理硬件中断的时间;
- %si指的是cpu处理软中断的时间;
- %st(steal)用于有虚拟cpu的情况,用来指示被虚拟机偷掉的cpu时间;通常idle值可以反映一个系统cpu的闲忙程度。
品味性能之道<二>:性能工程师可以具备的专业素养的更多相关文章
- 高级PHP工程师所应该具备的专业素养
初次接触PHP,就为他的美所折服,于是一发不可收拾. 很多面试,很多人员能力要求都有“PHP高级工程师的字眼”,如果您真心喜欢PHP,并且您刚起步,那么我简单说说一个PHP高级工程师所应该具备的,希望 ...
- 品味性能之道<九>:利用Loadrunner编写socket性能测试脚本简述
一.概述 Loadrunner拥有极为丰富的工具箱,供予我们制造出各种奇妙魔法的能力.其中就有此次要讨论的socket套接字操作. 二.socket概述 ...
- 品味性能之道<十一>:JAVA中switch和if性能比较
通常而言大家普遍的认知里switch case的效率高于if else.根据我的理解而言switch的查找类似于二叉树,if则是线性查找.按照此逻辑推理对于对比条件数目大于3时switch更优,并且对 ...
- 品味性能之道<十>:Oracle Hint
Hint 是Oracle 提供的一种SQL语法,它允许用户在SQL语句中插入相关的语法,从而影响SQL的执行方式. 因为Hint的特殊作用,所以对于开发人员不应该在代码中使用它,Hint 更像是Ora ...
- 品味性能之道<八>:Loadrunner关联技巧与字符处理
一.概述 Loadrunner作为HP出品的性能测试工具,拥有太多奇妙魔法甜点供予性能测试人员享用,其中吃起来比较有嚼劲的那就是关联了.当然在关联之后我们还需要一些简单的字符处理,用以生成 ...
- 品味性能之道<七>:索引基础
一.索引概述 索引(index),它是数据库必不可少的一部分.它其实很简单呐!很好理解. 索引好比如一本书的目录,一张地图,一个写字楼里挂在大堂墙上的公司名录,一个地铁站的出口指示 ...
- 品味性能之道<六>:图形化SQL分析工具
在上一章里,重点分享了命令行SQL分析工具的使用方法.在本章将重点分享PL/SQL的SQL分析工具. 一.如何打开PL/SQL执行计划 开启PL/SQL这工具,推荐如下方法: 点击 ...
- 品味性能之道<五>:SQL分析工具
一.SQL语句到底是怎么执行的? 想了解SQL语句到底是怎么执行的,那就需要进行SQL语句执行计划分析. 那什么是SQL语句执行计划呢? 就是Oracle服务器执行SQL语句的过程.例如确定是否使用索 ...
- 品味性能之道<三>:方法论
自顶向下的性能优化方法论 系统优化是包括系统设计.开发.产品上线.平台优化的全过程,不同阶段的优化工作对全系统所带来的效益是不同的.理想的性能优化论应该采用自顶向下的优化方法,即在项目设计.开发和上线 ...
随机推荐
- QT中使用自己定的类和Vector出现错误
关于QT自定义类不能调用问题: 在Main()函数里面一定要定义include“XXX.cpp”include“XXX.h”,具体原因我也不知道为什么这样定义,是在一个贴吧看见的,弄了好久才解决. 第 ...
- 练习Laravel Homestead的安装
1 安装VirtualBox和Vagrant 在启动Homestead环境之前,你必须安装VirtualBox(https://www.virtualbox.org/wiki/Downloads)和V ...
- windows,linux,esxi系统判断当前主机是物理机还是虚拟机?查询主机序列号命令
参考网站:https://blog.csdn.net/yangzhenping/article/details/49996765 查序列号: http://www.bubuko.com/infodet ...
- hive 上篇
hive 是以hadoop为基础的数据仓库,使用HQL查询存放在HDFS上面的数据,HSQL是一种类SQL的语句,最终会被编译成map/reduce,HSQL可以查询HDFS上面的数据:不支持记录级别 ...
- c++Builder XE6 MD5 加密算法 BASE64 URL 编码
xe6,xe7 BASE64XE6 MD5 加密算法Delphifunction MD5(const texto: string): string; var idmd5: TIdHashMessage ...
- Spring MVC 重定向
@RequestMapping("/testRedirect") public String testRedirect(){ System.out.println("te ...
- JS、CSS以及img对DOMContentLoaded事件的影响
最近在做性能有关的数据上报,发现了两个非常有意思的东西:Chrome开发者工具的Timeline分析面板,以及DOMContentLoaded事件.一个是强大的令人发指的性能分析工具,一个是重要的性能 ...
- c++ cout cin, 命名空间
cout<<a<<endl; cout<<a; 返回值其实就是一个输出流,(cout就是输出流) 上述语句等价于(cout<<a)<<end ...
- mysql插入json数据
data_dict = {"a":1, "b":2} data_json = json.dumps(data_dict) data_escape = MySQ ...
- C++析构函数的自动调用问题
首先要明确一点,系统只会自动释放栈内空间,而堆内空间需要用户自己维护. C++中,除了new来的空间存放在堆内,其他均存放在栈中. 当单纯的创建对象的时候,对象存放在栈中,此时在程序块的}后面,系统会 ...