存档

文章标签 ‘性能调优’

阿姆达尔定律(Amdahl’s Law)

2016年5月6日 1,287 views 没有评论

阿姆达尔定律是一个计算机科学界的经验法则,因IBM公司计算机架构师吉恩·阿姆达尔而得名。吉恩·阿姆达尔在1967年发表的论文中提出了这个重要定律。

阿姆达尔定律主要用于发现仅仅系统的部分得到改进,整体系统可以得到的最大期望改进。它经常用于并行计算领域,用来预测适用多个处理器时理论上的最大加速比。在我们的性能调优领域,我们利用此定律有助于我们解决或者缓解性能瓶颈问题

阿姆达尔定律的模型阐释了我们现实生产中串行资源争用时候的现象。如下图模型,一个系统中,不可避免有一些资源必须串行访问,这限制了我们的加速比,即使我们增加了并发数(横轴),但取得效果并不理想,难以获得线性扩展能力(图中直线)。

 

1

以下介绍中、系统、算法、程序可以认为都是优化的对象,我不加以区分,它们都有串行的部分和可以并行的部分。

在并行计算中,使用多个处理器的程序的加速比受限制于程序串行部分的执行时间。例如,如果一个程序使用一个CPU核执行需要20小时,其中部分代码只能串行,需要执行1个小时,其他19小时的代码执行可以并行,那么,不考虑有多少CPU可用来并行执行程序,最小执[……]

Read more

许多人没有理解透彻的一些基础概念

2015年2月8日 1,962 views 没有评论

基础概念的交流和理解一致,才有助于意识的沟通一致。才有助于意识层面的交流。

资源(resource)物理服务器的功能组件,一些软件资源也可以被衡量,比如线程池、进程数等。系统的运行,需要各种资源,对于资源列表的确定,我们可以凭借对系统的了解确定,也可以通过绘制系统的功能块图的方式确定要衡量的资源。

常见的物理资源如下,

CPU(cpu sockets)、CPU核(cores)、硬件线程(虚拟线程)hardware threads( virtual threads)

内存

网络接口

存储设备

存储或者网络的控制器

内部高速互联

 

负载(load):有多少任务正在施加给系统,也就是系统的输入,要被处理的请求。对于数据库,那么负荷就包括了客户端段发送过来的命令和查询。

负载如果超过了设计能力,往往导致性能问题。应用程序可能因为软件应用的配置或者系统架构导致性能降低,比如,如果一个应用程序是单线程的,无疑它会受制于单线程架构,因为只能利用一个核,后续的请求都必须排队,不能利用其他核,但也可能仅仅是因为负载太多了。负[……]

Read more

运维规则浅谈-8

2014年5月28日 2,740 views 没有评论

运维规则浅谈-8

定位瓶颈。

我们需要监控一切,这样我们才能预先发现系统的瓶颈。 对于一些资源的争用,通过监控系统就能够很直观的反应出来。而对于一些隐藏比较深的资源瓶颈,系统瓶颈,往往需要我们利用各种工具,靠经验去分析,判断。我们需要有意思的尽可能的通过监控系统去发现问题,让监控系统变得越来越智能,较少依赖于人的经验。

高级工程师和初级工程师有一个很大的区别,高级工程师知道如何去定位瓶颈所在。不仅知道如何使用工具,还知道何时、何地、为什么去使用工具,这样,他才有可能在问题爆发之前,就定位到瓶颈所在。 那么作为运维工程师,就有必要可以的去训练这种技能。自己测试/验证,wiki分享,组内分享都是可以考虑到方式。

定位瓶颈,还需要比较多的其他领域的知识,因为数据可能经过许多环节,如本地电脑、浏览器、dns服务、负载均衡设备、应用服务器等等。在熟悉自己的工具和领域外,了解其他领域大概有一些什么方法和工具是有帮助的。

InnoDB的IO优化

2014年5月9日 2,814 views 没有评论

    InnoDB的IO优化

突然要临处理线上数据库问题,等待的过程太久, 马马虎虎写了点对于IO的优化。

状态不佳,凌晨1点,要睡觉了。作为一个IT人,要切记充分锻炼、充分休息。

 

对于传统数据库的IO优化,一般有几个方向,如1, 减少数据库的写入。2,使用时间换空间,比如压缩。3,利用物理设备的空间时间 局部性(Locality)特征。4,把随机读写转换成顺序读写。5,缓存数据,一般传统数据库都有自己的buffer pool 。

以下简单说说具体的实现,Innodb的常用的参数、大家已知的定义、设置、作用我就不细说了。大家可以google下具体的参数作用。

减少page size    一些第三方版本早就实现了自定义的page大小,MySQL官方版本高版本才有提供此功能,低版本的话,你可以用源码编译的方式实现,如果不是追求极致的话,不建议源码编译的方式改变page size,因为可能没有经历过大规模的考验。InnoDB的压缩技术可以考虑用下,对效率和空间上取得平衡,一般16KB使用2倍压缩,8KB使用2倍压缩是可行的。

关闭 do[……]

Read more

运维规则浅谈-1

2014年1月20日 1,589 views 评论已被关闭

大一些的公司,可能有完善的性能模型,尽可能的进行容量/性能 预测。 而小公司,可能更多信任第三方的监控机制,并没有做到很好的性能规划。随着公司不断发展,容量模型是需要逐步建立的, 至于起到的效果几何,也需要有明晰的认识。切记,不要在容量/性能的高度压力下考虑优化,先扩容,把症状降低下来,然后考虑优化,往往是更靠谱的。

