读书笔记--- linux 性能调优指南 (首先建议对内核又足够的了解,尤其内存管理,不然很多概念很难理解)
1.理解linux 操作系统
2.监控和检测工具
3.分析性能瓶颈
4.优化操作系统
处理器指标
处理器指标如下:
CPU利用率( CPU utilization)
这个可能是最直接的指标,它全面展示了每个处理器的利用率。在IBM System x架构
中,如果CPU利用率持续高于80%,就可能遇到了处理器瓶颈。
用户时间( User time)
表示CPU在用户进程上的时间百分比,包括nice时间。用户时间值高是一个较好的状
态,在这种情况下,系统在处理真正的任务。
系统时间( System time)
表示CPU花在内核操作上的时间百分比,包括IRQ和softirq时间。持续的高系统时间可以
指出网络和驱动栈的瓶颈。CPU花在内核上的时间越少越好。
等待( Waiting)
CPU花在等待I/O操作上的时间总和。类似blocked值,系统不应该把大量时间花在等待
I/O操作上;否则,你应该调查I/O子系统的性能。
空闲时间( Idle time)
表示系统处于空闲等待任务的时间比。
Nice时间( Nice time)
表示CPU花在re-nicing进程,改变进程执行顺序和优先级上的时间。
平均负载( Load average)
平均负载不是百分比,是下面的和的滚动平均值:
在队列中等待被处理的进程数
等待非中断任务完成的进程数
1.6.理解Linux性能指标
44
是TASK_RUNNING和TASK_UNINTERRUPTIBLE的和的平均值。如果进程请求
CPU时间被阻塞( 表示CPU没有时间处理它们) ,平均负载就会升高。另一方面,
如果每个进程直接就能获得CPU时间并且没有CPU周期丢失,负载就会降下来。
可运行进程( Runable processes)
表示已经准备好要执行的进程。这个值不应该持续超过CPU个数的10倍,否则就是出现
了CPU瓶颈。
阻塞的( Blocked)
在等待I/O操作完成的时候,进程不能执行。阻塞进程可以指出你的I/O瓶颈。
上下文切换( Context switch)
系统上有大量的切换在线程间发生,在有大量中断和上下文切换发生时,表示驱动或应
用程序出现了问题。一般来说,上下文切换不是好现象,因为CPU缓存需要刷新,但是
有些上下文切换是必要的。
中断( Interrupts)
中断值包含硬中断和软中断。硬中断对系统性能有更大的影响。高中断值指示了软件瓶
颈,无论是内核还是驱动程序层面的。记住中断值包含CPU时钟引起的中断。
Linux性能监控工具
工具 | 常用功能 |
top | 所有进程情况 |
vmstat | 系统活动,硬件和系统信息 |
uptime, w | 系统平均负载 |
ps, pstree | 显示进程 |
free | 内存使用情况 |
iostat | cpu负载和磁盘活动 |
sar | 收集和报告系统状态 |
mpstat | 多处理器使用情况 |
numastat | NUMA相关统计 |
pmap | 进程内存情况 |
netstat | 网络统计 |
iptraf | 实时网络统计 |
tcpdump,ethereal | 详细网络流量分析 |
nmon | 收集和报告系统活动 |
strace | 系统调用 |
proc文件系统 | 各种内核统计信息 |
KDE system guard | 实时的系统图形报告 |
Gnome System Monitor | 实时的系统图形报告 |
压测工具
工具 | 常用功能 |
lmbench | 微型系统功能评测工具 |
iozone | 文件系统压测 |
netperf | 网络性能测试 |
bonnie | 磁盘IO和文件系统测试 http://www.textuality.com/bonnie/ |
bonnie++ | 磁盘IO和文件系统测试 http://www.coker.com.au/bonnie++/ |
NetBench | 文件服务器测试,运行在Windows上 |
dbench | 文件系统测试,通常用来文件服务器压测 http://freshmeat.net/projects/dbench/ |
iometer | 磁盘I/O和网络压测 http://www.iometer.org/ |
ttcp | 简单的网络测试 |
iperf | 网络测试 http://dast.nlanr.net/projects/Iperf/ |
ab ( Apache Bench) | 简单的web服务器测试,包含在Apache服务器中 http://httpd.apache.org/ |
WebStone | Web服务器测试 http://www.mindcraft.com/webstone/ |
Apache Jmeter | 主要用来web服务器性能测试。也支持其它协议,例如SMTP,LDAP, JDBC等,有很好的报告功能http://jakarta.apache.org/jmeter/ |
fsstone, smtpstone | 邮件服务器测试,包含在postfix中 http://www.postfix.org/ |
nhfsstone | 网络文件系统测试,包含在nfs-utils包中 |
DirectoryMark | LDAP测试 http://www.mindcraft.com/directorymark/ |
性能优化选项
第一步是要确保,系统性能问题是由CPU引起的,而不是其它子系统。如果处理器是服务器
瓶颈,可以采取如下的办法来增强性能:
使用ps -ef来确保没有不必要的进程程序在后台运行,如果找到了这样的程序,关掉它,
或者使用cron让它在非高峰的时候运行。
通过top找到非关键的、CPU密集型进程,然后用renice修改它的优先级。
在基于SMP的机器上,尝试使用taskset命令绑定进程到CPU上,避免进程在多个处理器
之间切换,引起cache刷新。
基于运行的应用,确认你的应用是否能高效的利用多处理器。来决定是否应该使用更强
劲的CPU而不是更多的CPU。例如,单线程应用,会从更快的CPU中受益,增加值CPU
个数也没用。
还有其它办法,比如,确保你使用的是最新的驱动和固件,这能影响到他们在系统上的
负载
如果确定是内存瓶颈,可以执行下面的操作:
使用bigpages、hugetlb和共享内存调优swap空间。
增加或者减少页大小。
改善活动和非活动的内存处理
调整page-out率
限制服务器上每个用户可使用的资源
关掉用不到的服务
增加内存
网络性能调优
当网络瓶颈出现时,你应该试试如下的办法:
确保网卡配置和路由器交换机配置相匹配。
修改子网的组织方式
使用更快的网卡
适当调整IPv4的TCP内核参数。有些安全相关的参数调整会提升性能,详见下一章。
如果可能的话,更换网卡,然后重新检测性能。
如果可能的话,增加网卡,绑定成一个网卡组。
3.5.网络瓶颈
100
Linux发行版和内核提供了各种参数和选项给Linux用户优化系统性能,将软硬件性能发挥到最
大。正如前文所说,没有适用于所有应用的提升系统性能的优化魔法。下文中所讨论的提升
性能的办法只适用于特定的硬件和应用。某些配置会提升web服务器性能,但是配置在数据库
系统上可能适得其反。
这节中的步骤可以用来优化基于内核2.6的Linux发行版。由于在本书写作时,基于2.6内核的
发行版从2.6.9到2.6.19的版本都有,有些优化选项可能只适用于特定的内核版本。本章内容
如下。
Linux内核管理
系统清理
使用sysctl优化性能
网络优化
章节如下:
4.1 优化原则
4.2 安装考量
4.3 修改内核参数
4.4 优化处理器子系统
4.5 优化虚拟内存子系统
4.6 优化磁盘子系统
4.7 优化网络子系统
优化原则
优化原则
管理变更
优化任何系统都应该基于一些简单的原则,最重要的是变更管理。大体上,系统调整的第一
步是分析和评估当前系统配置。确保所有系统设备运行在硬件厂家所宣称的最佳状态,有助
于为接下来的调整提供坚实基础。还有,优良的业务系统上应该没有任何不必要的服务和子
系统在运行。最后,落实到具体的系统优化,需要注意的是,调优通常是针对特定应用负载
而进行的。所以,根据系统负载行为的调优使得系统更高效,但是对其它负载模式可能是不
利的。例如,对系统低延时的调整,通常来说会降低系统的吞吐量。
管理变更
管理变更和性能优化并不直接相关,但可能是成功性能调优最重要的因素。如下可能是第二
位考虑的,但是作为提醒,我们强调一下:
在调优之前,实施合理的管理流程变更
永远不要在生产系统上调优
在调优过程中,每次只修改一个变量
反复测试提升性能的参数,有时候,统计来的结果更加可靠
把成功的参数调整整理成文档,和社区分享,即使你觉得它们微不足道。生产环境中获
得的任何结果对Linux性能都有很大用处。