free观察内存使用情况。
free命令常用格式如下:

              [root@initroot ~]# free [-b|-k|-m|-g|-h] [-t] [-s N -c N]
            
选项与参数:
-b :free默认显示的单位是Kbytes,我们可以使用b(bytes)、m(Mbytes)、k(Kbytes)以及g(Gbytes)来指定显示单位!也可以直接让系统自己指定单位(-h);
-t :显示物理内存与swap的总量;
-s :每几秒钟输出一次!方便实时观察数据变化;
-c :输出指定的次数,与-s一起使用
显示目前系统的内存容量:
              [root@initroot ~]# free -m
                            total        used        free      shared  buff/cache   available
              Mem:           4952        2715         344         353        1892        1650
              Swap:          2047          94        1953
            
-m指定以MBytes为单位显示内存信息。从上面的输出可以看出系统中有4952MB左右的物理内存,交换内存swap有2GB左右。
Mem行显示的是物理内存的量, Swap则是内存交换空间的容量。 total是总量, used是已被使用的量, free则是剩余可用的量。 后面的shared/buffers/cached 则是在已被使用的量当中,用来作为缓冲buff及cache的量,这些shared/buffers/cached的用量中, 在系统比较忙碌时, 可以被释出而继续利用!因此后面就有一个available (可用的)数值! 。
我们可以发现这部测试机根本没有什么特别的服务,但是竟然有1892MB左右的cache! Linux系统为了加速系统性能,会将最常使用到的或者是最近使用到的文件数据缓存(cache)下来, 系统要使用该文件时,就直接由内存中取出,而不需要重新读取硬盘,速度就加快了! 因此,物理内存被用光是正常的!因为在测试过程中还是有读/写/执行很多的文件嘛!这些文件就会被系统暂时cache下来,等待下次运作时可以更快速的取出! 也就是说,系统是很有效率的将所有的内存用光,目的是为了让系统的存取效能加速啦!
需要特别关注的是swap容量。一般来说, swap最好不要被使用,系统使用到swap, 绝对是因为物理内存不足才会占用swap。 swap使用率最好不要超过20%, 如果swap的用量超过20% ,就要考虑增加物理内存了!

free命令用于查看内存的使用情况。可以显示系统中物理内存和交换内存的总量,还可以显示内核所用的buffer和caches总量。 在我的系统中运行linux命令,显示结果在下面图中所示:

              peter@peter-VirtualBox:~$ free
                            total        used        free      shared  buff/cache   available
              Mem:        6103580     2406632     1642964      257012     2053984     3277328
              Swap:       2097148           0     2097148
            

其中第一行显示系统物理内存的使用情况,
第二行显示的是swap交换内存的使用情况。
total列表示系统中内存的总量,
used列表示已用内存总量,该列的值可通过如下公式获得:used = total - free - buffers - cache;
free列表示空闲内存容量,
shared为共享内存使用的容量,
buff/cache为buffers和cache所用总量的总和,其中buffers为内核缓冲区所用的内存,cache为页缓存和slabs所用的内存容量。
available列为估算的在不需要swapping内存的情况下,可用物理内存容量。
free默认的显示单位是Kbytes,可以用-b(bytes), -m(Mbytes),-k(Kbytes)或者-g(Gbytes)来指定要显示的单位。实际中更常用的是使用-h来显示易于阅读的输出。 在我的系统中运行free -h命令,显示结果如下所示:

              peter@peter-VirtualBox:~$ free -h
                                total        used        free      shared  buff/cache   available
                Mem:           5.8G        2.3G        1.5G        256M        2.0G        3.1G
                Swap:          2.0G          0B        2.0G
            

需要注意的是swap的使用量。一般来说, swap的used最好是0,最多不要超过20%。 如果您发现swap的使用量超过20% ,那么说明系统的物理内存已经严重不足了。 更多关于free的用法可以通过free -help命令查看或者man free查看更加详细的信息。

第二种查看linux内存使用情况的方法是使用top命令,top输出的第三行和第四行显示当前系统物理内存和交换内存的使用情况,
top命令还可以查看每个进程的内存使用率,在我的系统中运行top命令的显示结果如下所示:

              peter@peter-VirtualBox:~$ top
              top - 13:30:08 up 2 days, 20:19, 1 user, load average: 1.48, 1.29, 1.01
              Tasks: 248 total, 1 running, 200 sleeping, 0 stopped, 2 zombie
              %Cpu(s): 35.0 us, 3.9 sy, 0.0 ni, 60.4 id, 0.7 wa, 0.0 hi, 0.1 si, 0.0 st
              KiB Mem : 8167612 total, 737500 free, 3952744 used, 3477368 buff/cache
              KiB Swap: 2097148 total, 1377488 free, 719660 used. 3482276 avail Mem

              PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
              2553 peter 20 0 4280732 291072 121280 S 126.9 3.6 592:24.96 cinnamon
              2989 peter 20 0 23.314g 576656 67436 S 15.6 7.1 539:55.07 code
              1884 root 20 0 1417644 374688 155184 S 9.3 4.6 84:35.57 Xorg
              2965 peter 20 0 456572 52056 44784 S 3.7 0.6 69:33.87 code
              6151 peter 20 0 647860 25100 10812 S 2.0 0.3 1:38.91 gnome-terminal-
              3241 peter 20 0 3840648 398392 153052 S 1.3 4.9 214:41.55 firefox
              3322 peter 20 0 15.405g 400772 98628 S 1.0 4.9 72:09.03 Web Content
              3643 peter 20 0 2978200 228248 123628 S 1.0 2.8 37:37.78 Web Content
              5450 peter 20 0 43668 3992 3348 R 1.0 0.0 0:00.10 top
              8719 peter 20 0 3291520 291380 76712 S 1.0 3.6 61:19.30 Web Content
              

