1、free

显示当前系统未使用的和已使用的内存数目,还可以显示被内核使用的内存缓冲区

-b:以Byte为单位显示内存使用情况;

-k:以KB为单位显示内存使用情况;

-m:以MB为单位显示内存使用情况;

-o:不显示缓冲区调节列;

-s<间隔秒数>:持续观察内存使用状况;

-t:显示内存总和列

 

2、df

显示磁盘分区上的可使用的磁盘空间。默认显示单位为KB。可以利用该命令来获取硬盘被占用了多少空间,目前还剩下多少空间等信息。

-a或--all:包含全部的文件系统;

--block-size=<区块大小>:以指定的区块大小来显示区块数目;

-h或--human-readable:以可读性较高的方式来显示信息;

-H或--si:与-h参数相同,但在计算时是以1000 Bytes为换算单位而非1024 Bytes;

-i或--inodes:显示inode的信息;

-k或--kilobytes:指定区块大小为1024字节;

-l或--local:仅显示本地端的文件系统;

-m或--megabytes:指定区块大小为1048576字节;

--no-sync:在取得磁盘使用信息前,不要执行sync指令,此为预设值;

-P或--portability:使用POSIX的输出格式;

--sync:在取得磁盘使用信息前,先执行sync指令;

-t<文件系统类型>或--type=<文件系统类型>:仅显示指定文件系统类型的磁盘信息;

-T或--print-type:显示文件系统的类型;

-x<文件系统类型>或--exclude-type=<文件系统类型>:不要显示指定文件系统类型的磁盘信息;

 

3、top

实时动态地查看系统的整体运行情况,是一个综合了多方信息监测系统性能和运行信息的实用工具。通过top命令所提供的互动式界面,用热键可以管理。

选项

-b:以批处理模式操作;

-c:显示完整的治命令;

-d:屏幕刷新间隔时间;

-I:忽略失效过程;

-s:保密模式;

-S:累积模式;

-i<时间>:设置间隔时间;

-u<用户名>:指定用户名;

-p<进程号>:指定进程;

-n<次数>:循环显示的次数。

交互命令

1:显示具体cpu的状态;

"Shift"+">"和"shift"+"<":修改进程信息的排序方式;

h:显示帮助画面,给出一些简短的命令总结说明;

k:终止一个进程;

i:忽略闲置和僵死进程,这是一个开关式命令;

q:退出程序;

r:重新安排一个进程的优先级别;

S:切换到累计模式;

s:改变两次刷新之间的延迟时间(单位为s),如果有小数,就换算成ms。输入0值则系统将不断刷新,默认值是5s;

f或者F:从当前显示中添加或者删除项目;

o或者O:改变显示项目的顺序;

l:切换显示平均负载和启动时间信息;

m:切换显示内存信息;

t:切换显示进程和CPU状态信息;

c:切换显示命令名称和完整命令行;

M:根据驻留内存大小进行排序;

P:根据CPU使用百分比大小进行排序;

T:根据时间/累计时间进行排序;

w:将当前设置写入~/.toprc文件中。

top中一些字段的含义

第一行:

* 当前的时间

* 系统累积以及运行的时间

* 当前登入用户的数量

* 当前的系统负载

第二行:

* 进程总数

* 正常运行的进程数量

* 休眠的进程总数

* 停止的进程总数

* 僵死进程总数

zombie僵尸进程

僵尸进程:一个进程使用fork创建子进程,如果子进程退出,而父进程并没有调用wait或waitpid获取子进程的状态信息,那么子进程的进程描述符仍然保存在系统中。这种进程称之为僵死进程。在每个进程退出的时候,内核释放该进程所有的资源,包括打开的文件,占用的内存等。但是仍然为其保留一定的信息(包括进程号the process ID,退出状态the termination status of the process,运行时间the amount of CPU time taken by the process等)。直到父进程通过wait / waitpid来取时才释放。但这样就导致了问题,如果进程不调用wait / waitpid的话,那么保留的那段信息就不会释放,其进程号就会一直被占用,但是系统所能使用的进程号是有限的,如果大量的产生僵死进程,将因为没有可用的进程号而导致系统不能产生新的进程. 此即为僵尸进程的危害,应当避免。

从系统角度来说,处理僵尸进程有两种方法:

1 找到僵死进程的父进程,kill掉父进程,那么僵死进程将变为孤儿进程,孤儿进程在系统中由init进程接管,init进程将回收僵死进程的资源

