/proc 是一个特殊的文件系统,不占用磁盘空间,该目录下的内容是根据用户请求的信息,有Linux内核实时生成的。(2.6.32-25)一、性能分析工具1、CPU性能分析工具:topps -a -lvmstattimestracepstree2、Memory性能分析工具:cat /proc/meminfotopvmstatstraceipcsipcrmcat /proc/slabinfocat /proc/<pid #>/maps (先用ps -a -l查看进程的pid 或者在程序中调用pid_t pid=getpid();)3、I/O性能分析工具:iostatvmstatquotacheck (sudo apt-get install quota)repquota4、Network性能分析工具:ifconfignetstatwireshark(sudo apt-get install wireshark)tshark(sudo apt-get install tshark)iptraf (sudo apt-get install iptraf)iwconfignfsstat (sudo apt-get install iptraf)mrtgntop二、Linux 性能调优工具当通过上述工具及命令,我们发现了应用的性能瓶颈以后,我们可以通过以下工具或者命令来进行性能的调整。1、CPU性能调优工具:sysctlnice / renic2、Memory性能调优工具:ulimitsysctlswapon3、I/O性能调优工具:sysctledquotaboot line:elevator= <ioscheduler>4、Network性能调优工具:ifconfigiwconfigsysctl三、性能调整方法1、CPU性能调整当一个系统的CPU空闲时间或者等待时间小于5%时,我们就可以认为系统的CPU资源耗尽,我们应该对CPU进行性能调整。CPU性能调整方法:编辑/proc/sys/kernel/中的文件,修改内核参数。#cd /proc/sys/kernel/# ls 一般可能需要编辑的是pid_max和threads-max,如下:# sysctl kernel.threads-maxkernel.threads-max = 8192# sysctl kernel.threads-max=10000kernel.threads-max = 100002、Memory性能调整当一个应用系统的内存资源出现下面的情况时,我们认为需要进行Memory性能调整:页面频繁换进换出;缺少非活动页。例如在使用vmstat命令时发现,memory的cache使用率非常低,而swap的si或者so则有比较高的数据值时,应该警惕内存的性能问题。Memory性能调整方法:2.1、关闭非核心的服务进程。相关的方法请见CPU性能调整部分。2.2、修改/proc/sys/vm/下的系统参数。# ls /proc/sys/vm/# sysctl vm.min_free_kbytesvm.min_free_kbytes = 1024# sysctl -w vm.min_free_kbytes=2508vm.min_free_kbytes = 2508# cat /etc/sysctl.confvm.min_free_kbytes=20582.3、配置系统的swap交换分区等于或者2倍于物理内存。# freetotal used free shared buffers cachedMem: 987656 970240 17416 0 63324 742400-/+ buffers/cache: 164516 823140Swap: 1998840 150272 18485683、I/O性能调整系统出现以下情况时,我们认为该系统存在I/O性能问题:系统等待I/O的时间超过50%;一个设备的平均队列长度大于5。我们可以通过诸如vmstat等命令,查看CPU的wa等待时间,以得到系统是否存在I/O性能问题的准确信息。I/O性能调整方法:3.1、修改I/O调度算法。Linux已知的I/O调试算法有4种:deadline - Deadline I/O scheduleras - Anticipatory I/O schedulercfq - Complete Fair Queuing schedulernoop - Noop I/O scheduler3.2、可以编辑/etc/yaboot.conf文件修改参数elevator得到。# vi /etc/yaboot.conf image=/vmlinuz-2.6.9-11.EL label=linux read-only initrd=/initrd-2.6.9-11.EL.img root=/dev/VolGroup00/LogVol00 append="elevator=cfq rhgb quiet" 4、文件系统调整。对于文件系统的调整,有几个公认的准则:将I/O负载相对平均的分配到所有可用的磁盘上; 选择合适的文件系统,Linux内核支持reiserfs、ext2、ext3、jfs、xfs等文件系统; # mkfs -t reiserfs -j /dev/sdc1 文件系统即使在建立后,本身也可以通过命令调优; tune2fs (ext2/ext3) reiserfstune (reiserfs) jfs_tune (jfs) 文件系统Mount时可加入选项noatime、nodiratime。 # vi /etc/fstab … /dev/sdb1 /backup reiserfs acl, user_xattr, noatime, nodiratime 1 1 5、调整块设备的READAHEAD,调大RA值。 [root@overflowuid ~]# blockdev --report RO RA SSZ BSZ StartSec Size Device … rw 256 512 4096 0 71096640 /dev/sdb rw 256 512 4096 32 71094240 /dev/sdb1 [root@overflowuid ~]# blockdev --setra 2048 /dev/sdb1 [root@overflowuid ~]# blockdev --report RO RA SSZ BSZ StartSec Size Device … rw 2048 512 4096 0 71096640 /dev/sdb rw 2048 512 4096 32 71094240 /dev/sdb1 6、Network性能调整一个应用系统出现如下情况时,我们认为该系统存在网络性能问题:网络接口的吞吐量小于期望值;出现大量的丢包现象;出现大量的冲突现象。Network性能调整方法:6.1、调整网卡的参数。(sudo apt-get install ethtool)dengshaolin@dengshaolin-tech:/$ sudo ethtool eth0Settings for eth0:Supported ports: [ TP ]Supported link modes: 10baseT/Half 10baseT/Full 100baseT/Half 100baseT/Full 1000baseT/Half 1000baseT/Full Supports auto-negotiation: YesAdvertised link modes: 10baseT/Half 10baseT/Full 100baseT/Half 100baseT/Full 1000baseT/Half 1000baseT/Full Advertised pause frame use: NoAdvertised auto-negotiation: YesLink partner advertised link modes: Not reportedLink partner advertised pause frame use: NoLink partner advertised auto-negotiation: NoSpeed: 100Mb/sDuplex: FullPort: Twisted PairPHYAD: 1Transceiver: internalAuto-negotiation: onMDI-X: UnknownSupports Wake-on: gWake-on: gCurrent message level: 0x000000ff (255)Link detected: yesdengshaolin@dengshaolin-tech:/$ #ethtool -s eth0 duplex full#ifconfig eth0 mtu 9000 up 6.2、增加网络缓冲区和包的队列。dengshaolin@dengshaolin-tech:/$ cat /proc/sys/net/ipv4/tcp_mem 83040 110720 166080dengshaolin@dengshaolin-tech:/$ cat /proc/sys/net/core/rmem_default 112640dengshaolin@dengshaolin-tech:/$ cat /proc/sys/net/core/rmem_max 131071dengshaolin@dengshaolin-tech:/$ cat /proc/sys/net/core/wmem_default 112640dengshaolin@dengshaolin-tech:/$ cat /proc/sys/net/core/wmem_max 131071dengshaolin@dengshaolin-tech:/$ cat /proc/sys/net/core/optmem_max 10240dengshaolin@dengshaolin-tech:/$ cat /proc/sys/net/core/netdev_max_backlog 1000dengshaolin@dengshaolin-tech:/$ sysctl net.core.rmem_max net.core.rmem_max = 131071# sysctl -w net.core.rmem_max=135168net.core.rmem_max = 1351686.3、调整Webserving。dengshaolin@dengshaolin-tech:/$ sysctl net.ipv4.tcp_tw_reuse net.ipv4.tcp_tw_reuse = 0# sysctl -w net.ipv4.tcp_tw_reuse=1net.ipv4.tcp_tw_reuse = 1# sysctl net.ipv4.tcp_tw_recyclenet.ipv4.tcp_tw_recycle = 0# sysctl -w net.ipv4.tcp_tw_recycle=1net.ipv4.tcp_tw_recycle = 1