您如何监视系统的健康状况?

每个计算机系统都将从适当的管理和监视中受益。密切关注系统的运行方式将有助于您发现问题并迅速解决。

为此目的创建了许多命令行实用程序。本指南将向您介绍工具箱中一些最有用的应用程序。

目录

  1. 如何监视流程利用率? 最佳 停止
  2. 如何找出哪个程序正在使用我的带宽? 网络猪 IPTraf netstat
  3. 如何找出剩余的磁盘空间? df 杜 改进措施
  4. 我如何找出多少内存正在使用中? 自由 虚拟机
  5. 结论

如何监视流程利用率?

最佳

检查进程资源利用率的最常用工具之一是“ top”。

Top提供了一个简单,实时的流程表,其中最大的使用者位于最上方:

top
top - 14:45:52 up 29 min,  1 user,  load average: 0.10, 0.09, 0.06
Tasks:  56 total,   1 running,  55 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
Mem:   1019600k total,   393756k used,   625844k free,    11136k buffers
Swap:        0k total,        0k used,        0k free,   316748k cached

  PID %MEM  VIRT SWAP  RES CODE DATA  SHR nFLT nDRT S  PR  NI %CPU COMMAND     
  832  1.3 32364  18m  12m  896  11m 1688    1    0 S  20   0  0.0 bash         
  820  0.4 89456  83m 4008  488  948 3040   12    0 S  20   0  0.0 sshd         
  812  0.3 49948  46m 2828  488  616 2216    0    0 S  20   0  0.0 sshd         
    1  0.2 24192  21m 2108  152  868 1300   23    0 S  20   0  0.0 init         
  400  0.1  243m 242m 1420  344 216m 1084    0    0 S  20   0  0.0 rsyslogd

顶部具有一些系统统计信息,包括过去1分钟,5分钟和15分钟的平均负载。它还显示内存和交换使用情况,以及各种进程状态的计数。

底部具有系统的每个进程,由资源的最高用户组织。该列表是实时更新的。

停止

尽管默认情况下几乎所有发行版中都包含“ top”,但是可以从大多数存储库下载名为“ htop”的改进版本。

要在Ubuntu上安装htop,请输入以下命令:

sudo apt-get install htop

运行htop,我们可以看到它具有类似的输出,但是它是彩色的,并且更具交互性:

htop
CPU[|                         0.7%]     Tasks: 21, 3 thr; 1 running
  Mem[|||||||||||||         64/995MB]     Load average: 0.00 0.02 0.05 
  Swp[                         0/0MB]     Uptime: 00:37:37

  PID USER      PRI  NI  VIRT   RES   SHR S CPU% MEM%   TIME+  Command
 2752 root       20   0 25660  1876  1364 R  0.0  0.2  0:00.06 htop
    1 root       20   0 24192  2108  1300 S  0.0  0.2  0:00.55 /sbin/init
  312 root       20   0 17224   640   444 S  0.0  0.1  0:00.04 upstart-udev-brid
  314 root       20   0 21592  1360   760 S  0.0  0.1  0:00.04 /sbin/udevd --dae
  394 messagebu  20   0 23808   688   436 S  0.0  0.1  0:00.01 dbus-daemon --sys
  401 syslog     20   0  243M  1420  1084 S  0.0  0.1  0:00.07 rsyslogd -c5
  402 syslog     20   0  243M  1420  1084 S  0.0  0.1  0:00.00 rsyslogd -c5

顶部更容易阅读,而底部则以更清晰的方式组织。

以下是一些可以帮助您更有效地使用htop的键:

  • M:按内存使用情况对进程进行排序
  • P:按处理器使用情况对进程进行排序
  • ? :访问帮助
  • k:终止当前/标记的进程
  • F2:设置htop。您可以在此处选择显示选项。
  • /:搜索过程

您可以通过帮助或设置访问许多其他选项。这些应该是您探索htop功能的第一步。

如何找出哪个程序正在使用我的带宽?

网络猪

如果您的网络连接似乎已经饱和,并且您不确定是哪个应用程序的罪魁祸首,那么一个名为“ nethogs”的程序是找出问题的理想选择。

在Ubuntu上,可以使用以下命令安装nethogs:

sudo apt-get install nethogs

我们只需输入以下内容即可运行它:

nethogs
NetHogs version 0.8.0

  PID USER     PROGRAM                      DEV        SENT      RECEIVED       
