性能优化
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
浙公网安备 33010602011771号