free和top命令显示的内存信息都是通过读取/proc/meminfo文件生成的,所以我们也可以通过查看/proc/meminfo文件来查看系统的内存使用情况
以上介绍的方法都是在命令行环境下查看,也可以通过图形界面查看系统的内存使用情况,图形界面查看内存使用情况比较常用的工具是System Monitor。
还有一些命令也可以显示内存的使用情况,比如ps、vmstat、memstat等。但这不是这些工具的主要作用。这里不做详细阐述

linux uname命令

回到顶部

uname命令查看系统与内核相关信息,默认只打印内核的名字。如果想要查看所有的系统信息,可以加上-a选项。

              [root@initroot ~]# uname [-asrmpi]
            
选项与参数:
-a :所有系统相关的信息,包括下面的数据都会被列出来;
-s :系统内核名称;
-r :内核的版本;
-m :系统的cpu硬件名称,例如i686或x86_64等;
-p :CPU的类型,与-m类似,只是显示的是CPU的类型!
-i :cpu硬件的平台
输出系统的基本信息:
              [root@initroot ~]# uname -a
              Linux www.initroot.com 4.15.0-65-generic #74-Ubuntu SMP Tue Sep 17 17:06:04 UTC 2019 x86_64 x86_64 x86_64 GNU/Linux
            
uname可以列出当前系统的内核版本、主要硬件平台以及CPU类型等信息。
uname打印的信息来自/proc/version文件。
可以看出Linux主机使用的内核名称为Linux,主机名为www.initroot.com,内核的版本为4.15.0-65-generic,该内核版本建立的日期为2019-9-17, 可运行的硬件平台为x86_64以上等级硬件平台。

linux uptime命令

回到顶部

uptime命令显示出自开机启动以来系统已经运行的时间,以及每1, 5, 15分钟的平均负载。
uptime显示的正是top命令的最上面一行!

              [root@initroot ~]# uptime
              20:45:22 up  8:52,  1 user,  load average: 0.57, 0.40, 0.21
            

linux netstat命令

回到顶部

netstat追踪网络或网卡信息,netstat常被用在网络的监控方面:

              [root@initroot ~]# netstat -[atunlp]
            
选项与参数:
-a :将目前系统上所有的联机、监听、Socket数据都列出来
-t :列出tcp网络封包的数据
-u :列出udp网络封包的数据
-n :不以进程的服务名称,而是显示端口号(port number);
-l :列出目前正在网络监听(listen)的服务;
-p :列出该网络服务的进程PID
列出目前系统已经建立的网络联机与unix socket状态:
              [root@initroot ~]# netstat
              Active Internet connections (w/o servers)              #与网络相关的部分
              Proto Recv-Q Send-Q Local Address           Foreign Address         State      
              tcp        0      0 promote.cache-dns:34894 111.221.29.254:https    ESTABLISHED
              tcp        0      0 promote.cache-dns:53684 139.129.102.64:ssh      ESTABLISHED
              tcp        0      0 promote.cache-dns:37526 139.129.102.64:https    ESTABLISHED
              tcp        0      0 promote.cache-dns:56226 ec2-34-213-147-57:https ESTABLISHED
              tcp        0      0 promote.cache-dns:58176 203.208.50.104:https    ESTABLISHED
              Active UNIX domain sockets (w/o servers)              #本机进程相关(非网络)
              Proto RefCnt Flags       Type       State         I-Node   Path
              unix  2      [ ]         DGRAM                    27105    /run/user/1000/systemd/notify
              unix  2      [ ]         DGRAM                    13844    /run/systemd/journal/syslog
              unix  7      [ ]         DGRAM                    13865    /run/systemd/journal/socket
              unix  23     [ ]         DGRAM                    13924    /run/systemd/journal/dev-log
              unix  2      [ ]         DGRAM                    17236    /var/spool/postfix/dev/log
              unix  3      [ ]         DGRAM                    13835    /run/systemd/notify
              unix  3      [ ]         SEQPACKET  CONNECTED     33448    @00019
              unix  3      [ ]         STREAM     CONNECTED     95754913 /run/user/1000/bus
              unix  3      [ ]         STREAM     CONNECTED     34472    
              unix  3      [ ]         STREAM     CONNECTED     28628    @/tmp/dbus-47Qee9NqBN
              unix  2      [ ]         DGRAM                    17860    
              unix  3      [ ]         STREAM     CONNECTED     38056    
              unix  3      [ ]         STREAM     CONNECTED     33854    
              unix  3      [ ]         STREAM     CONNECTED     29684    
              unix  3      [ ]         STREAM     CONNECTED     29197    
              ...省略...
              unix 3       [ ]         STREAM     CONNECTED     25425  @/tmp/.X11-unix/X0
              unix 3       [ ]         STREAM     CONNECTED     28893
              unix 3       [ ]         STREAM     CONNECTED     21262
            
