标签:repo 轻量级 注意 lock 文件系统 redis 吞吐量 位置 流量
2019-07-21 09:49:25 by冲冲
计算机的体系结构主要包括三部分:硬件、操作系统、应用程序。其中,硬件有CPU、内存、硬盘等;操作系统有进程、虚拟内存、文件系统、内核等;应用程序有Apache、MySQL、Nginx、Memcahed等。
性能调优就是对计算机硬件、操作系统和应用程序有相当深入的了解,调节三者之间的关系,实现整个系统(包括硬件、操作系统、应用程序)的性能最大化,并能不断的满足现有的业务需求。
性能优化通常着重考虑对操作系统和应用程序的调优。
(1)无论是租用服务器还是够买服务器,都需要选择服务器的硬件配置。选择依据主要是服务器的应用类型,也就是服务器的业务需求。
(2)硬件的性能调优主要包括两方面:
① 参数调优:《Linux Performance Tuning》(Linux 性能调优)指出,厂商发布的OS,通过保守的默认配置,能够兼容市场绝大部分计算机。但是你可以调节OS的配置参数来获得更高的性能,比如你有个高性能的磁盘,但是如果你的操作系统中一些选项参数默认没有启动的话,就不能实现这些高级功能来提高硬盘性能。
② 版本选择:RedHat、CentOS等操作系统在项目实施或网站架构中较多使用,它们是针对企业级应用而开发的操作系统。而Ubuntu之类的操作系统对桌面支持得比较好,所以选择发行版本时得注意(一般企业中用的比较多的是CentOS)。再有就是我们一般不要选择最新的发行版,因为刚出来的发行版相对来说bug还比较多,不要先当“小白鼠”了。比如:刚刚出来CentOS 7 等过一段时间稳定了再使用,目前我们可以选择 CentOS 6.4 或 6.5即可。但是新版本也有很多好处,新版本中加入了很多新功能,去掉许多已知bug,对于一些不重要的应用,可尝试使用新的操作系统。
应用程序的调优对象通常是Apache、Nginx、MySQL。
(1)MySQL的调优
① Buffer:缓解应用系统上下层组件之间的性能差异,比如通常的 IO Buffer。
② Cache:通常用于读多写少的情况,也是用来缓解应用系统上下层组件之间的性能差异。比如,应用 local cache,Memcached/Redis。
③ Batch:网络或磁盘里的批量操作,通过合并小任务或小请求为大任务大请求,来提升数据传输效率低。比如 TCP 中的 nagle 算法,就是通过合并多个小分组来提升网络传输效率的。
④ Pool:通过减少对象创建,连接建立的开销来提升性能。比如线程池,连接池,对象池。
⑤ Concurrency:通过将串行改为并行,能过有效的降低系统延时。在多核系统中,并行处理才能提升 CPU 使用率。
⑥ Lock Less:多线程访问共享资源时,通常需要加锁。重量级的锁往往引起线程切换,而线程切换非常耗时。那么可以通过优化锁的使用来提升性能,优化锁有两种方法:
A. 通过减小锁的粒度,分离竞争点来减少竞争。比如 Java 里 HashTable 中锁的粒度是整个对象,ConcurrentHashMap 中锁的粒度只是一个 Segment。
B. 在竞争较少的情况下,使用轻量级锁来代替重量级锁,减少线程切换带来的性能消耗,比如自旋锁代替互斥锁。
性能优化是一个团队的事情。项目的开发流程主要是:
一个项目(业务)存在性能问题,不会只是运维部门需要性能调优而是所有部门一起解决该性能问题。因为需要调优的地方可能出现在产品,也可能出现在程序上(*.php),也可能是业务需要本身就有问题,也可能是运维的环境搭建有问题。但参加性能调优的更多的是开发、运维、测试和监控。
使用监控工具为性能调优提供数据,找出瓶颈。
硬件:
操作系统:
应用程序(MySQL):
A, 确定调优目标。首先,跟上司明确性能提升的数值(10%、20%、或者更大)。然后,各部门各司其职。通常填补开发部门的代码坑(例如优化SQL查询),性能的提升效率远高于优化OS。
B. 具体调优步骤:
C. 检测调优结果。每次性能调优后必须对性能进程检测,如Web服务器的ab工具,就是一个很好的检测工具,每次调优后都能看到具体的变化。
① 服务器性能监控
② 服务性能监控(MySQL)
参考:
https://blog.csdn.net/zenglinhua1/article/details/79047514
https://blog.csdn.net/hustspy1990/article/details/77834550
标签:repo 轻量级 注意 lock 文件系统 redis 吞吐量 位置 流量
原文地址:https://www.cnblogs.com/yadiel-cc/p/11220828.html