Performance

压力测试中几种不同的”压力“

1. 请求的数据量大小(字节数) 2. 每秒请求数    a. 短连接应用:不必多说    b. 长连接应用:大量连接建立请求 3. 在线数    a. 短连接应用:Session数    b. 长连接应用:维持的长连接数(socket数) 4. 留存数据量: 数据库里已有的数据量 待续。。。

压力测试要测久一点才有意义

压力测试要测久一点才有意义。 有些系统指标,比如cpu load, 会随着测试的执行而逐渐变高。跑完60秒后发现单核load仍低于1就宣布压测通过,这是不对的。 那要在什么情况下才停止执行? 一般来说,可以等到系统指标稳定到一个值,或者系统指标超过了你心目中的安全权限(比如单核load>2)

同事教了一个评估所需qps的办法

互联网应用中,业务方最容易给出的评估指标是UV 我们就是要根据UV推导出系统应该具备的极限峰值 推导过程是:   1. 根据UV估计出PV,一般可以乘10   2. 确定峰值访问的时间长度(比如说中午那个小时),及这个时间段流量占全天流量的比例,从而得出这个时间段内的PV   3. 用这个PV数除于峰值时间段的跨度(单位秒),即得QPS 当然,QPS满足了要求未必就意味着性能达标了。你还要考虑并发数。经验上,可以使用25(当然未必普适)并发数作为极限并发数,然后再测一下在这个并发数QPS能否达到上面推导出的值。 p.s. 为了确定极限并发数,也可以逐渐提高并发数,依次进行性能测试;然后查看性能曲线(如qps,具体视情况而定),直到性能曲线下降为止。

CPU的us和sy高对于JAVA应用来说分别意味着什么?

以下内容来自林昊的《分布式JAVA应用》 us高代表用户态程序占CPU的比例较高 sy高代表内核态程序占CPU的比例较高 对java应用来说, us高一般是因为    1. 有些线程一直处于可运行状态,比如使劲循环    2. CPU密集型操作太多,比如正则运算    3. 频繁GC sy高一般是因为线程上下文切换过于频繁。而切换过多,一般是由于过多阻塞导致的,包括锁等待、I/O阻塞等,一个线程的阻塞会导致CPU让另一个线程上位,即上下文切换。 p.s. sy高跟系统调用过多也会有关系

听了一场跟Flash存储有关的演讲

没有全部听懂,但有段关于latency的内容记住了:   1. 内存的latency: 纳秒级   2. 普通硬盘:    毫秒级   3. Flash存储:      微秒级 也就是说,Flash存储的性能虽比不上内存,但比普通硬盘强太多了; 有的I/O密集型应用如数据库,如果对某些数据使用Flash存储,对性能的提升会非常明显。 

《构建高性能Web站点》笔记:10 异步计算与并行计算

要解决的问题:并发能力没问题,但处理单个请求比较耗时,比如,获得一个统计值需要查多次数据库导致很长的响应时间   解决办法:      1.同步改异步,给用户的反馈也改成异步         前端程序把任务丢到后台消息队列后,立即告诉用户:“正在为你统计,请稍候刷新页面”         消息队列的消费者,即worker,在算出统计值后,再把结果丢进数据库         用户刷新页面时,前端程序去数据库查询到结果,再反馈给用户         这就叫异步计算         2.串行变并行,减少总体响应时间,用户可以同步等待反馈         把任务拆分成多个小任务,后台多个worker各领一个小任务并同时处理,响应时间立刻缩短         并行处理完后,再将结果合并起来,返回给用户         如果总体时间够短,对用户的反馈机制就没必要做成异步;用户可同步等等反馈          这叫做并行计算   具体技术:      1. 同步改异步:用消息队列,如MemcacheQ      2. 并行计算:采用Map/Reduce         a. Map代表拆分,Reduce代表汇总         b. 兼做监控、容错、可用性、负载均衡等事情         c. Map/Reduce框架本身不是开放的(Google的内部产品),但思想是开放的;你可以用Hadoop来做Map/Reduce, 也可以自己编码实现

《构建高性能Web站点》笔记:11 性能监控

性能监控   1.要监控什么?   a. linux服务器的性能指标:如cpu,内存,I/O等,可以使用nmon, snmp等工具或手段   b. 各种服务的性能:    i.apache: mod_status模块 + 模块提供的http请求接口    ii.mysql: Cacti, mysqlreport等    iii.Memcached: Nagios等   c. web页面的响应时间  通过工具模拟浏览器从外网访问你的一些页面,如www.jiankongbao.com就提供了这样的服务     2.在哪里查看监控结果?       a.服务器上直接查看    可以用Nmon在本地实时监控,实时刷新各种指标,包括内核状态、NFS等;也可以定期采集数据,并通过Nmon Analyser生成报表       b.远程监控:     i.服务器上运行监控代理,在其他机器上另建监控中心与代理交互    ii.可以让代理主动采集数据,定期上报给监控中心   iii.也可以让代理被动响应数监控中心的请求    iv.代理采集数据的方式有:      1. 调用shell命令,获得输出,基于正则表达式进行解析      2. 可以把SNMP服务器直接用作监控代理      3. 有些服务端软件自己提供了监控接口,如Nginx就提供了一个http请求接口     v.监控中心可以用开源产品Cacti来搭建,它的绘图能力很强