Linux常用监控系统命令
Posted 腾云T
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Linux常用监控系统命令相关的知识,希望对你有一定的参考价值。
监控系统的状态
使用w查看当前系统的负载,示例代码如下:
[root@centos ~]# w
04:37:11 up 2:46, 2 users, load average: 0.00, 0.01, 0.03
USER TTY FROM LOGIN@ IDLE JCPU PCPU WHAT
root tty1 01:51 2:03m 0.21s 0.21s -bash
root pts/0 192.168.60.200 02:23 7.00s 0.11s 0.01s w
第一行从左面开始显示的信息依次为: 时间,系统运行时间,登录用户数,平均负载。第二行开始以及下面所有行,告诉我们的信息是,当前登录的都有哪些用户,以及他们从哪里登录的等等。值得着重关注的是第一行中的‘load average’后面的三个数值。
这三个数值分别表示1分钟内系统的平均负载值、5分钟内系统的平均负载值、15分钟系统的平均负载值,这个值代表单位时间内CPU活动的进程数。这个值越大说明你的服务器压力也大。一般情况下只要不超过服务器CPU数量就没有关系。
查看服务器CPU数量:
[root@centos ~]# cat /proc/cpuinfo |head -n20
processor : 0
vendor_id : GenuineIntel
cpu family : 6
model : 158
model name : Intel(R) Core(TM) i5-7500 CPU @ 3.40GHz
stepping : 9
microcode : 0xb4
cpu MHz : 3404.941
cache size : 6144 KB
physical id : 0
siblings : 1
core id : 0
cpu cores : 1
apicid : 0
initial apicid : 0
fpu : yes
fpu_exception : yes
cpuid level : 22
wp : yes
flags : fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat pse36 clflush dts mmx fxsr sse sse2 ss syscall nx pdpe1gb rdtscp lm constant_tsc arch_perfmon pebs bts nopl xtopology tsc_reliable nonstop_tsc aperfmperf eagerfpu pni pclmulqdq ssse3 fma cx16 pcid sse4_1 sse4_2 x2apic movbe popcnt tsc_deadline_timer aes xsave avx f16c rdrand hypervisor lahf_lm abm 3dnowprefetch epb fsgsbase tsc_adjust bmi1 hle avx2 smep bmi2 invpcid rtm rdseed adx smap xsaveopt dtherm ida arat pln pts hwp hwp_notify hwp_act_window hwp_epp
'/proc/cpuinfo’这个文件记录了CPU的详细信息
使用vmstat监控系统的状态,示例代码如下:
[root@centos ~]# vmstat
procs -----------memory---------- ---swap-- -----io---- -system-- ------cpu-----
r b swpd free buff cache si so bi bo in cs us sy id wa st
2 0 0 2276760 2108 142660 0 0 24 3 59 66 0 0 100 0 0
与上面讲的w相比,vmstat更能具体的看出哪里(CPU,内存,磁盘等)有压力,vmstat命令打印结果共分为6部分:procs,memory,swap,io,system,cpu. 需要重点关注一下 r b si so bi bo 这几列。
-
procs 显示进程相关信息
r: 表示运行和等待CPU时间片的进程数,如果长期大于服务器CPU的个数,则说明CPU不够用了;b:表示等待资源的进程数,比如等待I/O,内存等;
-
memory内存相关信息
swpd:表示切换到交换分区中的内存数量;
free:当前空闲的内存数量;
buff:缓冲大小(即将写入磁盘的);
cache:缓存大小(从磁盘中读取的); -
swap内存交换情况
si :由交换区写入内存的数据量;
so:由内存写入到交换区的数据量; -
io磁盘使用情况
bi :从块设备读取数据的量(读磁盘);
bo:从块设备写入数据的量(写磁盘); -
system显示采集间隔内发生的中断次数
in :表示在某一时间间隔中观测到的每秒设备中断数;
cs:表示每秒产生的上下切换次数; -
CPU 显示CPU的使用状态
us:显示了用户下所花费CPU时间的百分比;
sy:显示系统花费CPU时间百分比;
id :表示CPU处于空闲状态的时间百分比;
wa:表示I/O等待所占用CPU时间百分比;
st :表示被偷走的CPU所占百分比(一般都为0,不用关注);
这些参数经常关注的是r列,b列,和wa列,如果磁盘IO压力很大是bi以及bo这两列数值会比较高,另外,当si,so两列数值比较高,并且不断变化是,说明内存不够了。
使用vmstat查看系统状态
使用vmstat命令通常使用下面这种形式,示例代码如下。
[root@centos ~]# vmstat 1 5
\\procs -----------memory---------- ---swap-- -----io---- -system-- ------cpu-----
r b swpd free buff cache si so bi bo in cs us sy id wa st
2 0 0 2276012 2108 145064 0 0 53 5 66 80 0 0 100 0 0
0 0 0 2276012 2108 145096 0 0 0 0 88 84 0 0 100 0 0
0 0 0 2276012 2108 145096 0 0 0 0 77 75 0 0 100 0 0
0 0 0 2276012 2108 145096 0 0 0 0 83 78 0 0 100 0 0
0 0 0 2276012 2108 145096 0 0 0 0 96 89 0 0 100 0 0
上面代码表示,每隔一秒打印一次状态,共打印5次。
top查看进程所占系统资源,示例代码如下:
[root@centos ~]# top
top - 21:20:43 up 1:00, 2 users, load average: 0.00, 0.01, 0.05
Tasks: 102 total, 1 running, 101 sleeping, 0 stopped, 0 zombie
%Cpu(s): 0.0 us, 0.3 sy, 0.0 ni, 99.7 id, 0.0 wa, 0.0 hi, 0.0 si, 0.0 st
KiB Mem : 2526480 total, 2275328 free, 103624 used, 147528 buff/cache
KiB Swap: 2752508 total, 2752508 free, 0 used. 2255660 avail Mem
PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
743 root 20 0 305080 6136 4772 S 0.3 0.2 0:03.10 vmtoolsd
1 root 20 0 125208 3744 2488 S 0.0 0.1 0:00.76 systemd
2 root 20 0 0 0 0 S 0.0 0.0 0:00.00 kthreadd
3 root 20 0 0 0 0 S 0.0 0.0 0:00.09 ksoftirqd/0
5 root 0 -20 0 0 0 S 0.0 0.0 0:00.00 kworker/0:0H
6 root 20 0 0 0 0 S 0.0 0.0 0:00.00 kworker/u256:0
7 root rt 0 0 0 0 S 0.0 0.0 0:00.00 migration/0
8 root 20 0 0 0 0 S 0.0 0.0 0:00.00 rcu_bh
9 root 20 0 0 0 0 S 0.0 0.0 0:00.35 rcu_sched
top命令可以动态监控进程所占系统资源,每隔3秒变一次。top命令重点查看的还是下面的进程使用系统资源详细状况。在top状态下,按“shift+m”,可以按照内存使用大小排序。
top-bn1可以非动态打印系统资源使用情况,示例代码如下:
[root@centos ~]# top -bn1
top - 21:25:28 up 1:04, 2 users, load average: 0.00, 0.01, 0.05
Tasks: 102 total, 1 running, 101 sleeping, 0 stopped, 0 zombie
%Cpu(s): 0.0 us, 6.2 sy, 0.0 ni, 93.8 id, 0.0 wa, 0.0 hi, 0.0 si, 0.0 st
KiB Mem : 2526480 total, 2275328 free, 103620 used, 147532 buff/cache
KiB Swap: 2752508 total, 2752508 free, 0 used. 2255664 avail Mem
PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
1 root 20 0 125208 3744 2488 S 0.0 0.1 0:00.76 systemd
2 root 20 0 0 0 0 S 0.0 0.0 0:00.00 kthreadd
3 root 20 0 0 0 0 S 0.0 0.0 0:00.09 ksoftirqd/0
5 root 0 -20 0 0 0 S 0.0 0.0 0:00.00 kworker/0:0H
6 root 20 0 0 0 0 S 0.0 0.0 0:00.00 kworker/u256:0
7 root rt 0 0 0 0 S 0.0 0.0 0:00.00 migration/0
8 root 20 0 0 0 0 S 0.0 0.0 0:00.00 rcu_bh
9 root 20 0 0 0 0 S 0.0 0.0 0:00.35 rcu_sched
和top命令唯一的区别就是,他可以一次性把所有信息输出出来而非动态显示。
free查看内存使用情况,示例代码如下:
[root@centos ~]# free
total used free shared buff/cache available
Mem: 2526480 103352 2275560 8828 147568 2255912
Swap: 2752508 0 2752508
free命令可以查看当前系统的总内存大小以及使用内存的情况。我们还可以加-m或者-g选项分别以M或G为单位打印内存使用状况,示例代码如下:
[root@centos ~]# free free -m
total used free shared buff/cache available
Mem: 2467 101 2222 8 144 2202
Swap: 2687 0 2687
ps查看系统进程,示例代码如下:
[root@centos ~]# ps aux
USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND
root 1 0.0 0.1 125208 3744 ? Ss 20:20 0:00 /usr/lib/systemd/systemd --switched-root --system -
root 2 0.0 0.0 0 0 ? S 20:20 0:00 [kthreadd]
root 3 0.0 0.0 0 0 ? S 20:20 0:00 [ksoftirqd/0]
root 5 0.0 0.0 0 0 ? S< 20:20 0:00 [kworker/0:0H]
root 6 0.0 0.0 0 0 ? S 20:20 0:00 [kworker/u256:0]
root 7 0.0 0.0 0 0 ? S 20:20 0:00 [migration/0]
root 8 0.0 0.0 0 0 ? S 20:20 0:00 [rcu_bh]
root 9 0.0 0.0 0 0 ? R 20:20 0:00 [rcu_sched]
root 10 0.0 0.0 0 0 ? S 20:20 0:00 [watchdog/0]
root 12 0.0 0.0 0 0 ? S 20:20 0:00 [kdevtmpfs]
root 13 0.0 0.0 0 0 ? S< 20:20 0:00 [netns]
root 14 0.0 0.0 0 0 ? S 20:20 0:00 [khungtaskd]
root 15 0.0 0.0 0 0 ? S< 20:20 0:00 [writeback]
root 16 0.0 0.0 0 0 ? S< 20:20 0:00 [kintegrityd]
root 17 0.0 0.0 0 0 ? S< 20:20 0:00 [bioset]
root 18 0.0 0.0 0 0 ? S< 20:20 0:00 [kblockd]
root 19 0.0 0.0 0 0 ? S< 20:20 0:00 [md]
root 25 0.0 0.0 0 0 ? S 20:20 0:00 [kswapd0]
root 26 0.0 0.0 0 0 ? SN 20:20 0:00 [ksmd]
root 27 0.0 0.0 0 0 ? SN 20:20 0:00 [khugepaged]
root 28 0.0 0.0 0 0 ? S< 20:20 0:00 [crypto]
root 36 0.0 0.0 0 0 ? S< 20:20 0:00 [kthrotld]
ps命令可以查看你所管理的系统都有哪些进程在运行,其实在上面介绍的top命令就可以,但是不容易看,ps可以专门显示系统进程。
下面介绍一下几个参数的一样
-
PID:进程的ID,在Linux内核管理进程中靠pid来识别和管理某一个进程。
-
STAT:表示进程的状态,进程状态分为以下几种
D 不能中断的进程(通常为IO)
R 正在运行中的进程
S 已经中断的进程,通常情况下,系统中大部分进程都是这个 状态
T 已经停止或者暂停的进程,如果我们正在运行一个命令,可以按Ctrl -Z 让它暂停,那么我们用ps查看就会显示T这个状态
W 这个应该是说,从内核2.6xx以后,表示为没有足够的内存也分配
X 已经死掉的进程(这可好像从来不会出现)
Z 僵尸进程,杀不掉、打不死的垃圾进程,如果占系统一小点资源,没有关系,一般不会出现
< 高优先级进程
N 低优先几进程
L 在内存中被锁了内存分页
s 主进程
l 多线程进程netstat 查看网络状况,示例代码如下:
[root@centos ~]# netstat -lntp
Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name
tcp 0 0 0.0.0.0:80 0.0.0.0:* LISTEN 1014/nginx: master
tcp 0 0 0.0.0.0:22 0.0.0.0:* LISTEN 1001/sshd
tcp 0 0 127.0.0.1:25 0.0.0.0:* LISTEN 1230/master
tcp6 0 0 :::21 :::* LISTEN 1008/vsftpd
tcp6 0 0 :::22 :::* LISTEN 1001/sshd
tcp6 0 0 ::1:25 :::* LISTEN 1230/master
netstat命令用来打印网络连接状况、系统所开放端口、路由表等信息。最常用的关于netstat的命令就是netstat-lnp (打印当前系统启动哪些端口)以及netstat-an (打印网络连接状况)。
[root@centos ~]# netstat -an
Active Internet connections (servers and established)
Proto Recv-Q Send-Q Local Address Foreign Address State
tcp 0 0 0.0.0.0:80 0.0.0.0:* LISTEN
tcp 0 0 0.0.0.0:22 0.0.0.0:* LISTEN
tcp 0 0 127.0.0.1:25 0.0.0.0:* LISTEN
tcp 0 52 192.168.60.20:22 192.168.60.160:49717 ESTABLISHED
tcp6 0 0 :::21 :::* LISTEN
tcp6 0 0 :::22 :::* LISTEN
tcp6 0 0 ::1:25 :::* LISTEN
udp 0 0 127.0.0.1:323 0.0.0.0:*
udp6 0 0 ::1:323 :::*
raw6 0 0 :::58 :::* 7
如果你所管理的服务器是一台提供web服务(80端口)的服务器,那你可以使用netstat -an|grep 80 查看当前连接web服务的有哪些IP了。
以上是关于Linux常用监控系统命令的主要内容,如果未能解决你的问题,请参考以下文章