基本上, netstat的输出分为两大部分,分别是网络与系统自己的进程相关性部分:
分别是网络的联机以及linux上面的socket进程相关性部分。
Internet联机情况的部分:
Proto :网络的封包协议,主要分为 TCP 与 UDP 封包,相关资料请参考服务器篇;
Recv-Q:非由用户程序链接到此 socket 的复制的总 bytes 数;
Send-Q:非由远程主机传送过来的 acknowledged 总 bytes 数;
Local Address :本地端的 IP:port 情况
Foreign Address:远程主机的 IP:port 情况
State :联机状态,主要有建立(ESTABLISED)及监听(LISTEN);
上面其中一条联机的数据意义是:
通过TCP封包的联机,远程的172.16.220.234:48300,联机到本地端的172.16.15.100:ssh,这条联机状态是建立(ESTABLISHED)状态!
更多关于网络的只是参考
除了网络上的联机之外,Linux系统上的进程是可以接收不同进程所发送来的信息, 这就是Linux的socket文件(socket file)。 socket file可以沟通两个进程间的信息,因此进程可以取得对方传送过来的数据。
由于有socket file,因此类似X Window这种需要通过网络连接的软件,目前新版的distributions就以socket来进行窗口接口的联机沟通了。 上面socket file的输出字段有:
Proto :一般就是unix;
RefCnt:连接到此socket的进程数量;
Flags :联机的标志;
Type :socket存取类型。主要有确认联机的STREAM与不需确认的DGRAM两种;
State :若为CONNECTED表示多个进程之间已经联机建立。
Path :socket文件的路径。连接到此socket的相关程序的路径!或者是相关数据输出的路径。
上面输出最后三行在/tmp/.xx底下的文件,就是X Window窗口接口的相关进程啦! PATH指向的就是这些进程要交换数据的socket文件! 可以利用netstat查看哪些进程有启动哪些网络的后门。
找出目前系统上已在监听的网络联机及其PID:
              [root@initroot ~]# netstat -tulnp
              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:443             0.0.0.0:*               LISTEN      337/nginx: master p 
              tcp        0      0 0.0.0.0:3306            0.0.0.0:*               LISTEN      1193/mysqld         
              tcp        0      0 0.0.0.0:8080            0.0.0.0:*               LISTEN      337/nginx: master p 
              tcp        0      0 0.0.0.0:80              0.0.0.0:*               LISTEN      337/nginx: master p 
              tcp        0      0 0.0.0.0:22              0.0.0.0:*               LISTEN      1242/sshd           
              tcp        0      0 0.0.0.0:3000            0.0.0.0:*               LISTEN      32018/node          
              tcp6       0      0 :::80                   :::*                    LISTEN      337/nginx: master p 
              udp        0      0 0.0.0.0:68              0.0.0.0:*                           717/dhclient        
              udp        0      0 172.31.47.31:123        0.0.0.0:*                           492/ntpd            
              udp        0      0 127.0.0.1:123           0.0.0.0:*                           492/ntpd            
              udp        0      0 0.0.0.0:123             0.0.0.0:*                           492/ntpd            
              udp6       0      0 :::123                  :::*                                492/ntpd      
            
除了可以列出监听网络的接口与状态之外,最后一个字段还能够显示服务的PID号以及进程的指令名称! 例如上面的1242/sshd,1242就是进程PID,sshd为服务进程的名。
将0 0.0.0.0:123那个网络服务关闭:
              [root@initroot ~]# kill -9 492
              [root@initroot ~]# killall -9 ntpd
            
主机到底开了几个端口(ports)!其实,主机不论提供什么样的服务, 一定必须要有相对应的program在主机上面执行才行!
举例来说,本站www.initroot.com的Linux主机提供的就是WWW服务,那么一定有一个提供WWW服务进程在运行!
那就是nginx这个软件了!
所以,当我执行了这个程序之后,我的系统自然就可以提供WWW服务了。
那如何关闭啊? 就关掉该程序所触发的那个进程就好了!上面使用kill -9杀掉服务进程并不是专业的做法,正常的做法是使用系统服务管理工具systemctl!

linux dmesg命令

回到顶部

