Linux基础知识 ·

系统资源查看

free:内存使用情况

free 选项

常用选项:

-b:以字节为单位 显示 内存总和。

-k:缺省的) 以 KB 为单位 显示。

-m:以 MB 为单位。

-t :显示 一个 总计行。

-h:易读模式显示单位。

-o: 禁止 "buffer adjusted" 行的显示. 除非 指定 free 从 (相应的) 已用/未用的 内存 减去/加上 缓
冲区内存。

  • Mem:显示的是实体内存的量。
  • Swap:是虚拟内存的量。
  • total :总量。
  • used:已被使用的量。
  • free:则是剩余可用的量。
  • shared/buffers/cached 则是在已被使用的量当中,用来作为缓冲及缓存的量。

Swap 的效能跟实体内存实在差很多,而系统会使用到 swap , 是因为能加速系统的存取效率,而非实体内存不足了才会使用!

uname:查阅系统与核心相关信息

uname 选项

显示相应的系统信息. 没有指定选项时,同 -s.

-a:显示所有的信息

-m:显示机器(硬件)类型

-n:显示机器的网络节点主机名

-r:显示操作系统发行版本

-s:显示操作系统名

-p:显示主机处理器(CPU)类型

uptime:观察系统启动时间与负载

这个命令很简单,只是显示出目前系统已经启动多久的时间,以及 1, 5, 15 分钟的平均负载。还记得 top 吧?等同于 top 画面的最上面一行!

netstat:追踪网络或套接字

这个命令比较常被用在网络的监控方面,不过,在程序管理方面也是需要了解的! 这个命令的运行如下所示:基本上, netstat 的输出分为两大部分,分别是网络与系统自己的程序相关性部分:

netstat 选项

常用参数:

无参数时, netstat 显示打开的套接字. 如果不指定任何地址族,那么打印出所有已配置地址族的有效套接字。

-r:显示内核路由表。

-g:显示IPv4 和 IPv6的IGMP组播组成员关系信息。

-i:显示所有网络接口列表或者是指定的 iface 。

-M:显示一份所有经伪装的会话列表。

-s:显示每种协议的统计信息。

常用选项:

-v:详细模式运行。特别是打印一些关于未配置地址族的有用信息。

-n:显示数字形式地址而不是去解析主机、端口或用户名。

--numeric-hosts:显示数字形式的主机但是不影响端口或用户名的解析。

--numeric-ports:显示数字端口号,但是不影响主机或用户名的解析。

--numeric-users:显示数字的用户ID,但是不影响主机和端口名的解析。

--protocol=family , -A:指定要显示哪些连接的地址族(也许在底层协议中可以更好地描述)。 family 以逗号分隔的地址族列表,比 如inet, unix, ipx, ax25, netrom, 和 ddp。这样和使用 --inet, --unix (-x), --ipx, --ax25, --netrom,和 --ddp 选项效果相同。地址族 inet 包括raw, udp 和tcp 协议套接字。

-c:将使 netstat 不断地每秒输出所选的信息。

-e:显示附加信息。使用这个选项两次来获得所有细节。

-o:包含与网络定时器有关的信息。

-p:显示套接字所属进程的PID和名称。

-l:只显示正在侦听的套接字(这是默认的选项)。

-a:显示所有正在或不在侦听的套接字。加上 --interfaces 选项将显示没有标记的接口。

-F:显示FIB中的路由信息。(这是默认的选项)

-C:显示路由缓冲中的路由信息。

delay:netstat将循环输出统计信息,每隔 delay 秒。


在上面的结果当中,显示了两个部分,分别是网络的连线以及 linux 上面的 socket 程序相关性部分。 我们先来看看网际网络连线情况的部分:

活动的Internet网络连接 (TCP, UDP, raw)

1.Proto:套接字使用的协议。

2.Recv-Q:连接此套接字的用户程序未拷贝的字节数。

3.Send-Q:远程主机未确认的字节数。

4.Local Address:套接字的本地地址(本地主机名)和端口号。除非给定-n --numeric (-n) 选项,否则套接字地址按标 准 主 机 名(FQDN)进行解析,而端口号则转换到相应的服务名。

