51 Linux系统管理-查看设备性能工具以及方法
1、vmstat命令详解:监控系统资源
vmstat 是 Linux 中的一个综合性能分析工具,可以用来监控 CPU 使用、进程状态、内存使用、虚拟内存使用、磁盘输入/输出状态等信息。
vmstat 命令格式如下:
[root@localhost ~]# vmstat [刷新延时 刷新次数]
例如:
[root@localhost proc]# vmstat 1 3 #使用vmstat检测,每隔1秒刷新一次,共刷新3次 procs ——memory—— swap —io system ——cpu—— r b swpd free buff cache si so bi bo in cs us sy id wa st r b swpd free buff cache si so bi bo in cs us sy id wa st 0 0 0 407376 55772 84644 0 0 5 2 9 10 0 0 100 0 0 0 0 0 407368 55772 84644 0 0 0 0 12 10 0 0 100 0 0 0 0 0 407368 55772 84644 0 0 0 0 15 13 0 0 100 0 0
解释一下这个命令的输出。
1) procs:进程信息字段:
- -r:等待运行的进程数,数量越大,系统越繁忙。
- -b:不可被唤醒的进程数量,数量越大,系统越繁忙。
2) memory:内存信息字段:
- -swpd:虚拟内存的使用情况,单位为KB。
- -free:空闲的内存容量,单位为KB。
- -buff:缓冲的内存容量,单位为KB。
- -cache:缓存的内存容量,单位为KB。
3) swap:交换分区信息字段:
- -si:从磁盘中交换到内存中数据的数量,单位为KB。
- -so:从内存中交换到磁盘中数据的数量,单位为KB。
这两个数越大,表明数据需要经常在磁盘和内存之间进行交换,系统性能越差。
4) io:磁盘读/写信息字段:
- -bi:从块设备中读入的数据的总量,单位是块。
- -bo:写到块设备的数据的总量,单位是块。
这两个数越大,代表系统的 I/O 越繁忙。
5) system:系统信息字段:
- -in:每秒被中断的进程次数。
- -cs:每秒进行的事件切换次数。
这两个数越大,代表系统与接口设备的通信越繁忙。
6) cpu:CPU信息字段:
- -us:非内核进程消耗CPU运算时间的百分比。
- -sy:内核进程消耗CPU运算时间的百分比。
- -id:空闲CPU的百分比。
- -wa:等待I/O所消耗的CPU百分比。
- -st:被虚拟机所盗用的CPU百分比。
本机是一台测试用的虚拟机,并没有多少资源被占用,所以资源占比都比较低。如果服务器上的资源占用率比较高,那么使用 vmstat 命令查看到的参数值就会比较大。我们就需要手工进行干预,如果是非正常进程占用了系统资源,则需要判断这些进程是如何产生的,不能一杀了之;如果是正常进程占用了系统资源,则说明服务器需要升级了。
本机是一台测试用的虚拟机,并没有多少资源被占用,所以资源占比都比较低。如果服务器上的资源占用率比较高,那么使用 vmstat 命令查看到的参数值就会比较大。我们就需要手工进行干预,如果是非正常进程占用了系统资源,则需要判断这些进程是如何产生的,不能一杀了之;如果是正常进程占用了系统资源,则说明服务器需要升级了。
2、dmesg命令:显示开机时的内核检测信息
在系统启动过程中,内核还需要进行一次系统检测,这些内核检测信息会被记录在内存当中。我们是否可以查看内核检测信息呢?使用dmesg 命令就可以查看这些信息。我们一般利用这个命令查看系统的硬件信息。
dmesg 命令格式如下:
[root@localhost ~]# dmesg
例如:
[root@localhost ~]# dmesg | grep CPU #查看CPU的信息 Transmeta TransmetaCPU SMP:Allowing 1 CPUs, 0 hotplug CPUs NR_CPUS:32 nr_cpumask_bits:32 nr_cpu_ids:1 nr_node_ids:1 PERCPU:Embedded 14 pages/cpu @c1a00000 s35928 r0 d21416 u2097152 Initializing CPU#0 CPU:Physical Processor ID:0 mce:CPU supports 0 MCE banks CPU0:Intel(R) Core(TM) i7-3630QM CPU @ 2.40GHz stepping 09 Brought up 1 CPUs microcode:CPU0 sig=0x306a9, pf=0x1, revision=0x12 [root@localhost ~]# dmesg | grep eth0 #查看第一块网卡的信息 eth0:registered as PCnet/PCI II 79C970A eth0:link up eth0:no IPv6 routers present
3、free命令:查看内存使用状态
free 命令可以查看系统内存和 swap 交换分区的使用情况,其输出和 top 命令的内存部分非常相似。
free 命令格式如下:
[root@localhost ~]# free [选项]
选项:
- -b:以字节为单位显示;
- -k:以 KB 为单位显示,默认显示;
- -m:以 MB 为单位显示;
- -g:以 GB 为单位显示;
例如:
[root@localhost ~]# free total used free shared buffers cached Mem: 625344 219704 405640 0 56852 85276 -/+ buffers/cache: 77576 547768 Swap: 524280 0 524280
解释一下这个命令的输出。
- 第一行:total 是总内存数,used 是已经使用的内存数,free 是空闲的内存数,shared 是多个进程共享的内存总数,buffers 是缓冲内存数,cached 是缓存内存数。默认单位是 KB。
- 第二行:-/buffers/cache 的内存数,相当于第一行的 used-buffers-cached。+/buffers/cache 的内存数,相当于第一行的 free+buffers+cached。
- 第三行:total 是 swap 交换分区的总数;used 是已经使用的 swap 交换分区数,free 是空闲的 swap 交换分区数。默认单位是 KB。
4、查看CPU信息方法(超简单)
CPU 的主要信息保存在 /proc/cpuinfo 这个文件中,我们只要查看这个文件,就可以知道 CPU 的相关信息。
命令如下:
[root@localhost ~]# cat /proc/cpuinfo processor :0 #逻辑CPU编号 vendor_id :GenuineIntel #CPU制造厂商 cpu family :6 #产品的系列代号 model :58 #CPU系列代号 model name :Intel(R) Core(TM) i7-3630QM CPU @ 2.40GHz #CPU系列的名字、编号、主频 stepping :9 #更新版本 cpu MHz :2394.649 #实际主频 cache size :6144 KB #二级缓存 fdiv_bug :no fdiv_bug :no hlt_bug :no f00f_bug :no coma_bug :no fpu :yes fpu_exception :yes cpuid level :13 wp :yes flags :fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat pse36 clflush dts acpi mmx fxsr sse sse2 ss nx rdtscp lm constant_tsc up arch_perfmon pebs bts xtopology tsc_reliable nonstop_tsc aperfmperf unfair_spinlock pni pclmulqdq ssse3 cx16 sse4_1 sse4_2 popcnt aes xsave avx hypervisor lahf_lm ida arat epb xsaveopt pln pts dts #CPU的功能标识 bogomips :4789.29 clflush size :64 cache_alignment:64 address sizes :40 bits physical, 48 bits virtual power management:
5、查看本机登陆用户信息(w、who、last和lastlog命令)
如果我们想要知道 Linux 服务器上目前已经登录的用户信息,则可以使用 w 或 who 命令来进行查询。
w 命令
先看看 w 命令,如下:
[root@localhost ~]# w 09:54:22 up 9:50, 2 users, load average:0.00, 0.00, 0.00 USER TTY FROM LOGIN@ IDLE JCPU PCPU WHAT root tty1 - 09:53 57.00s 0.02s 0.02s -bash root pts/0 192.168.0.108 09:53 0.00s 0.09s 0.06s w
解释一下这个命令的输出。
- 第一行其实和 top 命令的第一行非常类似,主要显示了系统当前时间、开机多久(up)、有多少用户登录(users),以及 1 分钟、5 分钟、15 分钟前的平均负载(load average)。
- 第二行是项目的说明,从第三行开始每行代表一个用户。这些项目具体如下:
- USER:登录的用户名。
- TTY:登录终端。
- FROM:从哪个 IP 地址登录。
- LOGIN@:登录时间。
- IDLE:用户闲置时间。
- JCPU:和该终端连接的所有进程占用的 CPU 运算时间。这个时间里并不包括过去的后台作业时间,但是包括当前正在运行的后台作业所占用的时间。
- PCPU:当前进程所占用的 CPU 运算时间。
- WHAT:当前正在运行的命令。
从 w 命令的输出中已知,Linux 服务器上已经登录了两个 root 用户,一个是从本地终端 1 登录的(tty1),另一个是从远程终端 1 登录的(pts/0),登录的来源 IP 是 192.168.0.108。
who命令
who 命令比 w 命令稍微简单,也可以用来查看系统中已经登录的用户。命令如下:
[root@localhost ~]# who root tty1 2013-06-07 09:53 root pts/0 2013-06-07 09:53 (192.168.0.108) #用户名 登录终端 登录时间(登录来源IP)
如果原先登录的用户现在已经退出登录,那么是否还能查看呢?当然可以,这时就需要使用 last 和 lastlog 命令了。
last命令
我们先来看看 last 命令,如下:
[root@localhost ~]# last #查询当前已经登录和过去登录的用户信息 root pts/0 192.168.0.108 Fri Jun 7 09:53 still logged in root tty1 Fri Jun 7 09:53 still logged in root pts/0 192.168.0.101 Fri Jun 7 06:53 - 09:52 (02:59) root pts/1 192.168.0.103 Fri Jun 7 04:12 - 04:30 (00:18) #用户名 登录终端 登录IP 登录时间 - 退出时间(在线时间) reboot system boot 2.6.32-279.el6.i Thu Jun 6 23:53 - 00:03 (00:09) #还能看到系统的重启时间 …省略部分输出…
last 命令默认是去读取 /var/log/wtmp 日志文件的,这是一个二进制文件,不能直接用 vi 编辑,只能通过 last 命令调用。
lastlog命令
再来看看 lastlog 命令,如下:
[root@localhost ~]# lastlog #查看系统中所有用户的最后一次登录时间、登录端口和来源IP 用户名 端口 来自 最后登录时间 root pts/0 192.168.0.108 五 6月 7 09:53:46 +0800 2013 bin **从未登录过** daemon **从未登录过** adm **从未登录过** lp **从未登录过** sync **从未登录过** …省略部分输出…
lastlog 命令默认是去读取 /var/log/lastlog 日志文件的,这个文件同样是二进制文件,不能直接用 vi 编辑,需要使用 lastlog 命令调用。
6、查看系统与内核信息(uname、file和lsb_release -a)
uname 命令可以用来查看系统与内核的相关信息,命令格式如下:
[root@localhost ~]# uname [选项]
选项:
- -a:查看系统所有相关信息;
- -r:查看内核版本;
- -s:查看内核名称;
例如:
[root@localhost ~]# uname -a Linux localhost.localdomain 2.6.32-279.el6.i686 #1 SMP Fri Jun 22 10:59:55 UTC 20.2 i686 i686 i386 GNU/Linux [root@localhost ~]# uname -r 2.6.32-279.el6.i686
如果我们想要判断当前系统的位数,则可以通过 file 命令来判断系统文件(主要是系统命令)的位数,进而推断系统的位数。命令如下:
[root@localhost ~]# file /bin/ls /bin/ls:ELF 32-bit LSB executable, Intel 80386, version 1 (SYSV), dynamically linked (uses shared libs), for GNU/Linux 2.6.18, stripped #很明显,当前系统是32位的
如果我们想要查询当前 Linux 系统的发行版本,则可以使用“lsb_release -a”命令。命令如下:
[root@localhost ~]# lsb_release -a LSB Version::core-4.0-ia32:core-4.0-noarch:graphics-4.0-ia32:graphics-4.0-noar ch:printing-4.0-ia32:printing-4.0-noarch Distributor ID:CentOS Description: CentOS release 6.3 (Final) Release: 6.3 Codename: Final #当前使用的Linux的发行版本是CentOS 6.3
如果提示没有lsb_release这个命令,则可以通过查看 Cat /etc/xxx-release XX为发行版名称。如 centos-release
[root@localhost anacron]# cat /etc/centos-release CentOS Linux release 6.3
浙公网安备 33010602011771号