dmesg打印内核产生的信息。
不管是开机启动还是系统运作过程中,内核会产生大量的信息, 在开机的时候内核产生的信息会输出到屏幕,但是这些信息往往一闪而过,很难看清楚。 其实这些内核产生的信息都会被记录到内存中的某个保护区段。 dmesg命令就可以将该区段的信息读出! 因为信息实在太多了,可以配合管道命令| more来查看dmesg信息:

              [root@initroot ~]# dmesg | more
            
查看开机的时候硬盘的相关信息:
              [root@initroot ~]# sudo dmesg | grep -i sda
              [    2.670702] sd 2:0:0:0: [sda] 188743680 512-byte logical blocks: (96.6 GB/90.0 GiB)
              [    2.670707] sd 2:0:0:0: [sda] Write Protect is off
              [    2.670708] sd 2:0:0:0: [sda] Mode Sense: 00 3a 00 00
              [    2.670716] sd 2:0:0:0: [sda] Write cache: enabled, read cache: enabled, doesn't support DPO or FUA
              [    2.702272]  sda: sda1
              [    2.702756] sd 2:0:0:0: [sda] Attached SCSI disk
              [    9.092439] EXT4-fs (sda1): mounted filesystem with ordered data mode. Opts: (null)
              [   17.397932] EXT4-fs (sda1): re-mounted. Opts: errors=remount-ro
            
可以看到主机硬盘的相关信息。

linux vmstat命令

回到顶部

vmstat命令可以实时动态的追踪系统资源的运行状态,vmstat可以侦测CPU、内存、磁盘输入输出状态等信息, 如果想要了解是哪个环节导致系统繁忙和资源紧张,可以使用vmstat命令查看。
vmstat命令常用格式如下:

              [root@initroot ~]# vmstat [-a][-fs][-S 单位][-d][-p 分区] [延迟 [总侦测次数]]
            
选项与参数:
-a :使用inactive/active(活跃与否)取代buffer/cache的内存输出信息;
-f :开机到目前为止,系统复制(fork)的进程数;
-s :将开机至目前为止一些事件导致的内存变化情况列表说明;
-S :指定显示单位。例如K/M取代bytes;
-d :列出磁盘的读写总量统计表;
-p :后面接分区,显示该分区的读写总量统计表
统计当前主机CPU状态,每秒一次,共计三次:
              [root@initroot ~]# 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
              1  0  16908 298580  86508 1867008    0    0    42    20  306   56 10  2 86  2  0
              0  0  16908 298684  86508 1867008    0    0     0     8  820 1549  4  1 95  0  0
              0  0  16908 298808  86508 1867008    0    0     0     0 1178 2155 14  1 85  0  0
            
vmstat命令可以实时追踪系统资源状态变化,可以使用类似vmstat 5每五秒钟更新一次,直到你按下ctrl-c为止。

上面各字段的意义说明如下:
进程(procs):
r:等待运作中的进程数量;
b:不可被唤醒的进程数量。这两个项目越多,代表系统越忙碌.因为系统太忙,所以很多进程就无法被执行或一直在等待而无法被唤醒。
内存(memory):与free命令相同
swpd:虚拟内存被使用的容量;
free:未被使用的内存容量;
buff:用于缓冲存储器;
cache:用于高速缓存。
内存交换空间(swap),如果 si/so的数值太大,表示内存内的数据常常得在磁盘与主存储器之间传来传去,系统效能会很差!
si:由磁盘中将进程取出的量
so:由于内存不足而将没用到的进程写入到磁盘的swap的容量
磁盘读写(io) 如果这部份的值越高,代表系统的I/O非常忙碌!
bi:由磁盘读入的区块数量;
bo:写入到磁盘去的区块数量
系统(system) in:每秒被中断的进程次数 cs:每秒钟进行的事件切换次数; 这两个数值越大,代表系统与接口设备的沟通非常频繁! 这些接口设备当然包括磁盘、网络卡、时间钟等 CPU
us:非内核层的CPU使用状态
sy:内核层所使用的CPU状态
id:闲置的状态
wa:等待I/O所耗费的CPU状态
st:被虚拟机(virtual machine)所盗用的CPU使用状态

如果服务器非常忙碌,记得使用vmstat去看看,到底是哪个部分的资源被使用的最为频繁.
一般来说,如果I/O部分很忙碌的话,你的系统会变的非常慢!
观察系统上所有磁盘的读写状态:

              [root@initroot ~]# vmstat -d
              disk- ------------reads------------ ------------writes----------- -----IO------
                    total merged sectors      ms  total merged sectors      ms    cur    sec
              loop0      0      0       0       0      0      0       0       0      0      0
              loop1      0      0       0       0      0      0       0       0      0      0
              loop2      0      0       0       0      0      0       0       0      0      0
              loop3      0      0       0       0      0      0       0       0      0      0
              loop4      0      0       0       0      0      0       0       0      0      0
              loop5      0      0       0       0      0      0       0       0      0      0
              loop6      0      0       0       0      0      0       0       0      0      0
              loop7      0      0       0       0      0      0       0       0      0      0
              sr0        0      0       0       0      0      0       0       0      0      0
              sda   210220  48481 6556186 3083940  37507  64195 3392736 6398756      0   1176
            

