在 Linux 系统中,可以通过 top 和 uptime 命令来查看系统的 load 值,那么什么是 load 呢?系统的 load 被定义为特定时间间隔内运行队列中的平均线程数,如果一个线程满足以下条件,该线程就会处于运行队列中:
load 值越大,也就意味着系统的CPU越繁忙,这样线程运行完以后等待操作系统分配下一个时间片段的时间也就越长。假设:
当然,load的计算算法较为复杂,并不像上面说的这么简单,这么打比方只是为了简单说明问题。假设一般来说,只要load值不大于3,我们认为它的负载是正常的(考虑到多核CPU的系统),如果load值大于5,则表示当前系统的负载已经非常高了,需要采取相应的措施来降低系统的负载。
w、top、uptime 这三个命令都可以用来查看系统的load值,下面演示一下使用 uptime 命令查看系统的 load:

load average 后面跟的三个值分别表示在过去1分钟、5分钟、15分钟内系统的 load 值。
在 Linux 系统中,CPU 的时间消耗主要在这几个方面:用户进程、内核进程、中断处理、I/O等待、Nice时间、丢失时间、空闲等几个部分,而CPU的利用率则为这些时间所占用的总时间的百分比。通过 CPU 的利用率,能够反映出CPU的使用和消耗情况。
可以通过 top 命令来查看 Linux 系统的 CPU 消耗情况:

上面一部分,也就是"%Cpu(s)"开头的内容是我们需要关注的,后面跟的列便是各种状态下CPU所消耗的时间比,看下每一列的意思:
对于多个或多核CPU的情况,常常需要查看每个CPU的利用情况,此时可以按1,便可以查看到每个核的CPU利用率:

看到上面出现了 %Cpu0 而不是 %Cpu(s),因为只有一个CPU,所以只展示 Cpu0 的CPU利用率
磁盘剩余空间也是一个非常关键的指标,如果磁盘没有足够的剩余空间,正常的日志写入以及系统I/O都将无法进行。
通过 df 命令可以查看磁盘的剩余空间:

-h 表示按单位格式化输出。该命令显示 sda1 一共有19GB的空间,使用了4.3GB,剩余14GB可用。
如果要查看具体目录所占用的内存空间,分析大文件所处位置,可以使用du命令来进行查看:

-d 指定了递归深度为1层,表示只列出指定目录的下一级目录文件大小,-h用来表示格式化输出。
磁盘I/O的繁忙程度也是一个重要的系统指标,对于I/O密集型的应用来说,比如数据库应用和分布式文件系统,I/O的繁忙程度也一定程度上反映了系统的负载情况,容易成为应用程序性能的瓶颈。可以使用iostat来查看系统的I/O状况:

看到报错,这也很正常。Linux 环境下每个命令就和 Windows 环境下的软件一样,必须先安装再使用,按照报错的提示来看,iostat 当前并没有安装。所以我们按照提示的来安装一下 sysstat 就可以了:

安装完毕后,再使用 iostat:

各个列中,
程序运行时的数据加载、线程并发、I/O 缓冲等,都依赖于内存,可用内存的大小决定了程序是否能正常运行以及运行的性能。
通过 free 命令能够查看到系统的内存使用情况,加上-m参数表示以MB为单位:

Linux 的内存包括物理内存 Mem 和虚拟内存 Swap,下面介绍每一列的含义:
Linux 系统的内存管理机制与 Windows 系统有所不同,其中有一个思想便是内存利用率最大化,内核会将剩余的内存申请为 cached,而 cached 不属于 free 范畴。因此,当系统运行时间较长时,会发现 cached 这块区域比较大,对于有频繁文件读/写操作的系统,这种现象更为明显。
但是,free的内存小,并不代表可用小,当程序需要申请更大的内存时,如果free内存不够,系统会将剩余部分cached会buffers内存回收,回收的内存再分配给应用程序。因此,Linux可用于分配的内存不仅仅只有free的内存。可看 free 命令显示的第三行,也就是 -/+ buffers/cache 对应的行,这一行将内存进行了重新计算,used减去 buffers 和 cached 占用的内存,而 free 则加上了 buffers 和 cached 对应的内存。
对于应用来说,更值得关注的应该是虚拟内存 Swap 的消耗,Swap 内存使用过多,表示物理内存已经不够用了,操作系统将本应该物理内存存储的一部分内存页调度到磁盘上,以腾出足够的空间给当前的进程使用。当其他进程需要运行时,再从磁盘将内存的页调度到物理内存当中,以恢复进程的运行。而这个调度的过程中,会产生 Swap I/O,如果 Swap I/O 较为频繁,将严重地影响系统的性能。
通过 vmstat 命令,可以查看到 Swap I/O 的情况:

其中,swap 列的 si 表示每秒从磁盘交换到内存的数据量,单位是 KB/s,so 表示每秒从内存交换到磁盘的数据量,单位也是 KB/s。

