Linux 系统监测工具

uptime

[~]$ uptime
13:24:46 up 207 days, 3:27, 2 users, load average: 1.45, 1.34, 1.33

system time: 系统当前时间13:24:46 
system uptime:系统运行时间207天3小时27分 
users:当前登入系统的用户数 
load average:过去的1分钟,5分钟,15分钟系统的负载情况,越小越好。

将单核CPU理解为一座桥,而系统中的任务看成一辆辆要过桥的汽车。当负载为1时,桥满负荷,汽车一个接一个有序过桥。若大于1,则形成拥堵,汽车需要排队过桥。

  • load average = 1.0                        
  • load average = 0.5                       
  • load average = 1.7 

NOTE: N核CPU,满负荷运行,其load average = N。 —— UNDERSTANDING LINUX CPU LOAD

free

[~]$ free -m
total used free shared buffers cached
Mem: 59093 33708 25385 0 4683 23460
-/+ buffers/cache: 5564 53529
Swap: 2055 0 2055

Mem 物理内存 
59093:物理内存大小,单位MB。 
33708:已用物理内存量;包含bufferscached。 
25385:剩余物理内存量。 
0:共享内存,弃用。 
4683:缓冲区大小 
23460:cache大小

buffers 与 cached 大小已经包含在used中,即已用内存中,划出一部分用于特殊用途。

-/+ buffers/cache 
5564: 减去buffers与cache内存量,系统已使用内存量。5564  33708 - 4683 - 23460 
53529:加上buffers与cache内存量,系统剩余内存量。 53529  25385 + 4683 + 23460

NOTE: buffers 与 cached 为临时空间,可以被系统自动释放。因而,只有第二行中,free量少时,才表明内存吃紧。 
参考:Linux ate my ram!

Swap 磁盘上的虚拟内存

2055: 交换空间大小为2055MB 
0: 已使用0MB 
2055:剩余2055MB

Buffer 与 Cache
- Buffer: 用于缓冲,快写慢,速度不匹配,存在数据积压现象,将数据丢在缓冲区,慢设备慢慢拿走数据。
- Cache:用于缓存,快读慢,由于速度不匹配,存在等待现象,将热数据存于缓存,加快访问速度。

mpstat

监控CPU利用率

总览

[~]$ mpstat 1
Linux 2.6.32.57-tlinux_xenU-1.1.1-state (153_92) 03/19/16 _x86_64_ (8 CPU)

14:52:50 CPU %usr %nice %sys %iowait %irq %soft %steal %guest %idle
14:52:50 all 0.55 0.00 0.17 0.00 0.00 0.00 0.00 0.00 99.27

usr:用户空间CPU使用占比 
sys:内核空间CPU使用占比 
nice:低优先级进程使用CPU占比。nice值大于0。 
iowait:CPU等待IO占比 
irq:CPU处理硬中断占比 
soft:CPU处理软中断占比 
idle:CPU空闲时间占比 
gueststeal与虚拟机有关,暂不涉及。

NOTE: 如果存在nice值大于0的进程,%nice才会有百分比。nice值[-20 ~ 19], nice为19,进程优先级最低。 
调整方法:renice -n nice_val -p pid

查看某个

[~]$ mpstat -P 0
Linux 2.6.32.57-tlinux_xenU-1.1.1-state (153_92) 03/19/16 _x86_64_ (8 CPU)

14:55:17 CPU %usr %nice %sys %iowait %irq %soft %steal %guest %idle
14:55:17 0 0.82 0.00 0.18 0.00 0.00 0.00 0.00 0.00 98.99

NOTE: 查看全部CPU Core: -P ALL

持续打印

#每两秒打印一次
mpstat 2

#每两秒打印一次,共打印5次
mpstat 2 5

注意: 使用mpstat,通常加上时间间隔,否则打印是系统启动到统计点时的CPU状况。

top

top 命令包含了uptime,free,mpstat,总览系统各种参数。

top - 15:29:53 up 645 days,  2:15,  4 users,  load average: 0.37, 0.40, 0.37
Tasks: 221 total, 1 running, 220 sleeping, 0 stopped, 0 zombie
Cpu(s): 1.5%us, 0.2%sy, 0.0%ni, 98.3%id, 0.0%wa, 0.0%hi, 0.0%si, 0.0%st
Mem: 60511924k total, 26581256k used, 33930668k free, 2937116k buffers
Swap: 2104504k total, 3060k used, 2101444k free, 18262296k cached

PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
30032 root 20 0 42772 24m 888 S 9.9 0.0 1481:52 sap1005
2895 root 20 0 27432 15m 1268 S 0.7 0.0 640:22.07 safe_TsysAgent.

