Linux 性能指标及分析工具
来源:互联网 发布:索引超出了数组界限 编辑:程序博客网 时间:2024/06/04 19:05
一、CPU
1、良好状态指标
- CPU利用率:User Time <= 70%,System Time <= 35%,User Time + System Time <= 70%。
- 上下文切换:与CPU利用率相关联,如果CPU利用率状态良好,大量的上下文切换也是可以接受的。
- 可运行队列:每个处理器的可运行队列<=3个线程。
2、监控工具
- vmstat
$ vmstat 1
procs -----------memory---------- ---swap-------io---- --system-- -----cpu------
r
14
17
20
17
16
重要参数:
r,run queue,可运行队列的线程数,这些线程都是可运行状态,只不过CPU暂时不可用;
b,被blocked的进程数,正在等待IO请求;
in,interrupts,被处理过的中断数
cs,context switch,系统上正在做上下文切换的数目
us,用户占用CPU的百分比
sys,内核和中断占用CPU的百分比
id,CPU完全空闲的百分比
上例可得:
sy高us低,以及高频度的上下文切换(cs),说明应用程序进行了大量的系统调用;
这台4核机器的r应该在12个以内,现在r在14个线程以上,此时CPU负荷很重。
- 查看某个进程占用的CPU资源
$
28577
28578
28579
28581
28582
28659
……
二、Memory
1、良好状态指标
- swap in
(si) == 0 ,swap out(so) == 0 - 应用程序可用内存/系统物理内存
<= 70%
2、监控工具
- vmstat
$ vmstat 1
procs -----------memory---------- ---swap-------io---- --system-- -----cpu------
r
0
0
0
1
2
重要参数:
swpd,已使用的
free,可用的物理内存大小,KB
buff,物理内存用来缓存读写操作的buffer大小,KB
cache,物理内存用来缓存进程地址空间的
si,数据从
so,数据从
上例可得:
物理可用内存
- free
$ free -m
total used free shared buffers cached
Mem: 8111 7185 926 0 243 6299
-/+ buffers/cache: 643 7468
Swap: 8189 0 8189
三、磁盘IO
1、良好状态指标
- iowait % < 20%
提高命中率的一个简单方式就是增大文件缓存区面积,缓存区越大预存的页面就越多,命中率也越高。
Linux
2、监控工具
- 查看物理内存和文件缓存情况
$ cat /proc/meminfo
MemTotal:
MemFree:
Buffers:
Cached:
这台服务器总共有
- sar
$ sar -d 2 3
Linux 2.6.9-42.ELsmp (webserver) 11/30/2008_i686_ (8 CPU)
11:09:33 PM DEV tps rd_sec/s wr_sec/s avgrq-szavgqu-sz await svctm %util
11:09:35 PM dev8-0 0.00 0.00 0.00 0.00 0.00 0.000.00 0.00
11:09:35 PM DEV tps rd_sec/s wr_sec/s avgrq-szavgqu-sz await svctm %util
11:09:37 PM dev8-0 1.00 0.00 12.00 12.00 0.000.00 0.00 0.00
11:09:37 PM DEV tps rd_sec/s wr_sec/s avgrq-szavgqu-sz await svctm %util
11:09:39 PM dev8-0 1.99 0.00 47.76 24.00 0.000.50 0.25 0.05
Average: DEV tpsrd_sec/s wr_sec/s avgrq-sz avgqu-sz
Average: dev8-0 1.00 0.00 19.97 20.00 0.00 0.330.17 0.02
重要参数:
await表示平均每次设备I/O操作的等待时间(以毫秒为单位)。
svctm表示平均每次设备I/O操作的服务时间(以毫秒为单位)。
%util表示一秒中有百分之几的时间用于I/O操作。
如果svctm的值与await很接近,表示几乎没有I/O等待,磁盘性能很好,如果await的值远高于svctm的值,则表示I/O队列等待太长,系统上运行的应用程序将变慢。
如果%util接近100%,表示磁盘产生的I/O请求太多,I/O系统已经满负荷的在工作,该磁盘可能存在瓶颈。
四、Network IO
对于UDP
1、良好状态指标
接收、发送缓冲区不长时间有等待处理的网络包
2、监控工具
- netstat
对于UDP服务,查看所有监听的UDP端口的网络情况
$ watch netstat -lunp
Proto Recv-Q Send-Q Local Address
udp
udp
udp
udp
udp
udp
udp
udp
RecvQ、SendQ为0,或者不长时间有数值是比较正常的。
对于UDP服务,查看丢包情况(网卡收到了,但是应用层没有处理过来造成的丢包)
$ watch netstat -su
Udp:
packet receive errors 这一项数值增长了,则表明在丢包
对于TCP(来自davidshan单卫的经验,thx~~)
1、良好状态指标
对于TCP而言,不会出现因为缓存不足而存在丢包的事,因为网络等其他原因,导致丢了包,协议层也会通过重传机制来保证丢的包到达对方。
所以,tcp而言更多的专注重传率。
2、监控工具
# cat /proc/net/snmp | grep Tcp:
Tcp: RtoAlgorithm RtoMin RtoMaxMaxConn ActiveOpens PassiveOpens AttemptFails EstabResets CurrEstab InSegsOutSegs RetransSegs InErrs OutRsts
Tcp: 1 200 120000 -1 78447 413 50234 221 35984652 5653408 156800 0 849
重传率 = RetransSegs / OutSegs
至于这个值在多少范围内,算ok的,得看具体的业务了。
业务侧更关注的是响应时间。
性能分析工具汇总
CPU性能分析工具:
vmstat
ps
sar
time
strace
pstree
top
Memory性能分析工具:
vmstat
strace
top
ipcs
ipcrm
cat /proc/meminfo
cat /proc/slabinfo
cat /proc//maps
I/O性能分析工具:
vmstat
ipstat
repquota
quotacheck
Network性能分析工具:
ifconfig
ethereal
tethereal
iptraf
iwconfig
nfsstat
mrtg
ntop
netstat
cat /proc/sys/net
Linux 性能调优工具
当通过上述工具及命令,我们发现了应用的性能瓶颈以后,我们可以通过以下工具或者命令来进行性能的调整。
CPU性能调优工具:
nice / renic
sysctl
Memory性能调优工具:
swapon
ulimit
sysctl
I/O性能调优工具:
edquota
quoton
sysctl
boot line:
elevator=
Network性能调优工具:
ifconfig
iwconfig
sysctl
CPU性能调整
当一个系统的CPU空闲时间或者等待时间小于5%时,我们就可以认为系统的CPU资源耗尽,我们应该对CPU进行性能调整。
CPU性能调整方法:
编辑/proc/sys/kernel/中的文件,修改内核参数。
- #cd
/proc/sys/kernel/ -
- #
ls /proc/sys/kernel/ -
- acct
hotplug panic real-root-dev -
- cad_pid
modprobe panic_on_oops sem -
- cap-bound
msgmax pid_max shmall -
- core_pattern
msgmnb powersave-nap shmmax -
- core_uses_pid
msgmni print-fatal-signals shmmni -
- ctrl-alt-del
ngroups_max printk suid_dumpable -
- domainname
osrelease printk_ratelimit sysrq -
- exec-shield
ostype printk_ratelimit_burst tainted -
- exec-shield-randomize
overflowgid pty threads-max -
- hostname
overflowuid random version -
一般可能需要编辑的是pid_max和threads-max,如下:
- #
sysctl kernel.threads-max -
- kernel.threads-max
= 8192 -
- #
sysctl kernel.threads-max=10000 -
- kernel.threads-max
= 10000 -
Memory性能调整
当一个应用系统的内存资源出现下面的情况时,我们认为需要进行Memory性能调整:
页面频繁换进换出;
缺少非活动页。
例如在使用vmstat命令时发现,memory的cache使用率非常低,而swap的si或者so则有比较高的数据值时,应该警惕内存的性能问题。
Memory性能调整方法:
1。关闭非核心的服务进程。
相关的方法请见CPU性能调整部分。
2。修改/proc/sys/vm/下的系统参数。
- #
ls /proc/sys/vm/ -
- block_dump
laptop_mode nr_pdflush_threads -
- dirty_background_ratio
legacy_va_layout overcommit_memory -
- dirty_expire_centisecs
lower_zone_protection overcommit_ratio -
- dirty_ratio
max_map_count page-cluster -
- dirty_writeback_centisecs
min_free_kbytes swappiness -
- hugetlb_shm_group
nr_hugepages vfs_cache_pressure -
- #
sysctl vm.min_free_kbytes -
- vm.min_free_kbytes
= 1024 -
- #
sysctl vm.min_free_kbytes=2508-w -
- vm.min_free_kbytes
= 2508 -
- #
cat /etc/sysctl.conf -
- …
-
- vm.min_free_kbytes=2058
-
- …
-
3。配置系统的swap交换分区等于或者2倍于物理内存。
# free
total used free shared buffers cached
Mem: 987656 970240 17416 0 63324 742400
-/+ buffers/cache: 164516 823140
Swap: 1998840 150272 1848568
I/O性能调整
系统出现以下情况时,我们认为该系统存在I/O性能问题:
系统等待I/O的时间超过50%;
一个设备的平均队列长度大于5。
我们可以通过诸如vmstat等命令,查看CPU的wa等待时间,以得到系统是否存在I/O性能问题的准确信息。
I/O性能调整方法:
1。修改I/O调度算法。
Linux已知的I/O调试算法有4种:
deadline - Deadline I/O scheduler
as - Anticipatory I/O scheduler
cfq - Complete Fair Queuing scheduler
noop - Noop I/O scheduler
可以编辑/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"
2。文件系统调整。
对于文件系统的调整,有几个公认的准则:
将I/O负载相对平均的分配到所有可用的磁盘上;
选择合适的文件系统,Linux内核支持reiserfs、ext2、ext3、jfs、xfs等文件系统;
- #
mkfs -t reiserfs -j /dev/sdc1 -
文件系统即使在建立后,本身也可以通过命令调优;
- tune2fs
(ext2/ext3) -
- reiserfstune
(reiserfs) -
- jfs_tune
(jfs) -
3。文件系统Mount时可加入选项noatime、nodiratime。
- #
vi /etc/fstab -
- …
-
- /dev/sdb1
/backup reiserfs acl, user_xattr, noatime, nodiratime 1 1 -
4。调整块设备的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
Network性能调整
一个应用系统出现如下情况时,我们认为该系统存在网络性能问题:
网络接口的吞吐量小于期望值;
出现大量的丢包现象;
出现大量的冲突现象。
Network性能调整方法:
1。调整网卡的参数。
# ethtool eth0
Settings for eth0:
Supported ports: [ TP ]
Supported link modes: 10baseT/Half 10baseT/Full
100baseT/Half 100baseT/Full
1000baseT/Full
Supports auto-negotiation: Yes
Advertised link modes: 10baseT/Half 10baseT/Full
100baseT/Half 100baseT/Full
1000baseT/Full
Advertised auto-negotiation: Yes
Speed: 100Mb/s
Duplex: Half
Port: Twisted Pair
PHYAD: 0
Transceiver: internal
Auto-negotiation: on
Supports Wake-on: d
Wake-on: d
Current message level: 0x00000007 (7)
Link detected: yes
#ethtool -s eth0 duplex full
#ifconfig eth0 mtu 9000 up
2。增加网络缓冲区和包的队列。
- #
cat /proc/sys/net/ipv4/tcp_mem -
- 196608
262144 393216 -
- #
cat /proc/sys/net/core/rmem_default -
- 135168
-
- #
cat /proc/sys/net/core/rmem_max -
- 131071
-
- #
cat /proc/sys/net/core/wmem_default -
- 135168
-
- #
cat /proc/sys/net/core/wmem_max -
- 131071
-
- #
cat /proc/sys/net/core/optmem_max -
- 20480
-
- #
cat /proc/sys/net/core/netdev_max_backlog -
- 300
-
- #
sysctl net.core.rmem_max -
- net.core.rmem_max
= 131071 -
- #
sysctl net.core.rmem_max=135168-w -
- net.core.rmem_max
= 135168 -
3。调整Webserving。
- #
sysctl net.ipv4.tcp_tw_reuse -
- net.ipv4.tcp_tw_reuse
= 0 -
- #
sysctl net.ipv4.tcp_tw_reuse=1-w -
- net.ipv4.tcp_tw_reuse
= 1 -
- #
sysctl net.ipv4.tcp_tw_recycle -
- net.ipv4.tcp_tw_recycle
= 0 -
- #
sysctl net.ipv4.tcp_tw_recycle=1-w -
- net.ipv4.tcp_tw_recycle
= 1
使用sar进行综合分析
sar是System Activity Reporter(系统活动情况报告)的缩写。顾名思义,sar工具将对系统当前的状态进行取样,然后通过计算数据和比例来表达系统的当前运行状态。它的特点是可以连续对系统取样,获得大量的取样数据;取样数据和分析的结果都可以存入文件,所需的负载很小。sar是目前Linux上最为全面的系统性能分析工具之一,可以从14个大方面对系统的活动进行报告,包括文件的读写情况、系统调用的使用情况、串口、CPU效率、内存使用状况、进程活动及IPC有关的活动等,使用也是较为复杂。
sar的语法如下:
它的含义是每隔t秒取样一次,共取样n次。其中-o file表示取样结果将以二进制形式存入文件file中。
另一种语法如下:
sar [-option] [-s time] [-e time] [-i sec] [-f file]
含义是表示从file文件中取出数据,如果没有指定-f file,则从标准数据文件/var/adm/sa/sadd取数据,其中dd表示当前天。另外,-s time表示起始时间;-e time表示停止时间;-i sec表示取样的时间间隔,如果不指定则表示取文件中所有的数据。对于具体的选项参见表1。
一般它与-q和-u联合使用,以便对每个CPU的使用情况进行分析,比如运行如下命令:
将输出如下:
由于sar命令太复杂,只有通过熟练使用才能了解每个选项的含义,对于sar输出中每个字段的含义运行man sar命令可以得到详细的解释。
- Linux性能指标及分析工具
- Linux 性能指标及分析工具
- Linux性能指标分析
- Linux性能指标分析
- Linux CPU性能指标及解释
- 性能指标分析
- Linux性能指标
- Linux性能指标
- Linux性能指标
- linux性能指标
- 性能测试之:操作系统性能指标观测及分析
- Web性能测试基本性能指标及案例分析
- 《Linux 性能及调优指南》1.6 了解Linux性能指标
- linux centos 单独安装ab,及ab性能指标
- LoadRunner性能指标分析(转)
- LoadRunner性能指标分析
- LoadRunner性能指标分析
- Windows性能指标分析
- 知识的整理与加工工具总结
- 构造函数、getter和setter方法以及后两者的意义
- 目前为止接触到的HTML元素
- 利用AFNetworking框架去管理从聚合数据上面请求到的数据
- Chandy/Misra解法 解决哲学家就餐问题 java实现
- Linux 性能指标及分析工具
- 侧滑删除
- 使用log4j输出详细错误日志
- [LeetCode]Permutations
- webx-request context功能
- Matlab基本语法和基本操作
- Unity中分层控制模型的显示和隐藏透明以及恢复
- linux 延时及时间函数总结
- sql语句中过滤条件where和having的区别