2 reboot系统,因为僵死进程是不可以被kill掉

第三行:

%Cpu(s): 10.6 us,  1.4 sy,  0.0 ni, 87.7 id,  0.0 wa,  0.0 hi,  0.3 si,  0.0 st

* us用户进程占用cpu资源的百分比

* sy内核态进程占cpu资源的百分比(对于硬件的控制,内核来控制

* ni用户进程空间内改变过优先级的进程占cpu资源的百分比

* id空闲cpu的百分比

* wa 等待输入输出(io)的进程占c资源的百分比 (从硬盘加载到内存)

* hi 硬中断(Hardware IRQ)占用cpu的百分比

* si软中断(Software Interrupts)占用cpu的百分比

* st 虚拟机占用cpu的百分比

进程信息:

PR:Priority 进程的优先级

NI:Nice Value.优先级的值,负数表示优先级很高,正数表示优先级比较低。

VIRT:virtual memory usage 虚拟内存,虚拟内存=物理内存+swap

1、进程"需要的"虚拟内存大小,包括进程使用的库、代码、数据等

2、假如进程申请100m的内存,但实际只使用了10m,那么它会增长100m,而不是实际的使用量

RES:resident memory usage 常驻内存

1、进程当前使用的内存大小,但不包括swap out

2、包含其他进程的共享

3、如果申请100m的内存,实际使用10m,它只增长10m,与VIRT相反

4、关于库占用内存的情况,它只统计加载的库文件所占内存大小

SHR:shared memory 共享内存

S — 进程状态 D=不可中断的睡眠状态 R=运行 S=睡眠 T=跟踪/停止 Z=僵尸进程

 

1、除了自身进程的共享内存,也包括其他进程的共享内存

2、虽然进程只使用了几个共享库的函数,但它包含了整个共享库的大小

3、计算某个进程所占的物理内存大小公式:RES – SHR

4、swap out后,它将会降下来

 

DATA

1、数据占用的内存。如果top没有显示,按f键可以显示出来。

2、真正的该程序要求的数据空间,是真正在运行中要使用的。

早期操作系统不支持多任务

对于操作系统的多任务,通过cpu时间片来实现处理多任务,目前的cpu主频率可达5.0GHz

 

4、uptime

打印系统总共运行了多长时间和系统的平均负载。uptime命令可以显示的信息显示依次为:现在时间、系统已经运行了多长时间、目前有多少登陆用户、系统在过去的1分钟、5分钟和15分钟内的平均负载,系统平均负载是指在特定时间间隔内运行队列中的平均进程数。

[[email protected] ~]# uptime

17:48:22 up  2:28,  2 users,  load average: 0.00, 0.06, 0.07

负载越高,系统越卡,负载值尽量不要超过cpu核数的两倍以上

 

5、lscpu

显示cpu的相关信息,也可以通过cat /proc/cpuinfo查看详细信息

lscpu从sysfs和/proc/cpuinfo收集cpu体系结构信息,命令的输出比较易读

命令输出的信息包含cpu数量,线程,核数,套接字和Nom-Uniform Memeor Access(NUMA),缓存等

显示格式:

Architecture: #架构

CPU(s): #逻辑cpu颗数

Thread(s) per core: #每个核心线程

Core(s) per socket: #每个cpu插槽核数/每颗物理cpu核数

CPU socket(s): #cpu插槽数

Vendor ID: #cpu厂商ID

CPU family: #cpu系列

Model: #型号

Stepping: #步进

CPU MHz: #cpu主频

Virtualization: #cpu支持的虚拟化技术

L1d cache: #一级缓存(google了下,这具体表示表示cpu的L1数据缓存)

L1i cache: #一级缓存(具体为L1指令缓存)

L2 cache: #二级缓存

 

6、iftop

yum install iftop -y

iftop可以用来监控网卡的实时流量(可以指定网段)、反向解析IP、显示端口信息等

6.1 iftop界面相关说明

界面上面显示的是类似刻度尺的刻度范围,为显示流量图形的长条作标尺用的。

中间的<= =>这两个左右箭头,表示的是流量的方向。

TX:发送流量

RX:接收流量

TOTAL:总流量

Cumm:运行iftop到目前时间的总流量

peak:流量峰值

rates:分别表示过去 2s 10s 40s 的平均流量

6.2 iftop相关参数

常用的参数

-i设定监测的网卡,如:# iftop -i eth1

-B 以bytes为单位显示流量(默认是bits),如:# iftop -B

-n使host信息默认直接都显示IP,如:# iftop -n

-N使端口信息默认直接都显示端口号,如: # iftop -N

-F显示特定网段的进出流量,如# iftop -F 10.10.1.0/24或# iftop -F 10.10.1.0/255.255.255.0

-h(display this message),帮助,显示参数信息

-p使用这个参数后,中间的列表显示的本地主机信息,出现了本机以外的IP信息;

-b使流量图形条默认就显示;

-f这个暂时还不太会用,过滤计算包用的;

-P使host信息及端口信息默认就都显示;

-m设置界面最上边的刻度的最大值,刻度分五个大段显示,例:# iftop -m 100M

进入iftop画面后的一些操作命令(注意大小写)

按h切换是否显示帮助;

按n切换显示本机的IP或主机名;

按s切换是否显示本机的host信息;

按d切换是否显示远端目标主机的host信息;

按t切换显示格式为2行/1行/只显示发送流量/只显示接收流量;

按N切换显示端口号或端口服务名称;

按S切换是否显示本机的端口信息;

按D切换是否显示远端目标主机的端口信息;

按p切换是否显示端口信息;

按P切换暂停/继续显示;

按b切换是否显示平均流量图形条;

按B切换计算2秒或10秒或40秒内的平均流量;

按T切换是否显示每个连接的总流量;

按l打开屏幕过滤功能,输入要过滤的字符,比如ip,按回车后,屏幕就只显示这个IP相关的流量信息;

按L切换显示画面上边的刻度;刻度不同,流量图形条会有变化;

按j或按k可以向上或向下滚动屏幕显示的连接记录;

按1或2或3可以根据右侧显示的三列流量数据进行排序;

按<根据左边的本机名或IP排序;

按>根据远端目标主机的主机名或IP排序;

按o切换是否固定只显示当前的连接;

按f可以编辑过滤代码,这是翻译过来的说法,我还没用过这个!

按!可以使用shell命令,这个没用过!没搞明白啥命令在这好用呢!

按q退出监控。

 

7、iostat

iostat主要用于监控系统设备的IO负载情况,iostat首次运行时显示自系统启动开始的各项统计信息,之后运行iostat将显示自上次运行该命令以后的统计信息。用户可以通过指定统计的次数和时间来获得所需的统计信息。

yum install sysstat -y

-c 仅显示CPU统计信息.与-d选项互斥.

-d 仅显示磁盘统计信息.与-c选项互斥.

-k 以K为单位显示每秒的磁盘请求数,默认单位块.

-p device | ALL

与-x选项互斥,用于显示块设备及系统分区的统计信息.也可以在-p后指定一个设备名,如:

# iostat -p hda

或显示所有设备

# iostat -p ALL

-t    在输出数据时,打印搜集数据的时间.

-V    打印版本号和帮助信息.

-x    输出扩展信息

第一部分包含了CPU报告

%user : 显示了在执行用户(应用)层时的CPU利用率

%nice : 显示了在以nice优先级运行用户层的CPU利用率

%system : 显示了在执行系统(内核)层时的CPU利用率

%iowait : 显示了CPU在I/O请求挂起时空闲时间的百分比

%steal : 显示了当hypervisor正服务于另外一个虚拟处理器时无意识地等待虚拟CPU所占有的时间百分比。

%idle : 显示了CPU在I/O没有挂起请求时空闲时间的百分比

第二部分包含了设备利用率报告

Device : 列出的/dev 目录下的设备/分区名称

tps : 显示每秒传输给设备的数量。更高的tps意味着处理器更忙。

KB_read/s : 显示了每秒从设备上读取的块的数量(KB,MB)

KB_wrtn/s : 显示了每秒写入设备上块的数量(KB,MB)

KB_read : 显示所有已读取的块

KB_wrtn : 显示所有已写入的块

 

8、vmstat

显示虚拟内存状态("Viryual Memor Statics"),但是它可以报告关于进程、内存、I/O等系统整体运行状态。

-a:显示活动内页;

-f:显示启动后创建的进程总数;

-m:显示slab信息;

-n:头信息仅显示一次;

-s:以表格方式显示事件计数器和内存状态;

-d:报告磁盘状态;

-p:显示指定的硬盘分区状态;

-S:输出信息的单位。

字段说明:

Procs(进程)

r: 运行队列中进程数量,这个值也可以判断是否需要增加CPU。(长期大于1)

b: 等待IO的进程数量。

Memory(内存)

swpd: 使用虚拟内存大小,如果swpd的值不为0,但是SI,SO的值长期为0,这种情况不会影响系统性能。

free: 空闲物理内存大小。

buff: 用作缓冲的内存大小。

cache: 用作缓存的内存大小,如果cache的值大的时候,说明cache处的文件数多,如果频繁访问到的文件都能被cache处,那么磁盘的读IO bi会非常小。

Swap

si: 每秒从交换区写到内存的大小,由磁盘调入内存。

so: 每秒写入交换区的内存大小,由内存调入磁盘。

注意:内存够用的时候,这2个值都是0,如果这2个值长期大于0时,系统性能会受到影响,磁盘IO和CPU资源都会被消耗。有些朋友看到空闲内存(free)很少的或接近于0时,就认为内存不够用了,不能光看这一点,还要结合si和so,如果free很少,但是si和so也很少(大多时候是0),那么不用担心,系统性能这时不会受到影响的。

IO(现在的Linux版本块的大小为1kb)

bi: 每秒读取的块数

bo: 每秒写入的块数

注意:随机磁盘读写的时候,这2个值越大(如超出1024k),能看到CPU在IO等待的值也会越大。

system(系统)

in: 每秒中断数,包括时钟中断。

cs: 每秒上下文切换数。

注意:上面2个值越大,会看到由内核消耗的CPU时间会越大。

CPU(以百分比表示)

us: 用户进程执行时间百分比(user time)

us的值比较高时,说明用户进程消耗的CPU时间多,但是如果长期超50%的使用,那么我们就该考虑优化程序算法或者进行加速。

sy: 内核系统进程执行时间百分比(system time)

sy的值高时,说明系统内核消耗的CPU资源多,这并不是良性表现,我们应该检查原因。

wa: IO等待时间百分比

wa的值高时,说明IO等待比较严重,这可能由于磁盘大量作随机访问造成,也有可能磁盘出现瓶颈(块操作)。

id: 空闲时间百分比

 

9、dmidecode

获取有关硬件方面的信息。dmidecode遵循SMBIOS/DMI标准,其输出的信息包括BIOS、系统、主板、处理器、内存、缓存等等

参数:

-d:(default:/dev/mem)从设备文件读取信息,输出内容与不加参数标准输出相同。

-h:显示帮助信息。

-s:只显示指定DMI字符串的信息。(string)

-t:只显示指定条目的信息。(type)

-u:显示未解码的原始条目内容。

--dump-bin file:将DMI数据转储到一个二进制文件中。

--from-dump FILE:从一个二进制文件读取DMI数据。

dmidecode的输出格式:

其中的前三行都称为记录头(recode header),其中包括了:

1.recode id(Handle):DMI表中的记录标识符,这是唯一的,比如上例中的Handle 0x0002.

2.DMI type id:记录的类型,譬如说:BIOS,Memory,上例是type 2,即"Base Board Information".

3.recode size:DMI表中对应记录的大小,上例为95 bytes。(不包括文本信息,所有实际输出的内容比这个size要更大)。记录头之后就是记录的值。

4.recoded values:记录值可以是多行的,比如上例显示了主板的制造商(Manufacturer)、Product Name、Version以及Serial Number。

查看服务器型号:dmidecode | grep 'Product Name'

查看主板的序列号:dmidecode |grep 'Serial Number'

查看系统序列号:dmidecode -s system-serial-number

查看内存信息:dmidecode -t memory

查看OEM信息:dmidecode -t 11

取出内存信息Size

awk '/Size/{print $(NF-1)}' a.txt|sort -n|uniq -c|awk '{print $1"*"$2}'|xargs -n 100|tr ' ' '+'

 

10、nethogs

按进程或程序实时统计网络带宽使用率

yum install nethogs -y

nethogs -d 5            #设置5秒钟的刷新频率

nethogs eth0            #监视设备(eth0)的网络带宽

nethogs eth0 eth1    #同时监视eth0和eth1接口

交互命令

m : 修改单位

r : 按流量排序

s : 按发送流量排序

q : 退出命令提示符