fanlong0212

  博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理

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)。
  • 第二行是项目的说明,从第三行开始每行代表一个用户。这些项目具体如下:
    1. USER:登录的用户名。
    2. TTY:登录终端。
    3. FROM:从哪个 IP 地址登录。
    4. LOGIN@:登录时间。
    5. IDLE:用户闲置时间。
    6. JCPU:和该终端连接的所有进程占用的 CPU 运算时间。这个时间里并不包括过去的后台作业时间,但是包括当前正在运行的后台作业所占用的时间。
    7. PCPU:当前进程所占用的 CPU 运算时间。
    8. 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

 

posted on 2019-02-13 10:59  fanlong0212  阅读(266)  评论(0)    收藏  举报