ulimit命令

回到顶部

ulimit命令为BASH 的内置命令,为了防止系统资源的过度使用,bash可以限制用户的某些系统资源,包括可以打开的文件数量, 可以使用的CPU时间,可以使用的内存总量等。
这些都可以通过ulimit命令设置:

              [peter@study ~]$ ulimit [-SHacdfltu] [配额]
            
选项与参数:
-H :hard limit,严格的设定,必定不能超过这个设定的数值;
-S :soft limit,警告的设定,可以超过这个设定值,若超过则有警告讯息。
通常soft会比hard小,例如soft可设定为80而hard设定为100,那么你可以在80~100之间,系统会有警告讯息通知!
-a :后面不接任何选项与参数,可列出所有的限制额度;
-c :当某些程序发生错误时,系统可能会将该程序在内存中的信息写成文件(除错用),这种文件就被称为内核文件(core file)。此为限制每个内核文件的最大容量。
-f :此shell可以建立的最大文件容量(一般可能设定为 2GB)单位为Kbytes
-d :程序可使用的最大段内存(segment)容量;
-l :可用于锁(lock)的内存量
-t :可使用的最大CPU时间(单位为秒)
-u :单一用户可以使用的最大进程(process)数量
列出当前登录用户(假设为一般账号)的所有限制数据数值:
              [peter@study ~]$ ulimit -a
              core file size          (blocks, -c) 0              #0表示没有限制
              data seg size           (kbytes, -d) unlimited
              scheduling priority             (-e) 0
              file size               (blocks, -f) unlimited      #可建立的单一文件大小
              pending signals                 (-i) 19550
              max locked memory       (kbytes, -l) 16384
              max memory size         (kbytes, -m) unlimited
              open files                      (-n) 1024           #同时可开启的文件数量
              pipe size            (512 bytes, -p) 8
              POSIX message queues     (bytes, -q) 819200
              real-time priority              (-r) 0
              stack size              (kbytes, -s) 8192
              cpu time               (seconds, -t) unlimited
              max user processes              (-u) 65535
              virtual memory          (kbytes, -v) unlimited
              file locks                      (-x) unlimited
            
filesystem能够支持的单一文件大小与block大小有关。 但是文件系统的限制容量都允许的太大了!
如果想要让用户建立的文件不要太大时, 可以考虑用ulimit来限制用户可以建立的文件大小!
利用ulimit -f就可以来设定了,注意单位是Kbytes。限制用户仅能建立10MBytes以下文件:
              [peter@study ~]$ ulimit -a | grep 'file size'
              [peter@study ~]$ ulimit -f 10240
              [peter@study ~]$ ulimit -a | grep 'file size'
              core file size (blocks, -c) 0
              file size (blocks, -f) 10240     #最大量为10240Kbyes,相当10Mbytes
              [peter@study ~]$ dd if=/dev/zero of=123 bs=1M count=20
              File size limit exceeded (core dumped) #尝试建立20MB的文件,结果失败了!
              [peter@study ~]$ rm 123
            
如果你一直无法建立一个大容量的文件,很有可能是ulimit的设置限制!
需要注意的是,普通用户以ulimit设定了-f的文件大小, 那么以后只能继续减小文件容量,不能增加文件容量!
恢复ulimit设置最简单的方法就是注销再登入,否则就是得要重新以ulimit设定!
如果想要一直生效,需要写入bash配置文件。
若想要管控用户的ulimit限值, 可以参考pam的介绍。

服务器硬件数据的收集

回到顶部

dmidecode解析硬件配备。 dmidecode可以解析 CPU 型号、主板型号与内存相关的型号等等:

              [root@study ~]# dmidecode -t type
            
选项与参数:
1 :详细的系统数据,含主板的型号与硬件的基础数据;
4 :CPU的相关信息,包括倍频、外频、内核数、内核绪数等;
9 :系统的相关插槽格式,包括PCI, PCI-E等的插槽规格说明;
17:每一个内存插槽的规格,若内有内存,则列出该内存的容量与型号;
详细的 type 项目请 man dmidecode 查询更多的数据,这里仅列出比较常用的项目
列出整个系统的硬件信息,例如主板型号等:
              [root@study ~]# dmidecode -t 1
              # dmidecode 3.1
              Getting SMBIOS data from sysfs.
              SMBIOS 2.5 present.

              Handle 0x0001, DMI type 1, 27 bytes
              System Information
              Manufacturer: innotek GmbH
              Product Name: VirtualBox
              Version: 1.2
              Serial Number: 0
              UUID: B02FA249-A7E1-4EC1-8EE0-6E0F0826AB3E
              Wake-up Type: Power Switch
              SKU Number: Not Specified
              Family: Virtual Machine
            