简述:

  • 第一行: 等同uptime
  • 第二行:进程相关 
    221: 进程总数 。 
    1:  运行进程数目。正在运行和等待运行的进程,教科书上的:就绪态与运行态。 
    220: 阻塞进程数目。等待IO或者调用sleep函数。 
    0:  停止状态进程数目。收到STOP信号后获得停止状态,收到CONT信号,失去STOP状态;ctrl+z发送STOP信号。 
    0:  僵尸进程数目。子进程已死,但没有被父进程回收,僵尸。
  • 第三行:等同mpstat
  • 第四行:等同free

列表标题

 PID:     进程标识符
 USER: 进程拥有者
 PR: 进程优先权 [数越小,进程优先级越高]
 NI: NICE Value [PR = PR + NI,因此,NI为负数,PR小,优先级高;NI可以手动调整]
 VIRT: 进程虚拟内存大小 [进程总得寻址空间大小]
 RES: 进程实际占用物理内存大小
 SHR: 共享内存大小,比如动态链接库
 S: 进程状态
 CPU: 进程CPU占用率
 MEM: 进程内存占用率
 TIME+: 进程运行占用的CPU时间
 COMMAND: 启动进程的命令

VIRT vs RES vs SHR 
RES 进程实际占用物理内存大小,与%MEM强相关。SHR 可以其他进程共享的内存空间。比如,依赖一个C公共库,那么整个库的地址空间被加入VIRT,而被载入内存的公共库函数被算入RESSHR

iostat

系统IO性能检测利器

# -d 取消显示CPU信息,-x 显示扩展信息
[~] iostat -d -x 2
Linux 2.6.32.43-tlinux-1.0.10-default 03/23/16 _x86_64_ (24 CPU)

Device: rrqm/s wrqm/s r/s w/s rsec/s wsec/s avgrq-sz avgqu-sz await svctm %util
sda 0.00 20.50 0.00 4.00 0.00 196.00 49.00 0.04 10.50 10.00 4.00
sdb 0.00 12194.00 0.00 93.00 0.00 91644.00 985.42 143.00 2231.66 10.75 100.00
sdc 0.00 3480.00 0.50 85.50 4.00 20900.00 243.07 49.79 380.53 10.12 87.00

rrqm/s and wrqm/s 每秒合并读写请求数。简单的说,就是合并读写请求,临近的扇区,一起读写。 
rsec/s and wsec/s 设备每秒读写扇区数。 
r/s and w/s 每秒向该设备提出的读写请求次数,该数据为合并读写请求后的数据。 
avgrq-sz 每个请求的平均读写扇区数。 avgrp-sz = (rsec/s + wsec/s) / (r/s + w/s) 
avgqu-sz平均队列长度 
svctm设备处理请求的平均时间(ms)。指的是读写请求脱离linux内核调度,进入设备读写阶段所耗时间。 
await IO请求的平均响应时间。await = svctm + quitm (等于 设备处理时间 + 队列等待时间) 
util可以简单的理解为:单位时间内,设备繁忙比。比如,10秒钟,有6秒在进行读写,则util = 60%。 
    计算公式:util = 单位时间内读写次数 * 每次平均读写时间 * 100% = ( r + w ) * ( svctm / 1000 ) * 100%

  • quitm 为虚拟值,可以通过await - svctm获得。
  • util 高,并不代表磁盘成为了瓶颈,可能磁盘仅是满负荷运行,但如果quitm过高,则说明等待时间高,IO成为瓶颈。

磁盘性能不佳:svctm高,await高;内核IO调度不佳:await高,svctm低

注意

  • 不要使用iostat直接查看,iostat显示系统开机到当前统计点的平均,没有参考价值
  • 使用 iostat -d -x 2即加上统计间隔,统计时间间隔内的数据
  • awaitsvctm差别过大,则IO成为瓶颈

参考

netstat

查看系统网络连接

查看监听套接字 -a

#默认不显示监听套接字
netstat -a

禁止dns查找 -n

#netstat默认通过dns查找,将ip映射成主机名,速度慢
netstat -an

查看套接字所属进程pid -p

[~]# netstat -anp
Active Internet connections (servers and established)
Proto Recv-Q Send-Q Local Address Foreign Address State
PID/Program name
tcp 0 0 x.x:56000 0.0.0.0:* LISTEN 25310/sshd

指定协议 
-t:tcp 
-u:udp

[~]# netstat -anu
Active Internet connections (servers and established)
Proto Recv-Q Send-Q Local Address Foreign Address State
udp 0 0 x.x:46469 0.0.0.0:*

Recv-Q: 套接字收到数据放到缓冲区中,还没有被进程读走 
Send-Q: 进程将数据写入缓冲区,还没有发送出去

NOTE: 通常Recv-Q与Send-Q都为0,如果二者一直不为0,则需要进行排查。

