一本很老的书,还是RHEL3时代的,在陪GF的空隙一点点读完,把笔记整理一下发在这里,只包括自己不知道或者说容易忘记的内容,不代表调优指南。 1 Tuning the operating system 1.1 Disabling daemons 关闭不必要的后台进程。RHEL3中,默认启动的后台进程有: apmd 高级电源管理 autofs 自动挂载 cups 通用UNIX打印机系统 hpoj 惠普打印机支持 isdn 调制解调器 netfs nfslock portmap NFS支持 pcmcia PCMCIA支持 rhnsd 自动升级 sendmail 邮件转发程序 xfs 桌面程序 1.2 Shutting down the GUI runlevel: 0 halt立刻关机immediately shut down 1 single单人 2 multi-user without NFS(这个说明和一般的说法不太一样~) 3 full multi-user 5 X11 6 reboot 修改/etc/inittab如下: id:3:initdefault: #runlevel #4:2345:respawn:/sbin/mingetty tty4 #关闭多余控制台 注意:留3个,以免在被攻击的时候自己反而进不去了! 1.4 Changing kernel parameters /proc/loadavg 系统负载1/5/15分钟 /proc/stat 内核状态:进程/swap/磁盘IO /proc/cpuinfo CPU信息 /proc/meminfoo 内存信息 /proc/sys/fs/* linux可用文件数及磁盘配额 /proc/sys/kernel/* 进程号范围/系统日志级别 /proc/sys/net/* 网络细节 /proc/sys/vm/* 内存缓冲管理 1.7 Tuning the processor subsystem CPU超线程注意事项: 注意使用SMP的kernel 实际CPU数越多,超线程意义越小: 2核:提升15-25% 4核:提升1-1% 8核:提升0-5% 1.8 Tuning the memory subsystem 如果决定调整/proc/sys/vm/*的参数,最好一次只调整一个。 vm.dbflush前3个参数分别为: nfract 在buffer被转存到disk前允许的最大buffer比率 ndirty 将buffer转到disk时一次允许操作最大的buffer数 nfract_sync 转存时允许buffer中dirty数据的最大比率 vm.kswapd tries_base 一次swap传输时的pages数。如果swapping较大,适当增加该值 tries_min kswapd运行时交换的pages的最小数 swap_cluster kswapd一次写入pages的数。太小会增加IO次数,太大又要等待请求队列 1.9 Tuning the file subsystem 磁盘访问速度是ms级别的,而内存是ns,PCI是us。 磁盘IO是最关键的问题服务器举例: 文件/打印服务器:所有数据从磁盘读取 数据库服务器:大量IO,在内存和磁盘间交换数据 磁盘IO不是最关键的问题服务器举例: 邮件服务器:网络状况才是最关键的。 web服务器:网络和内存才是最关键的….. 1.9.5 The swap partition 创建多个swap区有助于提升swap性能 通常情况,多个swap采用顺序读写,即只有/etc/fstab中排名在前的swap区耗尽的情况下,才会使用下一个swap区; 可以在fstab中定义优先级,类似”/dev/sda2 swap swap sw,pri=5 0 0”的格式; 相同优先级的swap区,系统会并发使用,不同优先级之间依然要等待耗尽!——另外,如果相同优先级的swap区有一个性能较差,会连带影响整个swap性能。 1.10 Tuning the network subsystem 网络问题经常会导致其他伴生问题。比如:块大小太小会给CPU利用率带来显著影响;TCP连接数过多会带来内存使用率的急速上升…… 经常被打开的net.ipv4.tcp_tw_reuse和net.ipv4.tcp_tw_recycle的作用:缓存TCP交互中的客户端信息,包括交互时间、最大段大小,阻塞窗口。详见RFC1644。 net.ipv4.tcp_fin_timeout可以缩短TCP建连时最后发送FIN序列的时间,以便快速释放内存提供给新进连接请求。但是修改这个的时候也要谨慎,因为由此导致的死套接字数量可能引起内存溢出! net.core.wmem_max/net.core.rmem_max定义在每个TCP套接字创建时划分的内存大小,推荐设置8MB。 net.ipv4.tcp_wmem/net.ipv4.tcp_rmem的最后一个数字不能大于上面core的定义。 net.ipv4.tcp_max_syn_backlog队列存放半连接。这些连接可能是因为客户端的连接异常,也可能仅仅是因为服务器负载太高导致。除了半连接,这个配置对防范拒绝服务攻击也有效。 net.ipv4.ipfrag_low_thresh/net.ipv4.ipfrag_high_thresh规范ip碎片,一旦触底,内核会开始丢包。这对于NFS和samba等文件服务器很重要,建议设置为256和384MB。 2 Tuning tools 2.3 top STAT:S=SLEEPING,R=RUNNING,T=TRACED/STOPPED,D=INTERRUPTIBLE SLEEP,Z=ZOMBIE 2.3.1 Process priority and nice levels 优先级从19(最低)到-19(最高),默认是0。启动进程时指定nice -n 19 command,启动后改变renice 19 command 2.4 iostat tps:transfers per second,多个单独的IO请求,可以组合在一次transfer请求中。 Blk_read/s,Blk_wrtn/s:每秒的读写块个数。block大小和transfer大小一样各不相同。一般是1、2、4KB,采用如下命令查看:dumpe2fs -h /dev/sda1 | grep -F ‘Block Size’ 2.5 vmstat Process:r:等待运行的进程数,b:不可中断睡眠中的进程数 Swap:单位是KBps CPU:us:非内核时间,包括user和nice,id:在linux2.5.41前,这个数值包括了IOwait时间在内…… 2.11 ulimit -H和-S分别是hard和soft,开机启动指定的话,修改/etc/security/limits.conf即可。 2.12 mpstat 用来在多CPU的机器上查看每个CPU的情况。

  1. Analyzing performance bottlenecks 3.1 Identifying bottlenecks 快速调优策略: a. 了解你的系统; b. 备份系统; c. 监控、分析系统性能; d. 缩小瓶颈,找出根源; e. 解决瓶颈的时候一次只修改一个地方; f. 返回c步骤继续,直到满意。 3.1.1 Gathering information 在收到“服务器出问题了”的报警时,提出下列问题,可以更加有效地收集信息进行故障定位: Q:服务器的完整描述?包括:模块、使用时长、配置、外围设备、操作系统版本号…… Q:能准确描述一下问题所在么?包括:症状表现、各种错误日志记录…… Q:问题是谁碰到/发现的?一个人、某些特定的人群,还是所有的用户?由此可以大概猜测问题是网络、应用还是客户电脑。另外:性能问题可能不会立刻从服务器反应到客户端上来,因为网络延迟经常会覆盖掉其他问题。这个延迟包括网络设备,也包括其他服务器提供的网络服务,比如域名解析~ Q:问题可以再现么?所有可以再现的问题都是可以解决的! 重现故障的步骤是什么?这可以协助你在测试环境完成调优工作。 问题是持续发生的么?如果是断续发生的,赶紧找出让它重现的办法,最好就是能按你的剧本指令重现…… 问题是不是周期性的固定某个时间发生?查查那时候是不是有人登陆了?尝试梗概系统,看问题会重现么? 问题真的很不常见?如果真是如此,那只能说rp有问题了,事实上,绝大多数问题都是可重现的~对没法重现的,那就出网管绝招:reboot、然后更新升级驱动和补丁。 Q:问题什么时候开始的?逐渐显现还是突然爆发?如果是逐渐,那应该是积累出来的;如果是突然,那考虑是不是外设做了改动。 Q:服务器是不是有变动,或者客户端的使用方法变了? Q:事情紧急么?要求几分钟内搞定还是未来几天? 3.1.2 Analyzing the server’s performance 在任何排障动作前,牢记备份!! 有必要为服务器创建一份性能日志,内容包括:进程、系统、工作队列、内存、交换页、磁盘、重定向、网卡…… 3.2 CPU bottlenecks 动态应用/数据库服务器,CPU常常是瓶颈,但实际经常是CPU在等待其他方面的响应。 3.2.1 Finding CPU boottlenecks 注意:同时不要运行多个工具,以免给CPU增加负载 3.2.2 SMP 进程在CPU之间进行切换时需要消耗一点的时间,所以绑定CPU比较有用。 3.2.3 Performance tuning options 关闭非必须进程;调成优先级;绑定CPU;CPU主频,是否多核;更新驱动; 3.3 Memory bottlenecks free命令参数-l -t -o,分别表示low/high,total,old(不显示buffer信息) 3.3.2 Performance tuning options 调整页大小,默认是4/8KB;限定user资源limits.conf;…… 3.4 Disk bottlenecks 常见问题:一、硬盘数太少;二、分区数太多,导致磁头寻址时间变大。 3.4.1 Finding disk bottlenecks 写缓冲;磁盘控制器负载;网络延时导致响应慢;IO等待队列 随机读写还是顺序读写?单次IO大还是小? 表3-2 磁盘转速 latency seek-time random-access-time IOPS Throughout 15000 2ms 3.8ms 6.8ms 147 1.15MBps 10000 3ms 4.9ms 8.9ms 112 900KBps 7200 4.2ms 9ms 13.2ms 75 600KBps 在一个大概70%读30%写的随机IO型正常负载的服务器上,采用RAID10比RAID5能提高50-60%的性能。 打开文件太多时,会因为寻址时间太长导致响应的变慢 iostat的指标: %util 被IO请求消耗的CPU比例 svctm 完成一个请求的平均时间,单位ms await 一个IO请求等待服务的平均时间,单位ms avgqu-sz 平均队列长度 avgrq-sz 平均请求大小 rrqm/s 发送到磁盘的每秒合并读请求数 wrqm/s 发送到磁盘的每秒合并写请求数 3.4.2 Performance tuning options 顺序读写换磁头;随机读写加磁盘;用硬件RAID卡;加内存 3.5 Network bottlenecks 3.5.2 Performance tuning options 检查路由配置;子网;网卡速率;TCP内核参数;换网卡;bonding 4 Tuning Apache 4.1 Gathering a baseline 吞吐量:每秒请求数和每秒传输字节数;请求处理响应时间…… 4.5 Operating system optimization 文件打开数;进程数;文件访问时间——不记录atime的作用是消减IO峰值! 4.6 Apache 2 optimizations 如果文件是通过NFS方式发布的,apache不会采用sendfile方式缓存文件,配置文件请选择“EnableSendfile Off”! 4.6.1 Multi-processing module directives 经常需要重启的,加大StartServer; 负载较大的,加大MinSpareServers到25,MaxSpareServers到125; MaxClients最大只能是256,内存不足时应该减少; 4.6.2 Compression of data 默认的6级压缩比,可以带来72%的带宽减小。太高级别压缩,对CPU有影响。 在测试中,启用压缩的apache带宽减小70%;cpu负载上升87%到饱和状态,能同时处理的客户端请求数降到三分之一。 vary头的作用:告知代理服务器对支持压缩的客户端只发送压缩后的内容。 apache2只在客户端请求包含Accept-encoding: gzip和Accept-encoding: gzip, deflate的时候才压缩数据。 4.6.3 Logging 使用WebBench的时候,一般会有2%的请求是404的,这可能导致error_log迅速变大! 5 Tuning database servers 5.1 Important subsystems CPU: 数据库都是多线程的,最好使用16核以上CPU,2级缓存相当重要,命中率最好在90%以上; 内存: 缓冲是数据库最重要的部分。编译内核时请确认CONFIG_HIGHMEM64G_HIGHPTE=y这项。 磁盘: 数据库会有大量的磁盘IO以完成数据在内存和硬盘的交换。一般每个xeon的CPU需要对应10块高速硬盘,最好能有50块10000转的磁盘。IBM的xSeries 370使用450块10000转磁盘以达到最大吞吐量——每分钟40000次交换。

笔记到此为止。之后的内容是DB2的调优,samba、ldap、lotus章节,就没看了……