第七周作业总结
作业
使用命令: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】。未经作者许可,禁止转载。












 
    
评论