spch2008@ubuntu:~$ netstat -anp | grep server
Active Internet connections (servers and established)
tcp 0 0 127.0.0.1:8989 0.0.0.0:* LISTEN 1277/server
tcp 65 0 127.0.0.1:8989 127.0.0.1:55785 ESTABLISHED 1278/server

client 不停的向server发送数据,而server一直阻塞不读取client发送的数据,导致数据在server缓冲区中积压。

vmstat

[root@153_92 /data/chengsun/code/mpstat]# vmstat -S m 2        
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 3 34714 3007 18715 0 0 0 5 0 0 1 0 99 0 0

procs

r:等待运行的进程数目,即run queue中进程数。 
b:阻塞状态的进程数目。

Run queue: 就绪态进程,进程调度器从run queue取进程运行。

memory 
swpd: 交换空间使用量 
free: 物理内存可用量 
buff: buffer使用内存大小 
cache:cache使用内存大小

free命令进行详细查看

swap 
si:每秒从交换空间移到物理内存的数据量。 
so:每秒从物理内存移到交换空间的数据量。

如果siso过大,则说明内存成为了瓶颈。数据不停的在内存与交换空间移动。

io 
bi:每秒从块设备读入的数据量 
bo:每秒向块设备写入的数据量

NOTE: 网卡与硬盘都属于块设备。

system 
in: 每秒中断数。 
cs: 每秒上下文切换次数。进程过多,此值较大。

如果IObi或者bo过大,则in也会过高,因为CPU通过中断来获取IO读写通知。

cpu 
us: 用户空间CPU耗时百分比 
sy: 内核空间CPU耗时百分比 
id: CPU空闲时间耗时百分比 
wa: CPU等待IO耗时百分比 
st: 虚拟机相关,忽略

NOTE: 同mpstat。

tcpdump

常用参数

指定接口 -i

# 默认监听eth0
tcpdump -i eth1

# 关闭dns解析
tcpdump -n -i eth1

指定协议

tcpdump -n -i eth1 tcp

支持协议有:tcp,udp,icmp,ip

指定端口

tcpdump -n -i eth1 port 36000

指定ip

#src 
tcpdump -n -i eth1 src x.x.x.x

#dst
tcpdump -n -i eth1 dst x.x.x.x

显示mac地址-e

tcpdump -n -i eth1 -e
过滤组合

且:&& or and 
或:|| or or 
非:!

#指定源ip与目的端口
tcpdump -n -i eth1 "src host 10.4.83.17 && dst port 36000"

#指定ip与协议
tcpdump -n -i eth1 "src host 10.4.83.17 and tcp"

#排除tcp协议
tcpdump -n -i eth1 "src 10.4.83.17 and ! tcp"

#指定mac地址

详细过滤参数TCPDUMP filters

显示方式

-A: ASCII 方式显示 
-XX: 十六进制与ASCII方式显示

[~]# tcpdump -i eth1 -n -XX
0x0000: 0009 0f09 0002 0016 3ea5 8e79 0800 4500 ........>..y..E.
0x0010: 0b6c f20d 4000 4006 6fec 0a01 995c 0aaa .l..@.@.o....\..
0x0020: 1f8b dd93 2704 a349 18b5 baa0 debc 8010 ....'..I........

NOTE: tcpdump默认捕获每个包的前68个字节,如果需要调整,通过参数-s指定。 -s0代表捕获全部包内容。

读写文件

-w: 捕获内容写入文件 
-r: 解析捕获文件内容

# 捕获
tcpdump -i eth1 -n -w net.packet

# 解析
tcpdump -n -r net.packet
字段含义
[#]# tcpdump -n -i eth1
18:38:01.452434 IP 1.1.1.2.49347 > 1.1.1.8.etlservicemgr: Flags [S], seq 2981118633, win 14600, options [mss 1460,sackOK,TS val 1073478406 ecr 0,nop,wscale 7], length 0

18:38:01.457968 IP 1.1.1.6.webcache > 1.1.1.2.52794: Flags [.], ack 2109036236, win 14, options [nop,nop,TS val 1484369469 ecr 1073478397], length 0

  • 18:38:01.452434 时间戳,18时38分01秒452434微秒
  • IP 协议
  • 1.1.1.2.49347 源IP与源端口
  • 1.1.1.8.etlservicemgr 目的IP与目的端口
  • Flags TCP状态。
  • seq 2981118633 TCP SYN序号
  • win 14600 源机器窗口大小
  • potions TCP选项
  • length TCP数据包大小,SYN包没有数据,因此为0

Flags 
[S] - SYN (Start Connection) 
[.] - No Flag Set 
[P] - PSH (Push Data) 
[F] - FIN (Finish Connection) 
[R] - RST (Reset Connection)

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值