列出内存相关的数据:
              [root@study ~]# dmidecode -t 17
              # dmidecode 3.1
              SMBIOS 2.5 present.
              Handle 0x1100, DMI type 17, 21 bytes
              Memory Device
              Array Handle: 0x1000
              Error Information Handle: 0x0000
              Total Width: 64 bits
              Data Width: 64 bits
              Size: 3072 MB
              Form Factor: DIMMSet: None
              Locator: DIMM 0
              Bank Locator: Not Specified
              Type: RAM
              Type Detail: None
            
因为我们的系统是虚拟机,否则的话,你的主板型号、每一只安插的内存容量等等,都会被列出来! 这样可以了解系统的所有主要硬件配备!

硬件资源的收集与分析

回到顶部

系统硬件是由操作系统内核管理的,Linux kernel在开机时就能够侦测主机硬件并加载适当的模块来驱动硬件。
内核侦测到的各项硬件设备,会记录在/proc与/sys目录中。 包括/proc/cpuinfo, /proc/partitions,/proc/interrupts等。
除了直接查看/proc目录下的文件内容之外,Linux也提供几个简单的指令来查看内核所侦测到的硬件信息:

gdisk:可以使用 gdisk -l 将分区表列出;
dmesg:观察内核运作过程当中所显示的各项信息;
vmstat:可分析系统 (CPU/RAM/IO)目前的状态;
lspci:列出整个PC系统的PCI接口设备;
lsusb:列出目前系统上面各个USB端口的状态,与连接的USB设备;
iostat:与vmstat类似,可实时列出整个CPU与接口设备的Input/Output状态。
想要知道主板与各周边相关设备时,lspci是不可多得的好工具!使用lsusb查看目前USB插槽的使用情况以及侦测到的USB设备! iostat与vmstat类似,是一个实时分析软件!
如果想要知道Linux主机的硬件配备,最好的方法还是直接拆开机壳去察看上面的信息! 如果环境因素导致无法直接拆开主机的话,那么就可以使用上面列出的命令查看。

lspci

回到顶部

lspci显示主机上面的各个PCI接口的设备!

              [root@study ~]# lspci [-vvn]
            
选项与参数:
-v: 显示更多的 PCI 接口设备的详细信息;
-vv: 比 -v 还要更详细的细部信息;
-n: 直接观察 PCI 的 ID 而不是厂商名称
查阅系统内的PCI总线相关设备:
              [root@study ~]# lspci
              00:00.0 Host bridge: Intel Corporation 440FX - 82441FX PMC [Natoma] (rev 02)
              00:01.0 ISA bridge: Intel Corporation 82371SB PIIX3 ISA [Natoma/Triton II]
              00:01.1 IDE interface: Intel Corporation 82371AB/EB/MB PIIX4 IDE (rev 01)
              00:02.0 VGA compatible controller: InnoTek Systemberatung GmbH VirtualBox Graphics Adapter
              00:03.0 Ethernet controller: Intel Corporation 82540EM Gigabit Ethernet Controller (rev 02)
              00:04.0 System peripheral: InnoTek Systemberatung GmbH VirtualBox Guest Service
              00:05.0 Multimedia audio controller: Intel Corporation 82801AA AC'97 Audio Controller (rev 01)
              00:06.0 USB controller: Apple Inc. KeyLargo/Intrepid USB
              00:07.0 Bridge: Intel Corporation 82371AB/EB/MB PIIX4 ACPI (rev 08)
              00:0d.0 SATA controller: Intel Corporation 82801HM/HEM (ICH8M/ICH8M-E) SATA Controller [AHCI mode] (rev 02)
            
上面的信息显示linux主机使用Intel芯片的仿真主板、南桥使用ICH9的控制芯片、附挂QXL的显示适配器、使用虚拟化的Virtio网络卡等。
如果你还想要了解某个设备的详细信息时,可以加上 -v 或 -vv 来显示更多的信息喔!
想要知道以太网络卡更详细的信息时,可以使用如下的选项来处理:
              [root@study ~]# lspci -s 00:03.0 -vv-s
            
后面接的每个设备的总线、插槽与相关函数功能!那个是我们硬件侦测所得到的数据啰! 你可以对照底下这个文件来了解该串数据的意义:
/usr/share/hwdata/pci.ids
其实那个就是 PCI 的标准 ID 与厂牌名称的对应表啦!此外,刚刚我们使用 lspci 时,其实所有的数据都是由/proc/bus/pci/目录下的数据所取出的呢
不过,由于硬件的发展太过迅速,所以你的 pci.ids 文件可能会落伍了~那怎办? 没关系~可以使用底下的方式来在线更新你的对应档:
              [root@study ~]# update-pciids
            

lsusb

回到顶部

lsusb列出系统中的所有USB接口设备!

              [root@study ~]# lsusb [-t]
            
