Linux各种性能参数监控过程详解

来源:互联网 发布:淘宝女装店名起名大全 编辑:程序博客网 时间:2024/06/05 14:53

[Part1:内存监控篇幅]

:wehf1wco001:root > free
             total       used       free     shared    buffers     cached
Mem:      32949628   21523692   11425936          0    3754896   11811096
-/+ buffers/cache:    5957700   26991928
Swap:     16008732          0   16008732

total:总计物理内存的大小。
used:已使用多大。
free:可用有多少。
Shared:多个进程共享的内存总额。
Buffers/cached:磁盘缓存的大小。
第三行(-/+ buffers/cached):
used:已使用多大。
free:可用有多少

Linux内存监控指定进程:占用内存的测量
测量一个进程占用了多少内存,Linux系统为我们提供了一个很方便的方法,/proc目录为我们提供了所有的信息,实际上top等工具也通过这里来获取相应的信息。
/proc/meminfo 机器的内存使用信息  /proc/pid/maps pid为进程号,显示当前进程所占用的虚拟地址。  /proc/pid/statm 进程所占用的内存  [root@localhost ~]# cat /proc/self/statm  654 57 44 0 0 334 0  实际上Top命令也是从这取到参数


[Part2:CPU监控篇幅]

1. 对于每一个CPU来说运行队列不要超过3,例如,如果是双核CPU就不要超过6;
2. 如果CPU在满负荷运行,应该符合下列分布,
a) User Time:65%~70%
b) System Time:30%~35%
c) Idle:0%~5%
3. 对于上下文切换要结合CPU使用率来看,如果CPU使用满足上述分布,大量的上下文切换也是可以接受的。

常用的监视工具有,vmstat, top,dstat和mpstat.
UNKNOWN:ahf1msg001:logs # vmstat 1
procs -----------memory---------- ---swap-- -----io---- --system-- -----cpu------
 r  b   swpd   free   buff  cache   si   so    bi    bo   in   cs us sy id wa st
 0  0    144  48692  94720 3139228    0    0     6    27    1   18  0  0 99  0  0
 0  0    144  47868  94720 3139276    0    0     0  1280 2877 3312  0  1 98  1  0
 0  0    144  48444  94724 3139276    0    0     0  2912 3003 3299  0  1 89 10  0
 0  0    144  48444  94732 3139288    0    0     0   552 1929 1902  0  0 99  1  0

r表示运行队列的大小,
b表示由于IO等待而block的线程数量,
in表示中断的数量,
cs表示上下文切换的数量,
us表示用户CPU时间,
sys表示系统CPU时间,
wa表示由于IO等待而是CPU处于idle状态的时间,
id表示CPU处于idle状态的总时间。

dstat可以给出每一个设备产生的中断数:
# dstat -cip 1
----total-cpu-usage---- ----interrupts--- ---procs---
usr sys idl wai hiq siq| 15 169 185 |run blk new
6    1    91    2    0   0| 12    0 13 | 0 0 0
1    0    99    0    0   0| 0     0 6   | 0 0 0
0    0    100   0    0   0| 18    0 2   | 0 0 0
0    0    100   0    0   0| 0     0 3   | 0 0 0
我们可以看到这里有3个设备号15,169和185.设备名和设备号的关系我们可以参考文件/proc/interrupts, 这里185代表网卡eth1.
# cat /proc/interrupts
CPU0
0: 1277238713 IO-APIC-edge timer
6: 5 IO-APIC-edge floppy
7: 0 IO-APIC-edge parport0
8: 1 IO-APIC-edge rtc
9: 1 IO-APIC-level acpi
14: 6011913 IO-APIC-edge ide0
15: 15761438 IO-APIC-edge ide1
169: 26 IO-APIC-level Intel 82801BA-ICH2
185: 16785489 IO-APIC-level eth1
193: 0 IO-APIC-level uhci_hcd:usb1

mpstat可以显示每个CPU的运行状况,比如系统有4个CPU。我们可以看到:
# mpstat –P ALL 1
Linux 2.4.21-20.ELsmp (localhost.localdomain) 05/23/2006
05:17:31 PM CPU %user %nice %system %idle intr/s
05:17:32 PM all 0.00 0.00 3.19 96.53 13.27
05:17:32 PM 0 0.00 0.00 0.00 100.00 0.00
05:17:32 PM 1 1.12 0.00 12.73 86.15 13.27
05:17:32 PM 2 0.00 0.00 0.00 100.00 0.00
05:17:32 PM 3 0.00 0.00 0.00 100.00 0.00