5.Foreign Address:套接字的远程地址(远程主机名)和端口号。 Analogous to "Local Address."

6.State:套接字的状态。因为在RAW协议中没有状态,而且UDP也不用状态信息,所以此行留空。主要有创建(ESTABLISED)及监听(LISTEN)。

 

除了网络上的连线之外,其实 Linux 系统上面的程序是可以接收不同程序所发送来的信息,那就是 Linux 上头的套接字文件 (socket file)。socket file 可以沟通两个程序之间的信息,因此程序可以取得对方传送过来的数据。 由于有 socket file,因此类似 X Window 这种需要通过网络连接的软件,目前新版的 distributions 就以 socket 来进行窗口介面的连线沟通了。上表中 socket file 的输出栏位有:

活动的UNIX域套接字

1.Proto:套接字所用的协议(通常是unix)。

2.RefCnt:使用数量(也就是通过此套接字连接的进程数)。

3.Flags:显示的标志为SO_ACCEPTON(显示为 ACC), SO_WAITDATA (W) 或 SO_NOSPACE (N)。如果相应的进程等待一个连接请求,那么SO_ACCECPTON用于未连接的套接字。其它标志通常并不重要。

4.Type:套接字使用的一些类型,主要有确认连线的 STREAM 与不需确认的 DGRAM 两种。

  • SOCK_DGRAM:此套接字用于数据报(无连接)模式。
  • SOCK_STREAM:流模式(连接)套接字
  • SOCK_RAW:此套接字用于RAW模式。
  • SOCK_RDM:一种服务可靠性传递信息。
  • SOCK_SEQPACKET:连续分组套接字。
  • SOCK_PACKET:RAW接口使用套接字。
  • UNKNOWN:未知。

5.State:此字段包含以下关键字之一:

  • FREE:套接字未分配。
  • LISTENING:套接字正在监听一个连接请求。除非设置 --listening (-l) 或者 --all (-a) 选项,否则不显示。
  • CONNECTING:套接字正要建立连接。
  • CONNECTED:套接字已连接。
  • DISCONNECTING:套接字已断开。
  • (empty):套接字未连。
  • UNKNOWN:未知!不应当出现这种状态的。

6.PID/Program name:理此套接字的程序进程名和PID。上面关于活动的Internet连接的部分有更详细的信息。

7.Path:相应进程连入套接字时显示路径名。


范例:找出目前系统上已在监听的网络连线及其 PID

dmesg:分析核心产生的信息

系统在启动的时候,核心会去侦测系统的硬件,你的某些硬件到底有没有被捉到,那就与这个时候的侦测有关。 但是这些侦测的过程要不是没有显示在萤幕上,就是很飞快的在萤幕上一闪而逝!而 dmesg 能把核心侦测的信息捉出来。

所有核心侦测的信息,不管是启动时候还是系统运行过程中,反正只要是核心产生的信息,都会被记录到内存中的某个保护区段。 dmesg 这个命令就能够将该区段的信息读出来的!

vmstat :侦测系统资源变化

vmstat 可以动态的显示系统资源的运行情况,可以侦测『 CPU / 内存 / 磁碟输入输出状态 』等等,如果你想查看系统处于繁忙状态,那你可以使用 vmstat 分析看看。

vmstat 选项

常用选项:

-a :使用 inactive/active(活跃与否) 取代 buffer/cache 的内存输出信息;

-f :启动到目前为止,系统复制 (fork) 的程序数;

-s :将一些事件 (启动至目前为止) 导致的内存变化情况列表说明;

-S :后面可以接单位,让显示的数据有单位。例如 K/M 取代 bytes 的容量;

-d :列出磁碟的读写总量统计表

-p :后面列出分割槽,可显示该分割槽的读写总量统计表

利用 vmstat 甚至可以进行追踪!你可以使用类似『 vmstat 5 』代表每五秒钟刷新一次,且无穷的刷新!直到你按下 [ctrl]-c 为止。如果你想要即时的知道系统资源的运行状态,这个命令就不能不知道!

上面的表格各项栏位的意义基本说明如下:

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

参与评论