选项与参数: -t:使用类似树状目录来显示各个 USB 端口口的相关性
列出主机USB各端口状态:
              [root@study ~]# lsusb
              Bus 001 Device 002: ID 80ee:0021 VirtualBox USB Tablet
              Bus 001 Device 001: ID 1d6b:0001 Linux Foundation 1.1 root hub
            
如上所示,在Bus 001接了一个设备,该设备的 ID 是 80ee:0021,对应的厂商与产品为VirtualBox的设备。
ID号码与厂商型号对照了!那也是写入在/usr/share/hwdata/pci.ids的东西,可以自行查询!

iostat

回到顶部

想要知道磁盘由开机到现在,已经存取多少数据?这个时候就得用到iostat指令了!
默认CentOS并没有安装这个软件!使用yum/apt install sysstat先来安装此软件吧!

              [root@study ~]# iostat [-c|-d] [-k|-m] [-t] [间隔秒数] [侦测次数]
            
选项与参数:
-c :仅显示 CPU 的状态;
-d :仅显示储存设备的状态,不可与 -c 一起用;
-k :默认显示的是 block ,这里可以改成 K bytes 的大小来显示;
-m :与 -k 类似,只是以 MB 的单位来显示结果。
-t :显示日期出来;
显示目前整个系统的CPU与储存设备的状态:
              [root@study ~]# iostat
              Linux 4.15.0-140-generic (www.initroot.com) 11/14/2021 _x86_64_ (4 CPU)

              avg-cpu: %user %nice %system %iowait %steal %idle
              9.51 0.00 2.11 1.64 0.00 86.74

              Device tps kB_read/s kB_wrtn/s kB_read kB_wrtn
              sda 17.20 113.23 139.06 28369609 34842056
            
上面数据总共分为上下两部分,上半部显示的是CPU的当前信息;
# 下面数据则是显示储存设备包括 /dev/vda 的相关数据,他的数据意义:
# tps :平均每秒钟的传送次数!与数据传输『次数』有关,非容量!
# kB_read/s :开机到现在平均的读取单位;
# kB_wrtn/s :开机到现在平均的写入单位;
# kB_read :开机到现在,总共读出来的文件单位;
# kB_wrtn :开机到现在,总共写入的文件单位;
每两秒钟侦测一次sda设备,并且共侦测三次储存设备:
              [root@study ~]# iostat -d 2 3 sda
              Linux 4.15.0-140-generic (www.initroot.com) 11/14/2021 _x86_64_ (4 CPU)

              Device tps kB_read/s kB_wrtn/s kB_read kB_wrtn
              sda 17.20 113.18 139.31 28369921 34917976

              Device tps kB_read/s kB_wrtn/s kB_read kB_wrtn
              sda 7.00 0.00 62.00 0 124

              Device tps kB_read/s kB_wrtn/s kB_read kB_wrtn
              sda 0.00 0.00 0.00 0 0

            
# 仔细看一下,如果是有侦测次数的情况,那么第一次显示的是『从开机到现在的数据』,
# 第二次以后所显示的数据则代表两次侦测之间的系统传输值!举例来说,上面的信息中,
# 第二次显示的数据,则是两秒钟内(本案例)系统的总传输量与平均值。透过 lspci 及 iostat 可以约略的了解到目前系统的状态还有目前的主机硬件数据呢!

了解磁盘的健康状态

回到顶部

Linux server最重要的就是数据安全了!数据都是放在磁盘当中的,所以经常了解一下磁盘健康状况是个好习惯! 怎么知道磁盘是好是坏呢?这就得要来谈一个smartd服务了!
SMART其实是Self-Monitoring, Analysis and Reporting Technology System的缩写,主要用来监测目前常见的ATA与SCSI接口的磁盘, 被监测的磁盘也必须要支持SMART协议才行!否则smartd就无法去下达指令,让磁盘进行自我健康检查~ 不过刚刚好还有另外一颗用作 IDE 界面的2G 磁盘, 这个就能够用来作为测试了! (/dev/sda)!
smartd 提供一只指令名为 smartctl,这个指令功能非常多!不过我们底下只想要介绍数个基本的操作,让各位了解一下如何确认你的磁盘是好是坏!
使用sudo apt install smartmontools安装smartctl工具。 1. 用smartctl来显示完整的/dev/sda的信息:

              [root@study ~]# smartctl -a /dev/sda
              smartctl 6.2 2013-07-26 r3841 [x86_64-linux-3.10.0-229.el7.x86_64] (local build)
              Copyright (C) 2002-13, Bruce Allen, Christian Franke, www.smartmontools.org
              
              #首先输出磁盘的整体信息!包括制造商、序号、格式、SMART支持度等!
              === START OF INFORMATION SECTION ===
              Device Model: QEMU HARDDISK
              Serial Number: QM00002
              Firmware Version: 0.12.1
              User Capacity: 2,148,073,472 bytes [2.14 GB]
              Sector Size: 512 bytes logical/physical
              Device is: Not in smartctl database [for details use: -P showall]
              ATA Version is: ATA/ATAPI-7, ATA/ATAPI-5 published, ANSI NCITS 340-2000
              Local Time is: Wed Sep
              2 18:10:38 2015 CST
              SMART support is: Available - device has SMART capability.
              SMART support is: Enabled
              === START OF READ SMART DATA SECTION ===
              SMART overall-health self-assessment test result: PASSED
              #接下来则是一堆基础说明!
              General SMART Values:
              Offline data collection status:
              (0x82) Offline data collection activity
              was completed without error.
              Auto Offline Data Collection: Enabled.
              ...
              #有没有曾经发生过磁盘错乱的问题记录!
              SMART Error Log Version: 1
              No Errors Logged
              #当执行过磁盘自我检测,就会记录在这里!
              SMART Self-test log structure revision number 1
              Num Test_Description Status Remaining LifeTime(hours) LBA_of_first_error
              # 1 Short offline Completed without error 00% 4660 -
              # 2 Short offline Completed without error 00% 4660 -
              