总体来说,Linux性能监控包含以下方面:
检查系统的运行队列,确保每一个CPU的运行队列不大于3.确保CPU使用分布满足70/30原则(用户70%,系统30%)。如果系统时间过长,可能是因为频繁的调度和改变优先级。CPU Bound进程总是会被惩罚(降低优先级)而IO Bound进程总会被奖励(提高优先级)。


[Part3:NetWork监控篇幅]


用iptraf工具可以清楚的看到每个网卡的工作情况。
# iptraf –d eth0

利用iptraf还可以监听固定TCP端口的流量,如对于Web服务器我们希望监听80端口的流量,对于邮件服务器我们关注25端口的流量。

./tcptrack  -i eth0

:wehf1wco001:root > sar -n DEV 1 5
Linux 2.6.18-128.el5 (wehf1wco001)      08/08/2011

03:39:04 AM     IFACE   rxpck/s   txpck/s   rxbyt/s   txbyt/s   rxcmp/s   txcmp/s  rxmcst/s
03:39:05 AM        lo      0.00      0.00      0.00      0.00      0.00      0.00      0.00
03:39:05 AM      eth0     62.00     52.00   5590.00  34530.00      0.00      0.00      0.00
03:39:05 AM      eth1      0.00      0.00      0.00      0.00      0.00      0.00      0.00

03:39:05 AM     IFACE   rxpck/s   txpck/s   rxbyt/s   txbyt/s   rxcmp/s   txcmp/s  rxmcst/s
03:39:06 AM        lo      0.00      0.00      0.00      0.00      0.00      0.00      0.00
03:39:06 AM      eth0     50.00     25.00   5227.00   2085.00      0.00      0.00      0.00
03:39:06 AM      eth1      0.00      0.00      0.00      0.00      0.00      0.00      0.00

03:39:06 AM     IFACE   rxpck/s   txpck/s   rxbyt/s   txbyt/s   rxcmp/s   txcmp/s  rxmcst/s
03:39:07 AM        lo      0.00      0.00      0.00      0.00      0.00      0.00      0.00
03:39:07 AM      eth0     27.00     11.00   2403.00   1118.00      0.00      0.00      0.00
03:39:07 AM      eth1      0.00      0.00      0.00      0.00      0.00      0.00      0.00


网络中最常见的错误就是冲突,由于网络中目前基本采用交换机环境,因此冲突问题已被消除。但是当网络流量不断增大的时候,就会出现丢包,网卡过载等情况。在网络流量很大的时候我们用sar命令来给出网络中可能的错误:
# sar -n FULL 5 100
Linux 2.6.9-55.ELsmp (sapulpa) 06/23/2007
11:44:32 AM IFACE rxpck/s txpck/s rxbyt/s txbyt/s rxcmp/s txcmp/s rxmcst/s
11:44:37 AM lo 6.00 6.00 424.40 424.40 0.00 0.00 0.00
11:44:37 AM eth0 0.00 0.00 0.00 0.00 0.00 0.00 0.00
11:44:37 AM sit0 0.00 0.00 0.00 0.00 0.00 0.00 0.00
11:44:32 AM IFACE rxerr/s txerr/s coll/s rxdrop/s txdrop/s txcarr/s rxfram/s rxfifo/s txfifo/s
11:44:37 AM lo 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00
11:44:37 AM eth0 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00
11:44:37 AM sit0 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00
11:44:32 AM totsck tcpsck udpsck rawsck ip-frag
11:44:37 AM 297 79 8 0 0

rxerr/s是接受错误率;txerr/s是发送错误率;coll/s冲突率;rxdrop/s接受帧丢失率;txdrop/s发送帧丢失率; txcarr/s载波错误率;rxfram/s帧排列错误;rxfifo/s接受FIFO错误;txfifo/s发送FIFO错误。从上面输出看出各种错 误为零,证明网络工作良好。

Linux性能监控总的来说监视网络性能,我们有遵循一下几点:

1. 检查所有网络接口确保他们都运行在正确的速率;

2. 检查每块网卡的吞吐量确保没有造成过载;

3. 检查流量的类型确保正确的数据流在传送。

[Part3: I/O监控篇幅]

Linux性能监控情况1:同一时间进行大量的I/O操作

