性能测试与优化学习总结
性能测试
性能测试是性能优化的前提和基础,也是性能优化结果的检查和度量标准。
主观:用户感受的性能客观:性能指标衡量的性能
性能测试指标
响应时间:发送请求到接收到响应的时间
并发数:能够同时处理的请求数
吞吐量:单位时间内系统处理的请求数
性能计数器:描述服务器或操作系统性能的一些数据指标
性能测试
性能测试
负载测试
压力测试
稳定性测试
两个原则
不能优化一个没有测试的软件不能优化一个不了解的软件
性能优化的一般方法
性能测试,获得性能指标
指标分析,发现性能与资源瓶颈点
架构与代码分析,寻找性能与资源瓶颈关键所在
架构与代码优化,优化关键技术点,平衡资源利用
性能测试,进入性能优化闭环
性能优化的分层思想
机房与骨干网络性能优化异地多活的多机房架构专线网络与自主 CDN 建设
服务器与硬件性能优化使用更优的 CPU,磁盘,内存,网卡
操作系统性能优化
虚拟机性能优化
基础组件性能优化
软件架构性能优化缓存异步集群
软件代码性能优化
操作系统
程序运行时架构
程序是静态的。程序运行起来之后称作进程。
多任务运行环境
进程的运行状态
运行:当一个进程在 CPU 上运行时,则称该进程处于运行状态。处于运行状态的进程的数目小于等于 CPU 的数目。就绪:个进程获得了除 CPU 以外的一切所需资源,只要得到 CPU 即可运行,则称此进程处于就绪状态,就绪状态有时候也被称为等待运行状态。阻塞:也称为等待或睡眠状态,当一个进程正在等待某一事件发生(例如等待 MO 完成, 等待锁…)而暂时停止运行,这时即使把 CPU 分配给进程也无法运行,故称该进程处于阻塞状态。
进程 VS 线程
线程栈线程安全
临界区多个线程访问共享资源的这段代码被称为临界区,解决线程安全问题的主要方法是使用锁,将临界区的代码加锁,只有获得锁的线程才能执行临界区代码
锁
锁原语 CAS
CAS(V,E,N)V 表示要更新的变量 E 表示预期值 N 表示新值
如果 V 值等于 E 值,则将 V 的值设为 N,若 V 值和 E 值不同,什么都不做。
CAS 是一种系统原语,原语的执行必须是连续的,在执行过程中不允许被中断。
偏向锁:指一段同步代码一直被一个线程所访问,那么该线程会自动获取锁,降低获取锁的代价轻量级锁:指当锁是偏向锁时,被另一个线程所访问,偏向锁就会升级为轻量级锁,其他线程会通过自旋的形式尝试获取锁,不会阻塞,提高性能重量级锁:指当锁是轻量级锁时,另一个线程虽然自旋,但自旋不会一直持续下去自旋到一定次数时,还没获取到锁,就会进入阻塞,该锁膨胀为重量级锁,重量级锁让其他申请的线程进入阻塞,性能降低
总线锁:使用处理器的 LOCK#信号,当一个处理器在内存总线上输出此信号的时候,其他处理器的请求将被阻塞,该处理器独占内存。緩存锁:是指内存区域如果被缓存在处理器的缓存行中,并且在 LOk 操作期间被锁定那么当它执行锁操作回写到内存时,处理器不在总线上声言 LOCK 信号,而是修改内部的内存地址,并允许它的缓存一致性机制来保证操作的原子性,因为缓存一致性机制会阻止同时修改由两个以上处理器缓存的内存区域数据,当其他处理器回写已被锁定的存行数据时,会使缓存行无效。
公平锁就是多个线程按照申请锁的顺序来获取锁的。非公平锁就是多个线程获取锁的顺序并不是按照申请锁的顺序,有可能后申请的线程比先申请的线程优先获取锁,可能会造成饥饿现象。可重入就是说某个线程已经获得某个锁,可以再次获取锁而不会出现死锁。独享锁互斥锁:该锁一次只能被一个线程所持有共享锁:该锁可以被多个线程所持有读写锁:多个读线程之间并不互斥,而写线程则要求与任何线程互斥悲观锁认为对于同一个数据的并发操作,一定是会发生修改的,哪怕没有修改,也会认为修改。因此对于同一个数据的并发操作,悲观锁采取加锁的形式。悲观的认为,不加锁的并发操作一定会出问题。乐观锁则认为对于同一个数据的并发操作,是不会发生修改的。在更新数据的时候,检查是否已经被修改过,如果修改过,就放弃。分段锁的设计目的是细化锁的粒度,当操作不需要更新整个数组的时候,就仅仅针对数组的一段进行加锁操作。自旋锁是指尝试获取锁的线程不会立即阻塞,而是采用循环的方式去尝试获取锁,这样的好处是减少线程上下文切换的消耗,缺点是循环会消耗 CPU。
文件系统
文件控制块
文件系统将硬盘空间以块为单位进行划分,每个文件占据若干个块, 然后再通过一个文件控制块 FCB 记录每个文件占据的硬盘数据块。
inode
inode 中记录着文件权限所有者、修改时间和文大小等文件属性信息,以及文件数据块硬盘地址索引
版权声明: 本文为 InfoQ 作者【qihuajun】的原创文章。
原文链接:【http://xie.infoq.cn/article/78e3221e80ae337e7fc829fa0】。文章转载请联系作者。
评论