3379  root     /usr/sbin/sshd               eth0       0.485       0.182 KB/sec
820   root     sshd: [email protected]/0             eth0       0.427       0.052 KB/sec
?     root     unknown TCP                             0.000       0.000 KB/sec

  TOTAL                                                0.912       0.233 KB/sec

如您所见,首先,nethogs的输出很简单。它将每个应用程序与其关联的网络流量相关联。

您只能使用几个命令来控制网络猪:

  • m:在“ kb / s”,“ kb”,“ b”和“ mb”之间切换显示。
  • r:按收到的流量排序。
  • s:按发送的流量排序。
  • q:退出

尽管这是一个简单的工具,但nethogs是将流量与特定应用程序关联的一种好方法。

IPTraf

IPTraf是监视网络流量的另一种好方法。它提供了许多不同的交互式监视界面。

在Ubuntu上,可以使用以下命令安装IPTraf:

sudo apt-get install iptraf

要运行该程序,只需在命令行中以root权限调用它即可:

sudo iptraf
                      ???????????????????????????????????
                      ? IP traffic monitor              ?
                      ? General interface statistics    ?
                      ? Detailed interface statistics   ?
                      ? Statistical breakdowns...       ?
                      ? LAN station monitor             ?
                      ???????????????????????????????????
                      ? Filters...                      ?
                      ???????????????????????????????????
                      ? Configure...                    ?
                      ???????????????????????????????????
                      ? Exit                            ?
                      ???????????????????????????????????

使用此菜单,您可以选择要访问的界面。

例如,要获得所有网络流量的概述,我们可以选择第一个菜单,然后选择“所有接口”。它将为您提供一个如下所示的屏幕:

IPTraf
? TCP Connections (Source Host:Port) ?????????? Packets ??? Bytes Flags  Iface ?
??192.241.xxx.xxx:22                          >     369     82420 -PA-   eth0  ?
??72.43.xxx.xxx:49488                         >     381     19860 --A-   eth0  ?
?                                                                              ?
?                                                                              ?

在这里,您可以查看所有网络接口上正在通信的IP地址。

如果要将这些IP地址解析为域,可以通过退出流量屏幕,选择“配置”,然后选择“反向DNS查找”来启用反向DNS查找。

您也可以启用“ TCP / UDP服务名称”以使用服务名称而不是端口进行显示。

启用这两个选项后,显示可能如下所示:

 TCP Connections (Source Host:Port) ?????????? Packets ??? Bytes Flags  Iface ?
??192.241.xxx.xxx:ssh                         >     151     34924 -PA-   eth0  ?
??rrcs-72-43-xxx-xxx.nyc.biz.rr.co:49488      >     155      8108 --A-   eth0  ?
?                                                                              ?
?                                                                              ?
?                                                                              ?
?                                                                              ?
?                                                                              ?
?                                                                              ?
?                                                                              ?
?                                                                              ?
?                                                                              ?
?                                                                              ?
? TCP:      1 entries ???????????????????????????????????????????????? Active ??
????????????????????????????????????????????????????????????????????????????????
? UDP (72 bytes) from 192.241.xxx.xxx:43463 to 8.8.8.8:domain on eth0          ?
? UDP (66 bytes) from 192.241.xxx.xxx:53140 to 8.8.8.8:domain on eth0          ?
? UDP (135 bytes) from 8.8.8.8:domain to 192.241.xxx.xxx:41429 on eth0         ?
? UDP (119 bytes) from 8.8.8.8:domain to 192.241.xxx.xxx:43463 on eth0         ?
? UDP (110 bytes) from google-public-dns-a.googl:domain to 192.241.xxx.xxx:531 ?

您还可以自己研究其他几个界面。

netstat

“ netstat”命令是用于收集网络信息的通用工具。它非常灵活和强大。

缺省情况下,netstat打印一个打开的套接字列表:

netstat
Active Internet connections (w/o servers)
Proto Recv-Q Send-Q Local Address           Foreign Address         State      
tcp        0      0 192.241.187.204:ssh     ip223.hichina.com:50324 ESTABLISHED
tcp        0      0 192.241.187.204:ssh     rrcs-72-43-115-18:50615 ESTABLISHED
Active UNIX domain sockets (w/o servers)
Proto RefCnt Flags       Type       State         I-Node   Path
unix  5      [ ]         DGRAM                    6559     /dev/log
unix  3      [ ]         STREAM     CONNECTED     9386     
unix  3      [ ]         STREAM     CONNECTED     9385     
. . .

