一、服务器性能因素
1、CPU 2、内存 3、磁盘I/O带宽 4、网络I/O带宽
Load:
系统负载指运行队列的平均长度,也就是等待CPU的平均进程数。Load越高说明系统响应越慢,如果load是0,代表进程不需要等待,立刻就能获得cpu运行。可以通过查询文件/proc/loadavg获取系统在前一分钟、前五分钟和前十五分钟的平均负载以及当前运行的进程、系统的进程数和上一次调度运行的进程。
justin@junjun:/proc$ cat/proc/loadavg
0.71 0.70 0.63 1/403 5111
在linux系统中,也可直接通过命令行 “w”或者“uptime”查看,如下:
16:10:22 up 1 day, 4:18, 3 users, load average: 0.34, 0.50, 0.52
USER TTY FROM LOGIN@ IDLE JCPU PCPU WHAT
justin tty7 :0 Tue11 28:19m 10:15 0.22s gnome-session
justin pts/0 :0.0 Tue11 28:17m 2:22 0.00s /bin/bash./jettyctl.sh
justin pts/1 :0.0 16:08 0.00s 0.17s 0.00s w
cpu usage:
系统的CPU使用率。
前五行是系统整体的统计信息。
第一行是任务队列信息,同 uptime 命令的执行结果。其内容如下:当前时间;系统运行时间,格式为时:分;当前登录用户数;系统负载,即任务队列的平均长度。
第二、三行为进程和CPU的信息。当有多个CPU时,这些内容可能会超过两行。
内容如下:Tasks: 175 total进程总数;1 running正在运行的进程数;174 sleeping睡眠的进程数;0 stopped停止的进程数;0 zombie僵尸进程数
Cpu(s):22.0% us用户空间占用CPU百分比
20.7%sy内核空间占用CPU百分比
1.1%ni用户进程空间内改变过优先级的进程占用CPU百分比
52.7%id空闲CPU百分比
3.3%wa等待输入输出的CPU时间百分比
0.0%hi
0.2%si swap in,表示虚拟内存的页导入,即从SWAPDISK交换到RAM
0.0%st swap out,表示虚拟内存的页导出,即从RAM交换到SWAPDISK。
PR:操作系统给进程的安排的优先级。这个值标示进程调度器分配给进程的时间片长度。单位是时钟个数。如果一个Linux系统的时间片是10ms,那么PID是2718的进程在执行了200ms后,才会进行进程切换。
RES:进程占用的物理内存大小
VIRT:物理内存+虚拟内存。
吞吐率:
服务器单位时间内处理的请求数,一般用来描述并发能力,当然谈吞吐率的前提是并发用户数。不同的并发用户数下,吞吐率自然大不相同。单位是“请求数 /秒”。吞吐量分为网络吞吐量和事务吞吐量,当作为事务吞吐量时,采用TPS来衡量。目前线上环境Apache没有mod_status模块,不能很方便的查询。
TPS:
服务器每秒处理的事务数。PV在性能测试中的表现形式是以TPS来体现的,两者有一个转换公式,如下:
TPS平均值 =((PV*80%)/(24*60*60*40%))/服务器数量 = pv/s
TPS峰值 =(((PV*80%)/(24*60*60*40%))*1.6) /服务器数量= pv/s ,这个和我们经常说的“2-8原则”贴近。
二、系统性能评估参考标准
影响性能因素 |
评判标准 |
||
好 |
坏 |
糟糕 |
|
CPU |
user% + sys%< 70% |
user% + sys%= 85% |
user% + sys% >=90% |
内存 |
Swap In(si)=0 Swap Out(so)=0 |
Per CPU with 10 page/s |
More Swap In & Swap Out |
磁盘 |
iowait % < 20% |
iowait % =35% |
iowait % >= 50%
|
三、性能分析工具和命令
1.常用系统命令
vmstat、sar、iostat、netstat、free、ps、top等
2.常用组合方式
• 用vmstat、sar、iostat检测是否是CPU瓶颈
• 用free、vmstat检测是否是内存瓶颈
• 用iostat检测是否是磁盘I/O瓶颈
• 用netstat检测是否是网络带宽瓶颈
3、用工具进行分析
Ø Vmstat
列表含义:
Procs
r:运行和等待cpu时间片的进程数,这个值如果长期大于系统CPU的个数,说明CPU不足,需要增加CPU。
b:在等待资源的进程数,比如正在等待I/O、或者内存交换等。
Memory
swpd: 虚拟内存使用情况,单位:KB
free: 空闲的内存,单位KB
buff: 被用来做为缓存的内存数,一般对块设备的读写才需要缓冲,单位:KB
cache:表示page cached的内存数量,一般作为文件系统cached,频繁访问的文件都会被cached,如果cache值较大,说明cached的文件数较多,如果此时IO中bi比较小,说明文件系统效率比较好。
Swap
si: 从磁盘交换到内存的交换页数量,单位:KB/秒
so: 从内存交换到磁盘的交换页数量,单位:KB/秒
I/O
bi: 发送到块设备的块数,单位:块/秒
bo: 从块设备接收到的块数,单位:块/秒
System
in: 每秒的中断数,包括时钟中断
cs: 每秒的环境(上下文)切换次数
注意:如果 r经常大于 4 ,且id经常少于40,表示cpu的负荷很重。
如果si,so 长期不等于0,表示内存不足。
如果disk 经常不等于0, 且在 b中的队列大于3, 表示 io性能不好。
cpu
us:用户进程消耗的CPU 时间百分比。us的值比较高时,说明用户进程消耗的cpu时间多,但是如果长期大于50%,就需要考虑优化程序或算法。
sy:内核进程消耗的CPU时间百分比。Sy的值较高时,说明内核消耗的CPU资源很多。
根据经验,us+sy的参考值为70%,如果us+sy大于 70%说明可能存在CPU资源不足。
Ø Sar分析cpu性能
命令行 sar -u 1 4,结果
列表说明:
%user:用户进程消耗的CPU 时间百分比。
%nice:运行正常进程所消耗的CPU 时间百分比。
%system:系统进程消耗的CPU时间百分比。
%iowaitIO:等待所占用的CPU时间百分比。
%steal:在内存相对紧张的环境下, 被强制等待(involuntary wait)虚拟CPU的时间
%idle:CPU处在空闲状态的时间百分比。
具体参考:LinuxCPU利用率计算原理及内核实现( http://ilinuxkernel.com/?p=333)
Ø Free评估内存性能
这个指标跟Dragoon的memory usage完全一致。
Ø I/O性能评估
l iostat命令
各列含义:
tps平均每秒钟的IO请求次数
Blk_read/s表示每秒读取的数据块数。
Blk_wrtn/s表示每秒写入的数据块数。
Blk_read表示读取的所有块数。
Blk_wrtn表示写入的所有块数。
如果Blk_wrtn/s值很大,表示磁盘的写操作很频繁,可以考虑优化磁盘或者优化程序,如果Blk_read/s值很大,表示磁盘直接读取操作很多,可以将读取的数据放入内存中进行操作。
对于这两个选项的值没有一个固定的大小,根据系统应用的不同,会有不同的值,但是有一个规则还是可以遵循的:长期的、超大的数据读写,肯定是不正常的,这种情况一定会影响系统性能。
Ø 网络性能评估
l netstat -antl 查看所有tcp status
注意:可以通过netstat查看是否timewait过多的情况,导致端口不够用,在短连接服务中且大并发情况下,要不系统的 net.ipv4.tcp_tw_reuse、net.ipv4.tcp_tw_recycle两个选项打开,允许端口重用。具体这两个属性如何用,移步线上/etc/sysctl.conf文件配置,有注释。
Ø sar查看网卡性能
各列含义:
IFACELAN接口
rxpck/s每秒钟接收的数据包
txpck/s每秒钟发送的数据包
rxbyt/s每秒钟接收的字节数
txbyt/s每秒钟发送的字节数
rxcmp/s每秒钟接收的压缩数据包
txcmp/s每秒钟发送的压缩数据包
rxmcst/s每秒钟接收的多播数据包
其实中间的IFACELAN bond0是虚拟设备。在RH中,多个物理网卡帮定为一个逻辑bonding设备,通过把多个物理网卡帮定为一个逻辑设备,可以实现增加带宽吞吐量,提供冗余。
参考文档
如何进行虚拟化和模式选择,请参考下面两篇文章。
RHLinux下双网卡bondinghttp://www.douban.com/group/topic/2537474/
linuxbonding实现冗余和负载均衡http://hi.baidu.com/nan5715077/blog/item/0cedf2247c06ac2cd5074246.html
sar是一个优秀的一般性能监视工具,它可以输出Linux所完成的几乎所有工作的数据.
参考文献:http://hi.baidu.com/colddloc/blog/item/d63e16fd6965cc1109244d94.html