在这种情况时我们会发现CPU的wa时间百分比会上升,证明系统的idle时间大部分都是在等待I/O操作。
# vmstat 1
procs -----memory----- ---swap---io---- --system--cpu----
r b swpd free buff cache si so bi bo in cs us sy id wa
3 2 0 55452 9236 1739020 0 0 9352 0 2580 8771 20 24 0 57
2 3 0 53888 9232 1740836 0 0 14860 0 2642 8954 23 25 0 52
2 2 0 51856 9212 1742928 0 0 12688 0 2636 8487 23 25 0 52

从这个输出我们可以看到CPU有50%的时间都在等待I/O操作,我们还可以看到系统的bi值很大,证明系统有大量的I/O请求将磁盘内容读入内存。

没有很好的工具能看到到底是哪个进程在进行I/O读写。但我们可以通过top命令的输出来猜测
# top -d 1
top - 19:45:07 up 1:40, 3 users, load average: 6.36, 5.87, 4.40
Tasks: 119 total, 3 running, 116 sleeping, 0 stopped, 0 zombie
Cpu(s): 5.9% us, 87.1% sy, 0.0% ni, 0.0% id, 5.9% wa, 1.0% hi, 0.0% si
Mem: 2075672k total, 2022668k used, 53004k free, 7156k buffers
Swap: 2031608k total, 132k used, 2031476k free, 1709372k cached
PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ nFLT COMMAND
3069 root 5 -10 450m 303m 280m S 61.5 15.0 10:56.68 4562 vmware-vmx
3016 root 5 -10 447m 300m 280m S 21.8 14.8 12:22.83 3978 vmware-vmx
3494 root 5 -10 402m 255m 251m S 3.0 12.6 1:08.65 3829 vmware-vmx
3624 root 5 -10 401m 256m 251m S 1.0 12.6 0:29.92 3747 vmware-vmx

将top的输出通过faults进行排序。我们可以看到vmware产生最多的page faults。也就是说它进行了大量的IO操作。

Linux性能监控情况2:管道太小

任何I/O操作都需要一定的时间,而且这些时间对于硬盘来说是确定的,它包含磁盘旋转的延时RD(rotation delay)和磁头搜索时间DS(disk seek)。RD由磁盘转速(RPM)决定。RD是磁盘旋转一周所需时间的一半。如RPM为10000.
RPS=RPM/60=166
1/166=0.0006=6ms 磁盘旋转一周要6毫秒
RD=6ms/2=3ms

磁盘平均搜索时间是3ms,数据传输的平均延时是2ms,这样一次I/O操作的平均时间是:
3ms+3ms+2ms=8ms
IOPS=1000/8=125 这块磁盘的每秒IO数(IOPS)为125。所以对于10000RPM的磁盘来说它所能承受的IO操作在IOPS在120~150之间。如果系统的I/O请求超过这个值,就会使磁盘成为系统的瓶颈。

对与系统而言有两种不同种类的I/O压力,连续I/O和随机I/O。

连续I/O常常出现在企业级数据库这样的应用中,需要连续的读取大量数据。这种系统的性能依靠它读取和移动数据的大小和快慢。我们用iostat来监控,会发现rKB/s,wKB/s会很高。
Device: rrqm/s wrqm/s r/s w/s rsec/s wsec/s rkB/s wkB/s avgrq-sz avgqu-sz await svctm %util
/dev/sda 0.00 12891.43 0.00 105.71 0.00 106080.00 0.00 53040.00 1003.46 1099.43 3442.43 26.49 280.00

从输出我们看到w/s=105,wKB/s=53040.所以53040/105=505KB per I/O.

对于随机I/O的系统来说性能的关注点不在搜传输数据的大小和速度,而是在磁盘的IOPS。这类系统的I/O请求比较小但是数量很大,如Web服务器和Mail服务器。他们的性能主要依赖每秒钟可处理的请求数:
# iostat -x 1
avg-cpu: %user %nice %sys %idle
2.04 0.00 97.96 0.00
Device: rrqm/s wrqm/s r/s w/s rsec/s wsec/s rkB/s wkB/s avgrq-sz avgqu-sz await svctm %util
/dev/sda 0.00 633.67 3.06 102.31 24.49 5281.63 12.24 2640.82 288.89 73.67 113.89 27.22 50.00

从输出我们看到w/s=102,wKB/s=2640.所以2640/102=23KB per I/O.因此对于连续I/O系统来说我们要关注系统读取大量数据的能力即KB per request.对于随机I/O系统我们注重IOPS值.

原创粉丝点击