如果我们添加“ -a”选项,它将列出所有端口,侦听和不监听:

netstat -a
Active Internet connections (servers and established)
Proto Recv-Q Send-Q Local Address           Foreign Address         State      
tcp        0      0 *:ssh                   *:*                     LISTEN     
tcp        0      0 192.241.187.204:ssh     rrcs-72-43-115-18:50615 ESTABLISHED
tcp6       0      0 [::]:ssh                [::]:*                  LISTEN     
Active UNIX domain sockets (servers and established)
Proto RefCnt Flags       Type       State         I-Node   Path
unix  2      [ ACC ]     STREAM     LISTENING     6195     @/com/ubuntu/upstart
unix  2      [ ACC ]     STREAM     LISTENING     7762     /var/run/acpid.socket
unix  2      [ ACC ]     STREAM     LISTENING     6503     /var/run/dbus/system_bus_socket
. . .

如果您想过滤以仅查看TCP或UDP连接,请分别使用“ -t”或“ -u”标志:

netstat -at
Active Internet connections (servers and established)
Proto Recv-Q Send-Q Local Address           Foreign Address         State      
tcp        0      0 *:ssh                   *:*                     LISTEN     
tcp        0      0 192.241.187.204:ssh     rrcs-72-43-115-18:50615 ESTABLISHED
tcp6       0      0 [::]:ssh                [::]:*                  LISTEN

通过传递“ -s”标志来查看统计信息:

netstat -s
Ip:
    13500 total packets received
    0 forwarded
    0 incoming packets discarded
    13500 incoming packets delivered
    3078 requests sent out
    16 dropped because of missing route
Icmp:
    41 ICMP messages received
    0 input ICMP message failed.
    ICMP input histogram:
        echo requests: 1
        echo replies: 40
. . .

如果要连续更新输出,可以使用“ -c”标志。

还有许多其他选项可以更改输出。浏览手册页以获取更多想法。

如何找出剩余的磁盘空间?

df

要快速了解驱动器上还有多少磁盘空间,可以使用“ df”程序。

没有任何选项,其输出如下所示:

df
Filesystem     1K-blocks    Used Available Use% Mounted on
/dev/vda        31383196 1228936  28581396   5% /
udev              505152       4    505148   1% /dev
tmpfs             203920     204    203716   1% /run
none                5120       0      5120   0% /run/lock
none              509800       0    509800   0% /run/shm

这会以字节为单位输出磁盘使用情况,这可能有点难以读取。

为了解决这个问题,我们可以指定以人类可读的格式输出:

Filesystem      Size  Used Avail Use% Mounted on
/dev/vda         30G  1.2G   28G   5% /
udev            494M  4.0K  494M   1% /dev
tmpfs           200M  204K  199M   1% /run
none            5.0M     0  5.0M   0% /run/lock
none            498M     0  498M   0% /run/shm

如果要查看所有文件系统上可用的磁盘总空间,可以通过“ --total”选项。这将在底部添加一行,其中包含摘要信息:

df -h --total
Filesystem      Size  Used Avail Use% Mounted on
/dev/vda         30G  1.2G   28G   5% /
udev            494M  4.0K  494M   1% /dev
tmpfs           200M  204K  199M   1% /run
none            5.0M     0  5.0M   0% /run/lock
none            498M     0  498M   0% /run/shm
total            32G  1.2G   29G   4%

尽管df是获得概述的简便方法,但“ du”可以更好地说明正在占用系统空间的情况。

该命令将分析当前目录和任何子目录的使用情况。 du的默认输出如下所示:

du
4	./.cache
8	./.ssh
28	.

再一次,我们可以通过传递“ -h”来指定人类可读的输出:

du -h
4.0K	./.cache
8.0K	./.ssh
28K	.

要查看文件大小和目录,请键入以下内容:

du -a
0	./.cache/motd.legal-displayed
4	./.cache
4	./.ssh/authorized_keys
8	./.ssh
4	./.profile
4	./.bashrc
4	./.bash_history
28	.

对于底部的总计,可以添加“ -c”选项:

du -c
4	./.cache
8	./.ssh
28	.
28	total

