1. 系统整体性能评估(uptime命令)
[root@hadoop5 ~]# uptime
10:02:02 up 105 days, 22:02, 1 user, load average: 1.49, 1.37, 1.52
a. 观察 load average 的输出值, 这个值有三个带两位小数的数字: 1.49, 1.37, 1.52, 分别代表着过去1分钟, 5分钟, 15分钟的平均负载量, 负载量越低意味着你的性能越好.
b. 例如, 本输出中系统有6个CPU, 如果load average的三个值长期大于6时, 说明CPU很繁忙, 可能会影响系统性能, 但是偶尔大于6时, 一般不会影响性能, 相反,如果load average的输出值小于CPU的个数,则表示CPU还有空闲的时间片,比如本例中的输出,CPU是非常空闲的。
c. 查看本机物理CPU个数: cat /proc/cpuinfo| grep "physical id"| sort| uniq| wc -l
2. CPU性能评估
2.1 利用vmstat命令监控系统CPU.该命令可以显示关于各系统各种资源之间相关性能的简要信息. 这里我们要用它来看CPU一个负载情况.
[root@hadoop6 ~]# vmstat 2 1000
procs -----------memory---------- ---swap-- -----io---- --system-- -----cpu-----
r b swpd free buff cache si so bi bo in cs us sy id wa st
3 0 3984 167175776 664116 86981280 0 0 24 164 0 0 2 1 97 0 0
1 0 3984 167183152 664116 86978216 0 0 0 24014 15333 16686 4 1 95 0 0
1 0 3984 167167904 664116 86989392 0 0 0 22706 16445 16892 4 1 94 0 0
参数说明:
Procs:
r列: 表示运行和等待CPU时间片的进程数, 这个值如果长期大于系统CPU个数, 说明CPU不足, 需要增加CPU
b列: 表示在等待资源的进程数, 比如正在等待I/O, 或者内存交换等.
CPU:
us列: 显示了用户进程消耗的CPU百分比, us的比值比较高时, 说明用户进程消耗的cpu时间多, 但是如果长期大于50%,就需要考虑优化程序或者算法.
sy列: 显示了内核进程消耗CPU的时间百分比, sy的值比较高时, 说明内核消耗的CPU资源很多.
根据经验, us+sy 的参考值为80%, 如果us+sy 大于80%说明可能存在CPU资源不足.
2.2 利用 sar 命令监控系统CPU
sar功能很强大,可以对系统的每个方面进行单独的统计,但是使用sar命令会增加系统开销,不过这些开销是可以评估的,对系统的统计结果不会有很大影响。
下面是sar命令对某个系统的CPU统计输出:
[root@hadoop6 ~]# sar -u 3 5 #显示系统所有cpu在采样时间内的负载状态
Linux 3.13.6 (hadoop6.adauto.com) 05/21/2015 _x86_64_ (48 CPU)
10:19:04 AM CPU %user %nice %system %iowait %steal %idle
10:19:07 AM all 3.62 0.00 0.84 0.01 0.00 95.53
10:19:10 AM all 3.78 0.00 0.84 0.01 0.00 95.37
10:19:13 AM all 3.94 0.00 0.89 0.01 0.00 95.16
10:19:16 AM all 3.35 0.00 0.87 0.01 0.00 95.76
10:19:19 AM all 3.69 0.00 0.87 0.00 0.00 95.44
Average: all 3.68 0.00 0.86 0.01 0.00 95.45
参数说明:
a. %user列: 显示用户进程消耗的CPU时间百分比
b. %nice列: 显示运行正常进程所消耗的CPU时间百分比
c. %system列: 显示了系统进程消耗的CPU时间百分比
d. %iowait列: 显示了IO等待所占用的CPU时间百分比
e. %steal列: 显示了内存相对紧张的环境下pagein强制对不同的页面进行的steal操作
f. %idle列: 显示了CPU处在空闲状态的时间百分比
3. 内存性能评估
3.1 利用free指令监控内存free是监控linux内存使用状况最常用的指令, 看下面一个输出:
[root@hadoop6 ~]# free -m #查看以M为单位的内存使用情况
total used free shared buffers cached
Mem: 258443 94429 164013 0 648 84211
-/+ buffers/cache: 9569 248873
Swap: 16383 3 16380
一般有这样一个经验公式:
应用程序可用内存/系统物理内存 >70%时, 表示系统内存资源非常充足, 不影响系统性能
应用程序可用内存/系统物理内存 <20%时, 表示系统内存资源紧缺, 需要增加系统内存
20% < 应用程序可用内存/系统物理内存 < 70% 时, 表示系统内存资源基本能满足应用需求, 暂时不影响系统性能.
3.2 利用vmstat命令监控内存
[root@hadoop6 ~]# vmstat 2 1000
procs -----------memory---------- ---swap-- -----io---- --system-- -----cpu-----
r b swpd free buff cache si so bi bo in cs us sy id wa st
3 0 3984 167175776 664116 86981280 0 0 24 164 0 0 2 1 97 0 0
1 0 3984 167183152 664116 86978216 0 0 0 24014 15333 16686 4 1 95 0 0
1 0 3984 167167904 664116 86989392 0 0 0 22706 16445 16892 4 1 94 0 0
参数表示:
memory:
a. swpd列: 表示切换到内存交换区的内存数量(以K为单位), 如果swpd的值不为0, 或者比较大, 只要si,so的值长期为0,这种情况下一般不用担心, 不会影响系统性能.
b. free列: 表示当前空闲的物理内存数量(以k为单位)
c. buff列: 表示buffers cache的内存数量, 一般对块设备的读写才需要缓冲.
d. cache列: 表示page cached的内存数量, 一般作为文件系统cached, 频繁访问的文件都会被cached, 如果cache值比较大, 说明chached的文件数较多, 如果此时IO中bi比较小, 说明文件系统效率比较好.
swap:
a. si列: 表示有磁盘调入内存, 也就是内存进入内存交换区的数量
b. so列: 表示由内存调入磁盘, 也就是内存交换区进入内存的数量
一般情况下, si, so 的值都为0, 如果si, so 的值长期不为0 , 则表示系统内存不足, 需要增加系统内存.
4. 磁盘I/O性能评估
4.1 利用iostat评估磁盘性能[root@hadoop5 ~]# iostat 2 3
Linux 3.13.6 (hadoop5.adauto.com) 05/21/2015 _x86_64_ (48 CPU)
avg-cpu: %user %nice %system %iowait %steal %idle
2.00 0.00 0.54 0.01 0.00 97.45
Device: tps Blk_read/s Blk_wrtn/s Blk_read Blk_wrtn
sda 1.86 0.49 34.45 4476406 315397264
sdb 101.56 1311.90 15463.85 12009138986 141556391976
参数说明:
对上面每项的输出解释如下:
a. Blk_read/s : 表示每秒读取的数据块数
b. Blk_wrtn/s : 表示每秒写入的数据块数
c. Blk_read : 表示读取的所有块数
d. Blk_wrtn : 表示写入的所有块数
Ø 可以通过Blk_read/s和Blk_wrtn/s的值对磁盘的读写性能有一个基本的了解,如果Blk_wrtn/s值很大,表示磁盘的写操作很频繁,可以考虑优化磁盘或者优化程序,如果Blk_read/s值很大,表示磁盘直接读取操作很多,可以将读取的数据放入内存中进行操作。
Ø 对于这两个选项的值没有一个固定的大小,根据系统应用的不同,会有不同的值,但是有一个规则还是可以遵循的:长期的、超大的数据读写,肯定是不正常的,这种情况一定会影响系统性能。
4.2 利用sar评估磁盘性能
通过 "sar -d" 组合, 可以对系统的磁盘IO做一个基本的统计
[root@hadoop5 ~]# sar -d 2 3
Linux 3.13.6 (hadoop5.adauto.com) 05/21/2015 _x86_64_ (48 CPU)
10:52:44 AM DEV tps rd_sec/s wr_sec/s avgrq-sz avgqu-sz await svctm %util
10:52:46 AM dev8-0 1.03 0.00 12.37 12.00 0.00 0.00 0.00 0.00
10:52:46 AM dev8-16 126.80 0.00 51117.53 403.12 0.13 1.06 0.15 1.96
10:52:46 AM DEV tps rd_sec/s wr_sec/s avgrq-sz avgqu-sz await svctm %util
10:52:48 AM dev8-0 1.05 0.00 12.57 12.00 0.00 0.00 0.00 0.00
10:52:48 AM dev8-16 131.41 0.00 51145.55 389.20 0.13 1.03 0.17 2.20
需要关注的几个参数含义:
a. await: 表示平均每次设备I/O操作的等待时间(以毫秒为单位)
b. svctm: 表示平均每次设备I/O操作的服务时间(以毫秒为单位)
c. %util: 表示一秒中有百分之几的时间用于I/O操作
对以磁盘I/O性能, 一般有如下评判标准:
1. 正常情况下svctm应该是小于awit值的, 而svctm的大小和磁盘性能有关, CPU, 内存的负荷也会对svctm值造成影响, 过多的请求也会间接的导致svctm值的增加.
2. await值的大小一般取决与svctm的值和I/O队列长度以及I/O请求模式,如果svctm的值与await很接近,表示几乎没有I/O等待,磁盘性能很好,如果await的值远高于svctm的值,则表示I/O队列等待太长,系统上运行的应用程序将变慢,此时可以通过更换更快的硬盘来解决问题。
3. %util项的值也是衡量磁盘I/O的一个重要指标,如果%util接近100%,表示磁盘产生的I/O请求太多,I/O系统已经满负荷的在工作,该磁盘可能存在瓶颈。长期下去,势必影响系统的性能,可以通过优化程序或者通过更换更高、更快的磁盘来解决此问题。
5. Linux服务器上监控网络带宽的18个常用命令
下面是按功能划分的命令名称。
监控总体带宽使用――nload、bmon、slurm、bwm-ng、cbm、speedometer和netload
监控总体带宽使用(批量式输出)――vnstat、ifstat、dstat和collectl
每个套接字连接的带宽使用――iftop、iptraf、tcptrack、pktstat、netwatch和trafshow
每个进程的带宽使用――nethogs