微信设置水滴昵称,个性中带点萌
这篇文章主要介绍一些常用的linux服务器性能监控命令,包括命令的常用参数、指标的含义以及一些交互操作。
命令本身并不复杂,关键是你对操作系统基础知识的掌握和理解,先来看看下面几个问题:
相信基础好的司机心里已经有个大致的答案,那如果你一知半解,请仔细阅读全文,部分答案会在相关的命令讲解中揭晓。对于理解错误或者不到位的地方希望老司机不吝赐教。
free 命令是监控linux 内存使用最常用的命令,参数[-m]表示以M 为单位查看内存使用情况(默认为kb)。
[root@localhost ~]# free -m
total used free shared buffers cached
Mem: 482 130 352 0 9 36
-/+ buffers/cache: 83 399
Swap: 991 0 991
那么,什么是虚拟内存?
现在明白什么是虚拟内存,什么时候要用到虚拟内存了吧。所以,当你在监控linux操作系统的时候,如果发现系统使用了交换内存,那么说明系统的 ** 物理内存已经用完了**,需要排查是哪些程序占用了物理内存,对内存进行进一步的深入分析。还有一点要说的就是,交换内存的速度是非常慢的。
uptime 命令是监控系统性能最常用的一个命令,主要是来统计系统当前的运行状态,即负载情况。
[root@localhost~]# uptime
05:41:01 up 3 min, 1 user, load average: 0.23, 0.33, 0.15
输出信息依次是:系统现在的时间,系统从上次开机到现在运行了多长时间,系统当前有多少个登录用户,系统在1分钟内、5 分钟内、15 分钟内的平均负载。 如果load average值长期大于系统CPU的个数则说明CPU很繁忙,负载很高,可能会影响系统性能,导致系统卡顿响应时间长等等。 load average值与系统CPU的个数对比怎么理解?load average的值表示在单位时间内运行的进程数,而CPU一个内核同一时间只能处理一个进程,一台16核CPU的服务器如果load average大于16,那说明系统正处于超负荷运行状态。
vmstat 可以对操作系统的内存信息、进程状态、CPU 活动、磁盘等信息进行监控,不足之处是无法对某个进程进行深入分析。
[root@localhost~]# vmstat 2 3 -S M
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 0 235 11 88 0 0 32 2 21 23 0 1 98 1 0
0 0 0 235 11 88 0 0 0 0 16 19 0 0 100 0 0
0 0 0 235 11 88 0 0 0 0 13 19 0 0 100 0 0
2表示每2秒取样一次,3表示取数3次,-S表示单位,可选有 k 、K 、m 、M。
vmstat命令的结果显示比较全面,可以看到操作系统的内存信息、进程状态、CPU 活动、磁盘等信息,不足之处是无法对某个进程进行深入分析。但是以上每一列的含义都是要重点掌握!具体的参数和用法在这里就不列举了,需要的可自行百度了解。
好吧,我只是为了引起大家的注意。
sar 是非常强大性能分析命令,通过 sar 命令可以全面的获取系统的 CPU、运行队列、磁盘 I/O、交换区、内存、cpu 中断、网络等性能数据。老司机必备! sar安装直接yum install -y sysstat,这里有个坑就是安装完成后直接使用的话会报错,提示文件不存在,解决办法是先执行sar -o 2 3,来生成所需文件,之后使用就正常啦。
[root@localhost~]# sar -u 2 3
Linux 2.6.32-573.22.1.el6.i686 (localhost) 2016年11月02日 _i686_ (1 CPU)
06时58分50秒 CPU %user %nice %system %iowait %steal %idle
06时58分52秒 all 0.00 0.00 0.50 0.00 0.00 99.50
06时58分54秒 all 0.00 0.00 0.50 0.00 0.00 99.50
06时58分56秒 all 0.00 0.00 0.50 0.00 0.00 99.50
平均时间: all 0.00 0.00 0.50 0.00 0.00 99.50
2表示每2秒取样一次,3表示取数3次,-u表示CPU使用率。
在所有的显示中,我们应主要注意%iowait 和%idle,%iowait 的值过高,表示硬盘存在 I/O 瓶颈, %idle 值高,表示 CPU 较空闲,如果%idle 值高但系统响应慢时,有可能是 CPU 等待分配内存, 此时应加大内存容量。%idle 值如果持续低于 10,那么系统的 CPU 处理能力相对较低,表 明系统中最需要解决的资源是 CPU。
[root@localhost~]# sar -q 2 3
Linux 2.6.32-573.22.1.el6.i686 (localhost) 2016年11月02日 _i686_ (1 CPU)
07时16分31秒 runq-sz plist-sz ldavg-1 ldavg-5 ldavg-15
07时16分33秒 0 118 0.16 0.07 0.09
07时16分35秒 0 118 0.16 0.07 0.09
07时16分37秒 0 118 0.15 0.07 0.09
平均时间: 0 118 0.16 0.07 0.09
2表示每2秒取样一次,3表示取数3次,-q显示运行队列的大小,它与系统当时的平均负载相同。
[root@localhost~]# sar -r 2 3
Linux 2.6.32-573.22.1.el6.i686 (localhost) 2016年11月02日 _i686_ (1 CPU)
07时22分04秒 kbmemfree kbmemused %memused kbbuffers kbcached kbcommit %commit
07时22分06秒 241108 269556 52.79 12736 90360 543584 21.11
07时22分08秒 241108 269556 52.79 12736 90360 543584 21.11
07时22分10秒 241108 269556 52.79 12736 90360 543584 21.11
平均时间: 241108 269556 52.79 12736 90360 543584 21.11
2表示每2秒取样一次,3表示取数3次,-r显示显示系统内存使用情况。
[root@localhost~]# sar -B 2 3
Linux 2.6.32-573.22.1.el6.i686 (localhost) 2016年11月02日 _i686_ (1 CPU)
07时26分26秒 pgpgin/s pgpgout/s fault/s majflt/s pgfree/s pgscank/s pgscand/s pgsteal/s %vmeff
07时26分28秒 0.00 0.00 18.91 0.00 52.24 0.00 0.00 0.00 0.00
07时26分30秒 0.00 0.00 19.60 0.00 52.76 0.00 0.00 0.00 0.00
07时26分32秒 0.00 5.97 15.42 0.00 52.24 0.00 0.00 0.00 0.00
平均时间: 0.00 2.00 17.97 0.00 52.41 0.00 0.00 0.00 0.00
2表示每2秒取样一次,3表示取数3次,-B显示系统内存分页情况。
[[root@localhost~]# sar -W 2 3
Linux 2.6.32-573.22.1.el6.i686 (localhost) 2016年11月02日 _i686_ (1 CPU)
08时31分10秒 pswpin/s pswpout/s
08时31分12秒 0.00 0.00
08时31分14秒 0.00 0.00
08时31分16秒 0.00 0.00
平均时间: 0.00 0.00
2表示每2秒取样一次,3表示取数3次,-W显示系统虚拟内存分页情况。
[root@localhost~]# sar -b 2 3
Linux 2.6.32-573.22.1.el6.i686 (localhost) 2016年11月02日 _i686_ (1 CPU)
08时36分27秒 tps rtps wtps bread/s bwrtn/s
08时36分29秒 0.00 0.00 0.00 0.00 0.00
08时36分31秒 0.00 0.00 0.00 0.00 0.00
08时36分33秒 0.00 0.00 0.00 0.00 0.00
平均时间: 0.00 0.00 0.00 0.00 0.00
2表示每2秒取样一次,3表示取数3次,-b显示缓冲区使用情况。
[root@localhost~]# sar -v 2 3
Linux 2.6.32-573.22.1.el6.i686 (localhost) 2016年11月02日 _i686_ (1 CPU)
09时43分12秒 dentunusd file-nr inode-nr pty-nr
09时43分14秒 4466 768 11506 1
09时43分16秒 4466 768 11506 1
09时43分18秒 4466 768 11506 1
平均时间: 4466 768 11506 1
2表示每2秒取样一次,3表示取数3次,-v显示进程、节点、文件和锁表状态。
[root@localhost~]# sar -d 2 3
Linux 2.6.32-573.22.1.el6.i686 (localhost) 2016年11月02日 _i686_ (1 CPU)
09时37分46秒 DEV tps rd_sec/s wr_sec/s avgrq-sz avgqu-sz await svctm %util
09时37分48秒 dev8-0 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00
09时37分48秒 dev253-0 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00
09时37分48秒 dev253-1 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00
2表示每2秒取样一次,3表示取数3次,-d显示设备使用情况。
iostat 是对系统的磁盘 I/O 操作进行监控,它的输出主要显示磁盘读写操作的统计信息,同时给出 CPU 的使用情况。同 vmstat 一样,iostat 不能对某个进程进行深入分析,仅对操作系统的整体情况进行分析。
[root@localhost~]# iostat -x
Linux 2.6.32-573.22.1.el6.i686 (localhost) 2016年11月02日 _i686_ (1 CPU)
avg-cpu: %user %nice %system %iowait %steal %idle
0.04 0.00 0.30 0.23 0.00 99.43
Device: rrqm/s wrqm/s r/s w/s rsec/s wsec/s avgrq-sz avgqu-sz await r_await w_await svctm %util
sda 0.16 0.07 0.23 0.12 13.67 1.51 43.06 0.01 22.07 8.37 49.13 11.15 0.39
dm-0 0.00 0.00 0.31 0.19 13.08 1.50 29.58 0.01 29.07 18.88 45.61 7.92 0.39
dm-1 0.00 0.00 0.02 0.00 0.15 0.00 8.00 0.00 5.47 5.47 0.00 4.12 0.01
-x显示所有磁盘分区的情况。
[root@localhost~]# iostat -d
Linux 2.6.32-573.22.1.el6.i686 (localhost) 2016年11月02日 _i686_ (1 CPU)
Device: tps Blk_read/s Blk_wrtn/s Blk_read Blk_wrtn
sda 0.35 13.40 1.50 212052 23818
dm-0 0.49 12.82 1.50 202898 23800
dm-1 0.02 0.15 0.00 2400 0
-d显示磁盘使用情况。
[root@localhost~]# iostat -c 2 3
Linux 2.6.32-573.22.1.el6.i686 (localhost) 2016年11月02日 _i686_ (1 CPU)
avg-cpu: %user %nice %system %iowait %steal %idle
0.04 0.00 0.29 0.24 0.00 99.43
avg-cpu: %user %nice %system %iowait %steal %idle
0.00 0.00 0.00 0.00 0.00 100.00
avg-cpu: %user %nice %system %iowait %steal %idle
0.00 0.00 0.50 0.00 0.00 99.50
-c显示系统CPU使用情况,2表示时间间隔2s,3表示取数3次。
我想这个命令大家肯定已经相当熟悉,甚至有些童鞋有用过。top 命令能够实时监控系统的运行状态, 并且可以按照 CPU、 内存和执行时间进行排序,同时 top 命令还可以通过交互式命令进行设定显示,通过 top 命令可以查看即时活跃的进程。
top - 05:57:44 up 2 min, 1 user, load average: 0.47, 0.37, 0.15
Tasks: 92 total, 1 running, 91 sleeping, 0 stopped, 0 zombie
Cpu(s): 0.0%us, 0.3%sy, 0.0%ni, 99.3%id, 0.0%wa, 0.0%hi, 0.3%si, 0.0%st
Mem: 510664k total, 268192k used, 242472k free, 11464k buffers
Swap: 2064380k total, 0k used, 2064380k free, 90252k cached
PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
745 root 20 0 0 0 0 S 0.3 0.0 0:00.04 flush-253:0
1724 root 20 0 12468 3392 2640 S 0.3 0.7 0:00.45 sshd
1 root 20 0 2900 1408 1204 S 0.0 0.3 0:03.05 init
2 root 20 0 0 0 0 S 0.0 0.0 0:00.01 kthreadd
3 root RT 0 0 0 0 S 0.0 0.0 0:00.00 migration/0
4 root 20 0 0 0 0 S 0.0 0.0 0:00.02 ksoftirqd/0
5 root RT 0 0 0 0 S 0.0 0.0 0:00.00 stopper/0
6 root RT 0 0 0 0 S 0.0 0.0 0:00.02 watchdog/0
7 root 20 0 0 0 0 S 0.0 0.0 0:00.19 events/0
8 root 20 0 0 0 0 S 0.0 0.0 0:00.00 events/0
9 root 20 0 0 0 0 S 0.0 0.0 0:00.00 events_long/0
10 root 20 0 0 0 0 S 0.0 0.0 0:00.00 events_power_ef
11 root 20 0 0 0 0 S 0.0 0.0 0:00.00 cgroup
12 root 20 0 0 0 0 S 0.0 0.0 0:00.00 khelper
13 root 20 0 0 0 0 S 0.0 0.0 0:00.00 netns
14 root 20 0 0 0 0 S 0.0 0.0 0:00.00 async/mgr
15 root 20 0 0 0 0 S 0.0 0.0 0:00.00 pm
16 root 20 0 0 0 0 S 0.0 0.0 0:00.00 sync_supers
17 root 20 0 0 0 0 S 0.0 0.0 0:00.00 bdi-default
18 root 20 0 0 0 0 S 0.0 0.0 0:00.00 kintegrityd/0
19 root 20 0 0 0 0 S 0.0 0.0 0:00.21 kblockd/0
20 root 20 0 0 0 0 S 0.0 0.0 0:00.00 kacpid
21 root 20 0 0 0 0 S 0.0 0.0 0:00.00 kacpi_notify
22 root 20 0 0 0 0 S 0.0 0.0 0:00.00 kacpi_hotplug
23 root 20 0 0 0 0 S 0.0 0.0 0:00.00 ata_aux
24 root 20 0 0 0 0 S 0.0 0.0 0:00.02 ata_sff/0
25 root 20 0 0 0 0 S 0.0 0.0 0:00.00 ksuspend_usbd
26 root 20 0 0 0 0 S 0.0 0.0 0:00.01 khubd
直接在命令行输入top回车之后就可以看到上面的效果了,内容是不是很丰富,先逐个介绍参数的含义。
其实不难发现,top包含了前面介绍的一些命令的结果,如uptime、free、iostat等,那除了内容比较全面之外,top还提供了一些交互操作,让我们能更进一步的分析系统性能。 下面我介绍几个常用的交互操作:
Netstat 命令用于显示本机网络连接、运行端口、路由表等信息,常用命令有两个netstat -plnt和netstat -i,我们来看看。
[root@localhost~]# netstat -i
Kernel Interface table
Iface MTU Met RX-OK RX-ERR RX-DRP RX-OVR TX-OK TX-ERR TX-DRP TX-OVR Flg
eth1 1500 0 4249 0 0 0 5786 0 0 0 BMRU
lo 65536 0 0 0 0 0 0 0 0 0 LRU
[root@localhost~]# netstat -plnt
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:22 0.0.0.0:* LISTEN 1073/sshd
tcp 0 0 127.0.0.1:25 0.0.0.0:* LISTEN 1152/master
tcp 0 0 :::3306 :::* LISTEN 1623/mysqld
tcp 0 0 :::80 :::* LISTEN 1209/httpd
tcp 0 0 :::21 :::* LISTEN 1265/proftpd
tcp 0 0 :::22 :::* LISTEN 1073/sshd
tcp 0 0 ::1:25 :::* LISTEN 1152/master
tcp 0 0 :::443 :::* LISTEN 1209/httpd
strace 常用来跟踪进程执行时的系统调用和所接收的信号。 在 Linux 世界,进程不能直接访问硬件设备,当进程需要访问硬件设备(比如读取磁盘文件,接收网络数据等等)时,必须由用户态模式切换至内核态模式,通过系统调用访问硬件设备。strace 可以跟踪到一个进程产生的系统调用,包括参数,返回值,执行消耗的时间。 那在什么情况下需要用到strace呢?比如用户CPU高的时候,你可以通过dump线程栈等方式进行深入分析,而系统CPU高时,先分析I/O,此时如果I/O高那么就可以确定是I/O问题了,如果I/O不高,那么想进一步分析就需要用到strace啦。
[root@localhost~]# strace -c -f -r -t -p 1724
Process 1724 attached
^CProcess 1724 detached
% time seconds usecs/call calls errors syscall
------ ----------- ----------- --------- --------- ----------------
100.00 0.000039 20 2 read
0.00 0.000000 0 2 write
0.00 0.000000 0 3 select
0.00 0.000000 0 8 rt_sigprocmask
------ ----------- ----------- --------- --------- ----------------
100.00 0.000039 15 total
以上命令中-p 172的172指的是你的进程id。
篇幅比较长,读起来难免枯燥,学习linux监控我认为首先要知道它有哪些命令,分别能做什么,其次要掌握每个命令的用法,最后一定要了解命令输出参数的含义。做到以上几点,我觉得你就已经具备了简单的监控和分析的能力,这个再去使用一些监控工具,就so easy了。
微信设置水滴昵称,个性中带点萌
以上就是良许教程网为各位朋友分享的Linux相关知识。