如果您只对总数感兴趣,而不对具体细节感兴趣,则可以发出:

du -s
28	.

改进措施

这两个工具的改进版本可以在Ubuntu上安装。

df的改进版本是“ pydf”。可以使用以下命令进行安装:

sudo apt-get install pydf

pydf命令将整洁的图表中的所有内容组织成彩色输出。它通过使用条以图形方式显示磁盘使用情况:

pydf -a
dev/vda     30G 1200M   27G  3.9 [........] /                       
udev        493M 4096B  493M  0.0 [........] /dev                    
devpts         0     0     0    - [........] /dev/pts                
proc           0     0     0    - [........] /proc                   
tmpfs       199M  204k  199M  0.1 [........] /run                    
none       5120k     0 5120k  0.0 [........] /run/lock               
none        498M     0  498M  0.0 [........] /run/shm
. . .

du的一个改进是“ ncdu”。可以通过键入以下命令来安装此命令:

sudo apt-get install ncdu
This command uses an interactive ncurses display to graphically represent your disk usage: 此命令使用交互式ncurses显示以图形方式表示您的磁盘使用情况:
ncdu
--- /root ----------------------------------------------------------------------
    8.0KiB [##########] /.ssh                                                   
    4.0KiB [#####     ] /.cache
    4.0KiB [#####     ]  .bashrc
    4.0KiB [#####     ]  .profile
    4.0KiB [#####     ]  .bash_history

您可以使用向上和向下箭头并在任何目录条目上按“输入”来逐步浏览文件系统。

我如何找出多少内存正在使用中?

自由

查找系统上当前内存使用情况的最简单方法是使用“ free”命令。

不带选项使用时,输出如下所示:

free
             total       used       free     shared    buffers     cached
Mem:        507620     408172      99448          0     123672     248224
-/+ buffers/cache:      36276     471344
Swap:            0          0          0

为了以更具可读性的格式显示,我们可以传递“ -m”选项以兆字节显示输出:

free -m
             total       used       free     shared    buffers     cached
Mem:           495        398         97          0        120        242
-/+ buffers/cache:         35        460
Swap:            0          0          0

中间行标记为“-/ +缓冲区/缓存”,将显示应用程序使用的实际内存。

“ Mem”行包括用于缓冲和缓存的内存,该内存将在其他目的需要时立即释放。

虚拟机

“ vmstat”命令可以输出有关系统的各种信息,包括内存,交换,磁盘io和cpu信息。

我们将使用该命令来查看内存使用情况的另一种观点:

vmstat
procs -----------memory---------- ---swap-- -----io---- -system-- ----cpu----
 r  b   swpd   free   buff  cache   si   so    bi    bo   in   cs us sy id wa
 1  0      0  99340 123712 248296    0    0     0     1    9    3  0  0 100  0

通过选择带有“ -S”标志的单位,我们可以看到以兆字节为单位的内容:

vmstat -S M
procs -----------memory---------- ---swap-- -----io---- -system-- ----cpu----
 r  b   swpd   free   buff  cache   si   so    bi    bo   in   cs us sy id wa
 1  0      0     96    120    242    0    0     0     1    9    3  0  0 100  0

如您所见,此工具可帮助我们分解“ free”命令的“-/ + buffers / cache”类别。

我们将看到该块中有多少用于缓冲,有多少用于高速缓存。

要获取有关内存使用情况的一些常规统计信息,请输入:

vmstat -s -S M
          495 M total memory
          398 M used memory
          252 M active memory
          119 M inactive memory
           96 M free memory
          120 M buffer memory
          242 M swap cache
            0 M total swap
            0 M used swap
            0 M free swap
. . .

要获取有关单个系统进程的缓存使用情况的信息,请键入:

vmstat -m -S M
Cache                       Num  Total   Size  Pages
ext4_groupinfo_4k           195    195    104     39
UDPLITEv6                     0      0    768     10
UDPv6                        10     10    768     10
tw_sock_TCPv6                 0      0    256     16
TCPv6                        11     11   1408     11
kcopyd_job                    0      0   2344     13
dm_uevent                     0      0   2464     13
bsg_cmd                       0      0    288     14
. . .

这将为您提供有关高速缓存中存储哪种信息的详细信息。

结论

使用这些工具,您应该可以从命令行开始监视服务器了。还有许多其他实用程序可以执行简单的监视操作,但这是一个很好的起点。