确保网络可用,网络在应用层软件和数据库软件的下一层,网络的不可靠,将直接影响到数据库/应用服务器的稳定和性能, 由于网络的复杂性,也必将导致应用软件的复杂,对此应该有清晰的认识。

不要因为解决问题,而在你的架构中引入“新的我问题“ 。对于核心架构/算法 的调整,往往导致异常,”回归测试“可以发现一些问题,但更多依赖于研发同学对于风险的认识,尽可能的解耦,否则调整的代价太大,引入的问题较多。

网络调优

2012年10月18日 736 views 没有评论

网络调优  参考 Linux Tuning Parameters

Network Tuning

Might be needed sometimes

•echo 8192 > /proc/sys/net/ipv4/tcp_max_syn_backlog

•MySQL: back_log=1000

•net.ipv4.ip_local_port_range=”1024 64000“

•net.core.somaxconn = 1024

•net.core.rmem_max = 16777216    Increase the maximum read buffer queue size

•net.core.wmem_max = 16777216   Increase the maximum write buffer queue size

•net.ipv4.tcp_rmem = 4096 87380 16777216

•net.ipv4.tcp_wmem = 4096 65536 16777216

•net.ipv4.[……]

Read more

分类: 操作系统, 硬件 标签:

性能优化的取舍

2012年6月4日 909 views 评论已被关闭

性能优化的取舍

1. 类似大名鼎鼎的CAP法则,性能优化也有一个取舍的法则。 good/fast/cheap 三选二。

2. 性能优化到何种程度,并不是判断/衡量正确错误与否的标准, 这取决于我们的投资回报。当成本太高时,不值得继续调优,在合适的时间,合适的地点,选择合适的人,以合适的成本切入,是需要仔细考量的。:)

系统性能的一些概念和指标

2012年5月22日 1,058 views 评论已被关闭

系统性能的一些概念和指标

IOPS:每秒的input/output操作次数。用来衡量数据传输/操作的速率。对于磁盘I/O,IOPS指得是每秒读写次数。

Throughput:吞吐率。完成工作的速率。在网络传输中,throughput指得是每秒传输的数据(字节或者 位)。在有些情况下(例如数据库),throughput可以指每秒操作数,每秒事务数。

Response time:响应时间。一个操作完成对时间。它包含了任何花在等待和服务的时间,包含传输结果的时间。

Latency:延时时间。延时用来衡量一个操作用来等待被提供服务的时间。某些情况下,也可以等同于响应时间(操作的所有时间)。

Utilization:利用率。对于处理请求的资源,利用率用来衡量资源忙的程度,在给定的时间内,有多少时间它是用来进行实际工作的。对于存储设备,利用率可以用来衡量空间的使用程度。

Saturation:饱和度。表征某项资源由于无法及时处理请求,排队请求的程度。

Bottleneck:瓶颈。在系统性能范畴,瓶颈指定是某项资源限制了整体系统的性能。标识和移除性能瓶颈是系[……]

Read more

关于性能测试/压力测试

2012年5月3日 923 views 评论已被关闭

叙述下性能/压力测试的一些注意事项:

1. 需要明白,干扰是必然存在的。 性能测试所处的环境可能不是干净的,即使较为干净了,但仍然可能有你所不知道的因素影响你的测试结果。干扰的来源可能不那么清晰,如果你需要仔细研究系统性能,你就需要确定它。对于一些云上的环境,由于你和其他用户共享资源,其他用户的活动可能影响到你,而你在一个客户环境内,很难知道物理系统的资源竞争。

2. 现在的应用环境,往往包含多个组件,如负载均衡软硬件设备、WEB服务器、数据库服务器、存储系统。有一够真实的模拟环境,可以及早发现干扰的源头。各个组件对照物理环境独立部署,不互相影响,可以更好确保测试结果的可靠。

3. 性能/压力测试,往往需要时间,见过许多测试报告,可能为了速度(大家时间都很紧张),往往没有测试足够多的时间。实际上,我们是需要足够的时间的,有足够的时间,数据才可能更符合生产情况,比如有”碎片“,N多性能测试,就是load数据,然后开始开测,但实际上,你应该尽量采取一些操作,让数据变得不那么“整齐”,比如在insert/update/delete数据的时候按随机的key顺序操作。 有“碎片[……]

Read more

文件系统缓存

2012年4月23日 1,375 views 评论已被关闭

文件系统缓存

filesystem cache

许多人没有意识到。文件系统缓存对于性能的影响。Linux系统默认的设置倾向于把内存尽可能的用于文件cache,所以在一台大内存机器上,往往我们可能发现没有多少剩余内存。(free命令显示的第二行输出,如下)。文件系统cache可以加速磁盘操作,使系统有更好的IO性能,代价只是把一些空闲的内存利用起来了。

我们需要预留多少内存做文件系统cache呢? 首先我们要理解“free”命令

             total       used       free     shared    buffers     cached
Mem:       2058824    1772172     286652          0     214708     879744
-/+ buffers/cache:     677720    1381104
Swap:      1048568         84    1048484

 

对于如上的命令输出,我们看下Mem 节,total列显示我们一共[……]

Read more