史应生:Linux操作系统的性能优化技术

史应生:Linux操作系统的性能优化技术 - blogxl - blogxl的博客 大家中午好,首先非常感谢大家在这个时间段还依然在这里支持我这个演讲。我想很多人已经在跟饥饿做斗争,所以我用很快时间,把我这个演讲结束。大家看到我这个题目的时候,可能在心里会有两个小小的疑问,第一个今天我们谈[url=javascript:;]PHP[/url],我们为什么会选用这么一个操作系统优化跟大家进行讲解。其实我在选演讲题目之前,我本来想把我在金融和电信领域一些好的架构上方案,给大家做一个分享。但是我看到今天的演讲嘉宾,有的在讲产品,有的在讲架构,所以我就想如何在我们一个好的架构下,我们已经选了一个好的产品大的前提下,从我们自己代码业务角度,应用的角度,我们基础架构的角度,还有我们操作系统,甚至我们硬件的角度做到更优的这种性能。 因为我们谈性能,我们不光是要这个性能跑的更快,我们还要考虑怎么样扩大我们性能的容量。我相信这个也是,现在我们比较缺的这么一个话题。第二我跟很多公司C级别的人聊过天,他们曾经跟我聊过,我们的环境已经搭建好了,我们的架构已经设计完了,能不能用半天的时间,或者一天的时间帮我们做一个性能优化。 我当然听了这句话的时候就很疑问,半天或者一天的时间,如何做到一个性能优化,可能我还做不到。还有看到一些很多研发人员,或者系统管理人员,当你们的老板说我们怎么样去做个优化,大家可能想到我怎么样去找几个参数,从Google上去搜索一下,看别人是怎么做的,然后驾到我的应用环境,我们的生产环境中就可以了。但是,这样做是不是可以。我跟很多聊过,我说你怎么样去做性能优化,性能优化应该包括什么东西,大家可能没有什么太大的想法。 而且我也看过很多我们[url=javascript:;]服务器[/url]生产环境,大家在上生产环境之后,基本上用的所有参数都是操作系统默认的,这些参数是不是针对你,比如某一个淘宝应用,某一个搜索引擎做的最优,我们应该是怎么样去想这个事情的。 第二这个问题,我们操作系统的性能调优,性能调优其实大家会有一个想法,你选的这个太大了,我承认这个题目确实太大了。我不知道大家有没有听过我技术方面的一些讲座,比如说操作系统一个TOP应用我可以给大家讲两个小时。今天我们简简单单用这30分钟,我们讲什么?我们只讲三个话题。第一个我们讲一下性能调优的方法论,如果你作为一个系统架构师,或者是一个程序员,或者是一个系统运维人员,当你给别人提到调优的时候方法是什么。 第二我们讲一下monitoring,性能调优一个最大前提要了解你的系统,所以监控是非常重要一部分。而且在整个系统调优过程当中,监控时间可能会占到70%-80%工作量。第三是我们给大家举两个简单例子,把大家引进门。我会讲两个很简单例子,一个是内存和IO这方面,让大家找到一个感觉,从性能调优这方面。 性能调优是什么?我们从维基百科上去看,就是一句话,我们如何增强系统的性能,我们跟很多国外黑客曾经聊过,他们给性能调优两个单词叫黑色的艺术,Black Art,黑色艺术里有很多东西看不到,里面要切入很多细节。性能调优一个目标要达到一个理想行为。但是,我们怎么样去达到我们理想行为,这里涉及很多因素,我会一一讲到。 性能调优我刚才说到在我们选一个好的架构,选一个好的产品之后,怎么样把你这些资源调配起来。比如说我们如何补偿硬件这种特性,性能调优也是如何发现,和把你整个系统架构中瓶颈发现,从而把它缩小。性能调优涉及到很多人为因素,比如说我们讲到性能调优,我们普遍会想到我们提高速度,但是大家知道,一个网站响应时间比人为感觉来讲,响应时间要比你网站运营速度要快,要更重要一些。 第二个我们看一下调优步骤,我们分成三大步,这是一个从很专业咨询角度跟大家分享三个经验。第一就是一个分析,第二是真正进行优化,最后一个是调优管理。我们有一个很好名词,叫PLA,如何做到分析?如果我们不理解自己时候不能做调优,没有任何意义,然后就是监控。第三点非常重要一点,我们有很多产品,今天我们也看到有很多嘉宾介绍他们自己的产品,我们如何知道你的产品和你的性能限制。 比如说[url=javascript:;]Linux[/url]某一个内核某一个版本支持最大是多少,性能最大是多少。还有一个大家要考虑,当我们出现问题的时候,老板要说我们做一个性能优化,但是我们首先要知道这个问题是不是真正的性能优化能够帮你解决的,是不是一个简单的配置错误。对性能了解之后,我们有一个分析之后就开始调,第一步我们要有一个Monitoring,我们要开发一种模型,分析一下性能调优有哪些因素。我们可以看一个调优基本原则,首先我们要给自己设计一个目标,我们性能优化是5%,还是50%,不能老板说今天你给我优化一下,我性能翻一倍,首先你要问他,然后我们要了解一下整个环境,环境不光了解你自己的开发代码,我还是要强调一下,从系统架构怎么去了解的。 我们要知道在优化的过程中,trade-off你必须要放弃一些东西来提高某一部分东西,还有监控他的负载。性能调优一次只能改一个参数,然后对修改之后结果进行分析,然后进行如果达到我们的目标,否则的话是不断循环,所以性能调优不能半天,或者一天完成。 最后,我们可以看到性能调优你要把你在整个工作过程中所有的文档,所有的过程要记录一下,这是一个很好的习惯。我们看如何搭建一个很好模型,我们谈架构,架构分几层,我大概总结一下,一个是业务层,应用层,OS,和基础架构,还有你的Hardware,我们要在调优之前对每一层做一个模型。 这里给大家举了一个例子,因为我们今天都是PHP高手,大家可能更关心的是应用。所以,我们就可以看到对一个应用来说,我们要涉及哪些应用,比如数据输入输出,还有我们日志。但是我们一谈日志要想到分成几部分,比如说它的增长率,日志的类型,大小限制,还有它的位置。跟应用相关的,我们在往左看,配置文件,硬件需求,因为我们开发应用要给我们体验者用,他SOA是什么样子,服务标准是什么样子,还有并发数什么样子,我们有一个好的模型之后才可以做下一步。 我刚才讲了监控,因为监控占整个调优大概60-80%。在这里我把操作系统级别几个工具给大家罗列了一下,分成几个大块。比如CPU,内存,Disk,大家看了这几个之后可能觉得不屑一顾,我们要掌握什么,这些工具使用是一方面,更重要对这些工具输出结果怎么进行一个很好分析。给大家举两个例子,我这里有一个vmstat,因为代表你操作系统启动,到你运行这个命令时间段的平均值,没有任何意义。 还有第二个例子,比如说我们有TOP应用,我这个值到达一个什么样级别的时候,我才对我的性能,我才关注这是第二个。第三个就是负载,对于不同CPU,对于多核,多现成,超现成分析结果是什么样子,所以你做一个什么样好的把握,这是我们性能调优工具上需要下的功夫。这是一个网络调优工具,网络调优最重要就是ethtools,我在这里给大家列了几个世界工作环境当中也非常重要的点。 为什么谈到proc,当我们这些工具还不能满足我们需求的时候我们应该怎么办,我们怎么样开发自己需要的工具,我们需要借助proc工具。比如我们想看到内存东西,是不是我们想监控的信息,这些都不爽的时候,我们用自己的一些脚本,当然proc也支持二次开发,我们来去作为我们想要的东西。对于proc操作给大家列了一下,我们如何用因为改变内核参数,我们还可以把所有改变放在ETC下当中去,让整个系统永久有效,让你重启之后你的设置不被丢掉。 下面我在讲两个TOP,一个性能调优还有一个容量调优。性能调优,怎么从操作系统角度选一个比较好内核,对于VM tuning,比如怎么样调回收机制,优化我们的影射内存回收机制。对于CPU来说,做CPU亲和力优化。我们为了在应用系统上下文切换中,如何保证最大性能。所以,NUMA大家用的还不太多,目前在生产环境用的比较多,我给大家列了几个工具,Numastat,Numactl,还有Hugetlbfs。 还有当我们在这种网站大的数据交换的时候怎么样调分段,磁盘和IO我一会会给大家举例子。对于虚拟机和虚拟化,我们可能主要是关注与KVM上面调优,比如我们现在新的2.6最新内核可以支持透明支持,TLH支持,还有1G大页支持。我们知道在X86架构上默认支持是2兆,对于虚拟机我们可以做到更加细的控制,比如某一个内存配置大小,我们知道内存可能分成很多状态。 刚才我们是性能优化,给大家一个总结,就是容量优化。我们如何用到内存过载,内存调到非常疯狂,我们如何避免OM的错误,通过它的分值和优化值怎么避免。在调优过程当中我们强调容量调优,有一个最基本原则,我们不要疯狂地使用某一个资源,把某一资源完全耗光,这是一个最基本概念。对于文件系统还有内核,大家看到这些参数系统并不陌生。这些列出来我们作为一个数据库经常用到的参数。 对于内存我给大家有一个例子,我们如果调内存优化的时候,我们第一步要分析的时候,你系统的内存压力在哪里。对于磁盘IO来说的话,我们看到,我给大家列出来了操作系统默认支持四种调度,我们要知道每一种调度散发在你的生产环境,在你网站应用当中跟架构怎么匹配,我只举一个例子。比如CFQ是一个完全公平调度策略,也是红帽系统上默认的。这个时候这个调度适合于什么?当你服务器是SMP的服务器,而且当你的存储战略有多个RUN的时候是适合的。 对于IO调优,我们需要对设备请求队列优化。相关目录给大家列出来了,当我们要调某一个参数的时候,我们用一个命令进行识别,我们设计内核参数可以放到etc上面去。当我们调优的时候,我遇到很多情况,好多朋友跟我说,当我们调优系统的时候,怎么越调越慢啊。第二我们调优的时候最后系统起不来了,我这给大家列了一点,当你真正优化的时候,你越调越慢,或者当你系统不能启动的时候,我们根据系统的启动过程应该怎么样去恢复,给大家列了一个工具。 我们知道做[url=javascript:;]开源[/url]对重要就是对资源整合,当我们不能得到厂商支持的时候,我们怎么样通过现在目前流行网络力量得到我们自学习,同时有一些互动组织,来去提高我们自己的水平,这是大家可能目前关注最重要的。我这里列出来,比如有几个很好网站,比如IBM红皮书,还有红帽有一些高手,我们内存管理,和文件系统管理每个人都有个人网站,我们可以去关注一下,看一下其他人的经验,做一个经验分享。 这就是我演讲的全部,可能时间比较短一些,只是给大家做一些点的铺垫。至于更加细分的事情,或者我们准备从架构上做的更合理一些,如果大家有兴趣的朋友,可以跟我会后进行交流,非常感谢大家的时间,再见。  
posted @ 2011-12-20 06:03  gxldan  阅读(238)  评论(0编辑  收藏  举报