性能优化

APP

2018-03-30 00:45:23

性能测试包括:启动时间、内存溢出泄漏、CPU、磁盘、耗电量、网络流量、流畅度、版本等

启动时间测试方法:1.adb命令.。2录屏工具按帧播放。3代码打点输出日志。

 

 

 

Web

性能优劣的影响,小到一个字符串的拼接,大到各个系统的调节。

性能优劣的影响有:数据库的查询语句不太好,磁盘的I/O不太好,响应(应答的快慢)(响应变快则吞吐则变大),吞吐(处理数量的多少)

 

当有大量请求涌入时,可以先将其放入队列,使其按到达顺序排序等待,如果你访问网站需要稍等片刻才会显示出画面。这种情况就是处理被放入到了某一个队列中。队列也会极限,也会溢出。有时候比起把失效的请求暂存起来,直接将其判定为错误会让系统整体更健全。(如果你在队列中请不要按刷新,那样你会从新排队)

如果队列的数据丢失会比较麻烦的话存在于DB或文件中。

 

性能分析从测量开始

sar信息(sar是一个优秀的一般性能监视工具,sar可以显示CPU、运行队列、磁盘I/O、分页(交换区)、内存、CPU中断、网络等性能数据)

 

什么是“锁”?DB的“行锁”“表锁”“java的锁”等,除此之外,还有“CPU的命令级别的锁”“OS内部的锁”“DB内部的锁”等,锁无处不在。
锁是插入数据或步骤顺序的限制。

如果对DB的表枷锁,并执行SQL语句,那么让SQL处理尽快完成,就能减少占有锁的时间。

另外还有一种分割锁的方法,不对DB的表加锁,而是对行加锁执行SQL语句,这样就能并行执行了。通过细化分割锁的方法,能减少等待时间。

锁的CPU指令(很少用到,一般不会直接使用到,有兴趣可以查一下“Test and Set”"Compare and Swap"等术语)

 

 

 

sql数据库要有主键,但不能滥用,一个表最多6个主键,查询使用二分法、树结构的方法去查找可以提升N倍。

 

在实际环境中,有的系统偏重于响应。有的系统偏重于吞吐。偏重于响应是一剂万能药。好比一个人,吃的快了(响应),那么食物进出的也就多了。

互联网上的热门网站,应该都被设计成访问很集中,响应也不会变慢,像这种高并发处理的系统称为“偏重吞吐的系统”。

在考虑性能时,要经常有意识地思考一下系统是偏重于响应,还是偏重于吞吐

 

 

 

进程是资源分配的最小单位,线程是CPU调度的最小单位

一个进程的开销大约是一个线程开销的30倍左右

参考文章:http://blog.chinaunix.net/uid-25515119-id-5099624.html

 

对比维度

多进程

多线程

总结

数据共享、同步

数据共享复杂,需要用IPC;数据是分开的,同步简单

因为共享进程数据,数据共享简单,但也是因为这个原因导致同步复杂

各有优势

内存、CPU

占用内存多,切换复杂,CPU利用率低

占用内存少,切换简单,CPU利用率高

线程占优

创建销毁、切换

创建销毁、切换复杂,速度慢

创建销毁、切换简单,速度很快

线程占优

编程、调试

编程简单,调试简单

编程复杂,调试复杂

进程占优

可靠性

进程间不会互相影响

一个线程挂掉将导致整个进程挂掉

进程占优

分布式

适应于多核、多机分布式;如果一台机器不够,扩展到多台机器比较简单

适应于多核分布式

进程占优


 Web服务器访问Access Log日志
 java和C在log4j等描述日志输出,概要信息通过Profiler获取,java通过Sun java VM中的VisualVM,HotSpot VM有一个名为Flight Recorder的工具能记录详细的日志进行Profiler
 
 
 

posted on 2018-03-15 00:54  Zing_Z  阅读(196)  评论(0)    收藏  举报

导航