命令磁盘进行一次自我检测,再次观察磁盘状态:
              [root@study ~]# smartctl -t short /dev/sda
              [root@study ~]# smartctl -a /dev/sda
              ...
              # 底下会多出一个第三笔的测试信息!看一下 Status 的状态,没有问题就是好消息!
              SMART Self-test log structure revision number 1
              Num Test_Description Status Remaining LifeTime(hours) LBA_of_first_error
              # 1 Short offline Completed without error 00% 4660 -
              # 2 Short offline Completed without error 00% 4660 -
              # 3 Short offline Completed without error 00% 4660 -
            
不过要特别强调的是,因为进行磁盘自我检查时,可能磁盘的 I/O 状态会比较频繁,因此不建议在系统忙碌的时候进行! 否则系统的性能是可能会被影响的!

ifconfig列出系统中的网卡信息

回到顶部

ifconfig显示当前所有网络状态

              peter@peter-VirtualBox:~$ ifconfig
              enp0s3: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500
              inet 192.168.0.105 netmask 255.255.255.0 broadcast 192.168.0.255
              inet6 fe80::1db0:20ae:4993:2b5f prefixlen 64 scopeid 0x20
              <link>
              ether 08:00:27:bd:23:a5 txqueuelen 1000 (Ethernet)
              RX packets 1270568 bytes 852069142 (852.0 MB)
              RX errors 0 dropped 0 overruns 0 frame 0
              TX packets 1415413 bytes 620591851 (620.5 MB)
              TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0

              lo: flags=73<UP,LOOPBACK,RUNNING> mtu 65536
              inet 127.0.0.1 netmask 255.0.0.0
              inet6 ::1 prefixlen 128 scopeid 0x10<host>
              loop txqueuelen 1000 (Local Loopback)
              RX packets 1733758 bytes 136658908 (136.6 MB)
              RX errors 0 dropped 0 overruns 0 frame 0
              TX packets 1733758 bytes 136658908 (136.6 MB)
              TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
            
              显示指定网卡状态:
              peter@peter-VirtualBox:~$ ifconfig eth0
              关闭eth0:
              peter@peter-VirtualBox:~$ ifconfig eth0 down
              开启eth0:
              peter@peter-VirtualBox:~$ ifconfig eth0 up
            

ping常用来测试网络连通性:

              peter@peter-VirtualBox:~$ ping www.initroot.com
              PING www.initroot.com (139.129.102.64) 56(84) bytes of data.
              64 bytes from 139.129.102.64 (139.129.102.64): icmp_seq=1 ttl=52 time=168 ms
              64 bytes from 139.129.102.64 (139.129.102.64): icmp_seq=2 ttl=52 time=92.2 ms
              64 bytes from 139.129.102.64 (139.129.102.64): icmp_seq=3 ttl=52 time=77.0 ms
              64 bytes from 139.129.102.64 (139.129.102.64): icmp_seq=4 ttl=52 time=96.6 ms
              64 bytes from 139.129.102.64 (139.129.102.64): icmp_seq=5 ttl=52 time=102 ms
              64 bytes from 139.129.102.64 (139.129.102.64): icmp_seq=6 ttl=52 time=111 ms
              64 bytes from 139.129.102.64 (139.129.102.64): icmp_seq=7 ttl=52 time=131 ms
              ^C
              --- www.initroot.com ping statistics ---
              7 packets transmitted, 7 received, 0% packet loss, time 6004ms
              rtt min/avg/max/mdev = 77.003/111.531/168.098/27.963 ms
            

本文由initroot编辑整理,转载请注明www.initroot.com

我们在用ps或者top查看系统进程的时候,就已经涉及到很多系统资源信息了。 除了进程管理相关命令外,我们还可以通过其他工具查看系统中的资源使用情况!

本文由initroot编辑整理,转载请注明www.initroot.com

我们在用ps或者top查看系统进程的时候,就已经涉及到很多系统资源信息了。 除了进程管理相关命令外,我们还可以通过其他工具查看系统中的资源使用情况!