品味性能之道<二>:性能工程师可以具备的专业素养
- 程序语言原理,包括: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语句的过程.例如确定是否使用索 ...
- 品味性能之道<三>:方法论
自顶向下的性能优化方法论 系统优化是包括系统设计.开发.产品上线.平台优化的全过程,不同阶段的优化工作对全系统所带来的效益是不同的.理想的性能优化论应该采用自顶向下的优化方法,即在项目设计.开发和上线 ...
随机推荐
- tornado-输入
获取输入的信息: *** get_argument get_arguments 兼顾以下两种常用 能从url中获取 ?name=xiaoming 能从body中获取 form表 ...
- 代码: js日期
日期格式化 (new Date()).Format("yyyy-MM-dd hh:mm:ss.S") ==> 2015-11-16 08:09:04.423 (new Dat ...
- Appium清空EditText
在使用appium过程中,发现sendkeys和clear方法并不太好使,封装模拟手工一个一个删除 这里用到keyEvent,具体内容请参考api http://appium.github.io/ja ...
- windows自带杀毒防火墙
windows自带杀毒防火墙 Windows Defender FireWall
- 18 subprocess模块(跟操作系统交互)
1.基本概念介绍 我们经常需要通过Python去执行一条系统命令或脚本,系统的shell命令是独立于你的python进程之外的, 每执行一条命令,就是发起一个新进程,通过python调用系统命令或脚本 ...
- centos sendmail 启动慢
from:http://www.cnblogs.com/kerrycode/p/4717498.html 在 CentOS release 6.6 上启动sendmail服务时发现服务启动过程非常慢, ...
- nginx 无法访问root权限的文件内容
问题: 按照的nginx,nginx配置的user 是 nginx,nginx 是root用户启动的. 文件夹A放的那啥是root用户上传的文件. 可 nginx 无法访问 到 文件. 方法: ...
- xStream转换XML、JSON
一. 简介 xStream可以很容易实现Java对象和xml文档互相转换, 可以修改某个特定的属性和节点名称,xStream提供annotation注解, 可以在JavaBean中完成对xml ...
- input:file属性
1.accept 只能选择png和gif图片 <input id="fileId1" type="file" accept="image/png ...
- ContextLoaderListener和Spring MVC中的DispatcherServlet学习
DispatcherServlet介绍 DispatcherServlet是Spring前端控制器的实现,提供Spring Web MVC的集中访问点,并且负责职责的分派,与Spring IoC容器无 ...
.jpg)
