第七周作业总结
作业
使用命令:node index.js --url https://baidu.com/ --con 10 --number 100
学习总结
性能优化的前提是先做性能测试,建立基线,之后才可以得知问题所在进行优化。
性能测试
性能测试关注指标
响应时间:从请求发出到最后响应数据收到所需要的时间。
并发数:系统能同时处理请求的数字,相当于同时提交请求的用户数目。
吞吐量:单位时间内系统处理的请求数量。请求数/秒 或者 页面数/秒。TPS、QPS 、HPS(每秒 HTTP 请求数量)。关系:吞吐量 =(1000/响应时间ms)* 并发数
辅助指标:System Load、线程数、进程数、内存、CPU、磁盘和网络 IO
性能测试方法
性能测试:模拟请求,施加压力,查看是否可以满足预期。
负载测试:加大压力直到能力开始下降,得到临界值。
压力测试:超过安全负载的压力,直接压到崩溃,获得最大压力承受能力。
稳定性测试:长期的进行测试,来观察长期的稳定性。压测只能持续数分钟。
性能优化
性能测试,获取性能指标和当前状态
分析指标,发现瓶颈
分层分析,寻找性能和瓶颈的关键所在
针对性优化和处理
性能测试,继续循环
分层分析
可以将业务流程针对不同层次进行分层,然后在分析数据的时候分别进行思考和 check,从而发现是否存在问题。常见的层次:
机房和网络:宽带等,针对全球业务建立跨地区机房
服务器和硬件:硬盘、内存、CPU、网卡等,网络传输遇到瓶颈可以更换网卡升级内部宽带
操作系统:Linux、Windows 以及各种版本的差异和系统级配置,查看系统对 CPU 的占用等
虚拟机:JVM 等程序运行环境,一些 GC 逻辑等可能会产生阻塞
基础组件:Web 服务器等,基础组件的升级可以无需改动业务代码带来相应提升
软件架构:框架等,具体看框架的实现,有的框架天生就是为了高性能而研发的,当然更快
软件代码:业务逻辑,主要通过缓存、异步和集群进行优化,需要添加相应的逻辑和组件
操作系统
程序代码会放在磁盘上,属于死代码。当需要执行的时候,操作系统会创建一个进程然后加载进入执行,同时会在内存中创建堆内存、栈内存等存储执行。
进程会不断被分配 CPU 时间片来执行。同时进程也有几种状态:运行、就绪、阻塞。
进程 VS 线程
切换进程的消耗比较大,因此服务器主要使用单进程多线程的模式来实现,开销会小一些。
线程会共享进程的内存地址空间,拥有自己的私有内存地址范围,有自己的堆栈从而有自己的作用空间,互不干扰。
线程栈溢出通常是两种情况:栈就是太小了 或者 递归死循环了。
版权声明: 本文为 InfoQ 作者【于江水】的原创文章。
原文链接:【http://xie.infoq.cn/article/4843b332268f52e8aad0a7b74】。未经作者许可,禁止转载。
评论