525.free 命令。
(1) free [-b|-k|-m|-g] [-t]
[-b|-k|-m|-g] 指定显示的单位。
-t 在输出的最终结果中显示物理内存与swap 的总量。
第一部分Mem行:
total 内存总数: 900M
used 已经使用的内存数: 317M
free 空闲的内存数: 663M
shared 当前已经废弃不用,总是0
buffers Buffer 缓存内存数: 43M
cached Page 缓存内存数:112M
关系:total(900M) = used(317M) + free(663M)
第二部分(-/+ buffers/cache):
(-buffers/cache) used内存数:161M (指的第一部分Mem行中的used – buffers – cached)
(+buffers/cache) free内存数: 818M (指的第一部分Mem行中的free + buffers + cached)
如果第一行的free没有剩多少,但是buffers 和 cached 的数值偏大,那么也没有关系的。说明系统是很有效率的将内存用光了,目的是为了让系统的访问性能加速。
要注意swap的时候量,一般来说,swap 最好不要被使用,尤其swap最好不要被使用超过%20以上,如果你发现swap 的使用量超过%20以上,那么,最好还是买物理内存吧,因为,swap的性能和物理内存实在差很多。
Linux系统为了要加速系统性能,所以会将最常使用的或者是最近使用到的文件数据缓存下来,这样将来系统要使用该文件的时候,就直接由内存中取出,而不需要重新读取硬盘,速度上面当然就会加快了,因此,物理内存被使用光是正常的。
526.uptime 命令
(1)查看系统启动时间与工作负载。
第一个 HH:MM:SS 的意思是现在的时间
就是top 的第一行中显示的内容。
527.netstat 命令显示结果。
(1)
上面的结果分为两个部分,分别是网络的连接(与网络相关的部分,指的是有源TCP连接,netstat -antup 查看的是没有源的,本地开放端口)以及linux上面的socket 程序相关性部分(与本机的进程自己的相关性(非网络))
我们先来看看因特网连接部分。
Proto : 网络的数据包协议,主要分为TCP 与UDP 数据包。
Recv-Q :非由用户进程连接到此socket 的复制的总字节数(不理解)。(网上说接受队列)
Send-Q :非由远程主机传送过来的acknowledged 总字节数(不理解)。(网上说发送队列)
Recv-Q 和 Send-Q 一般情况下都是0 ,如果不是0 则表示软件包正在队列中堆积。
LocalAddress :本地的IP端口情况。
ForeignAdd : 远程主机的IP端口情况。
State :连接状态,主要有建立(ESTABLISED)以及监听(LISTEN)。
我们看到上面只有一条连接的数据,它的意义是通过TCP数据包的链接,将远程的localhost:61578 链接到本地的localhost:ssh ,这条链接状态是建立(ESTABLISHED)的状态。
除了网络上的链接外,其实Linux系统上面的进程是可以接收到不同进程所发送来的信息,那就是Linux上面的socket file ,socketfile可以沟通两个进程之间的信息,因此进程可以取得对方传送过来的数据。由于有socket file ,因此类似 X Window 这种需要通过网络连接的软件,目前新版的linux就以socket file 来进行窗口界面的联机通信了,上面的socket file 的输出的字段有:
Proto : 一般就是Linux ,我的机器是Unix 。
RefCnt :连接到此socket 的进程数量。
Flags : 连接的标识。
Type :socket 访问的类型,主要有确认连接的STREAM 与不需要确认的DGRAM 两种。
State :若为CONNECTED 表示多个进程之间已经建立连接。
Path : 连接到此socket 的相关程序的路径,或者是相关数据输出的路径。
I-Node :就是这个socket file 的i节点。
PATH 指向的就是这些进程要交换数据的socket 文件。
528.dmesg ,分析内核产生的信息。
(1)系统在开机的时候,内核会去检测系统的硬件,你的某些硬件到底有没有被识别出来,那就与这个时候的检测有关。但是这些检测的过程要不是没有显示在屏幕上,就是在屏幕上飞快的一闪而逝,dmesg 能过将内核的信息都找出来。
(2)所有内核检测的信息,不管是开机时候还是系统运行过程中,反正只要是内核产生的信息都会被记录到内存中的某个保护区段。
528.vmstat 命令 ,检测系统资源变化。(CPU/内存/硬盘)
(1)vmstat 可以检测CPU/内存/磁盘输入输出的状态等。
(2)vmstat -a [延迟 [次数]] vmstat 和 vmstat -a 显示的内容相同。
vmstat -fs 与内存相关
vmstat -S 单位 设置显示数据的单位 K/M
vmstat -d 与磁盘相关,后面不加值,代表查看的是所有磁盘。
vmstat -p 分区 与磁盘分区相关
(3)vmstat 1 3 统计目前主机CPU状态 ,每秒一次,总共3次。
(4)利用vmstat 可以跟踪,你可以使用类似 vmstat 5 代表每5秒更新一次。
(5)
procs字段(内存字段)的选项为。
r :等待运行中的进程数量。
b :不可被唤醒的进程数量。
这两个选项越多,代表系统越忙碌(因为系统太忙,所以很多进程就无法被执行或一直
在等待而无法被唤醒。)
memory (内存字段)的选项为。
swpd :虚拟内存被使用的容量。
free :为被使用的内存的容量。
buff : 用于缓冲存储器。
cache :用于高速缓存。
buff 和 cache 是和 free 相同的。
swap (内存交换空间)的选项为。
si :由磁盘中将数据取出的量。
so :由于内存不足而将没用到的程序写入到磁盘的swap 的容量中。
如果si/so 的数值太大,表示内存内的数据经常得在磁盘与内存之间传来传去,系统性
能会很差
si 每秒从磁盘读入虚拟内存的大小,如果这个值大于0,表示物理内存不够用或者内存泄露了, 要查找耗内存进程解决掉。我的机器内存充裕,一切正常。
so 每秒虚拟内存写入磁盘的大小,如果这个值大于0,同上。
io (磁盘读写)的选项为
bi : 由磁盘写入的块数量 。
bo :写入到磁盘中的块数量。
bi 块设备每秒接收的块数量,这里的块设备是指系统上所有的磁盘和其他块设备,默认块大小 是1024byte,我本机上没什么IO操作,所以一直是0,但是我曾在处理拷贝大量数据(2-3T) 的机器上看过可以达到140000/s,磁盘写入速度差不多140M每秒
bo 块设备每秒发送的块数量,例如我们读取文件,bo就要大于0。bi和bo一般都要接近0, 不然就是IO过于频繁,需要调整
system(系统)的选项为
in :每秒被中断的进程次数
cs :每秒钟进行的事件切换次数。
这两个数值越大,代表系统与接口设备的通信非常频繁,这些接口设备当然包括磁盘、网
卡、时钟等。
in 每秒CPU的中断次数,包括时间中断
cs 每秒上下文切换次数,例如我们调用系统函数,就要进行上下文切换,线程的切换,也要进程上下文切换,这个值要越小越好,太大了,要考虑调低线程或者进程的数目,例如在apache和nginx这种web服务器中,我们一般做性能测试时会进行几千并发甚至几万并发的测试,选择web服务器的进程可以由进程或者线程的峰值一直下调,压测,直到cs到一个比较小的值,这个进程和线程数就是比较合适的值了。系统调用也是,每次调用系统函数,我们的代码就会进入内核空间,导致上下文切换,这个是很耗资源,也要尽量避免频繁调用系统函数。上下文切换次数过多表示你的CPU大部分浪费在上下文切换,导致CPU干正经事的时间少了,CPU没有充分利用,是不可取的。
CPU 的选项为 (使用状态貌似是使用率)
us :非内核层的CPU的使用状态。
sy :内核层所使用的CPU的使用状态。
id :闲置的数量。
wa :等待IO所消耗的CPU数量。
st : 被虚拟机所盗用的CPU使用状态。
us 用户CPU时间,我曾经在一个做加密解密很频繁的服务器上,可以看到us接近100,r运行队列达到80(机器在做压力测试,性能表现不佳)。
sy 系统CPU时间,如果太高,表示系统调用时间长,例如是IO操作频繁。
id 空闲 CPU时间,一般来说,id + us + sy = 100,一般我认为id是空闲CPU使用率,us是用户CPU使用率,sy是系统CPU使用率。
wt 等待IO CPU时间
如果你的系统很慢的话,记得使用vmstat 查看一下,一般来说,如果I/O部分很忙碌的话,你的系统会变得非常慢。
关于2>&1
2>&1 是把错误输出导入(合并)到标准输出流中
grep "standard"* > grep.out 2>&1 就是将标准输出与错误输出一并送入grep.out文件中,写文件方式为覆盖写