参考
Linux中 du (详解)、 df (详解)和 free(详解)以及它们的区别_“花花”公子_龙的博客-CSDN博客_df du
内存
1.free
free 可以显示Linux系统中空闲的、已用的物理内存及swap内存,及被内核使用的buffer。
(1)命令格式:
free [参数]
(2)命令功能:
free 命令显示系统使用和空闲的内存情况,包括物理内存、交互区内存(swap)和内核缓冲区内存。共享内存将被忽略
(3)命令参数:
-b 以Byte为单位显示内存使用情况。
-k 以KB为单位显示内存使用情况。
-m 以MB为单位显示内存使用情况。
-g 以GB为单位显示内存使用情况。
-o 不显示缓冲区调节列。
-s<间隔秒数> 持续观察内存使用状况。
-t 显示内存总和列。
-V 显示版本信息。
(4)输出解释
frilab@fri-ml-server:~$ free -g total used free shared buff/cache available Mem: 62 12 2 0 47 49 Swap: 7 0 7
Mem:内存的使用情况总览表(物理内存)
Swap:虚拟内存。即可以把数据存放在硬盘上的数据
shared:共享内存,即和普通用户共享的物理内存值
buffers:用于存放要输出到disk(块设备)的数据的
cached:存放从disk上读出的数据
total:机器总的物理内存
used:用掉的内存
free:空闲的物理内存
cache:系统分配但未被使用的cache数量(cache是cpu和内存之间的,buffer是内存和磁盘之间的,都是为了解决速度不对等的问题。
缓存(cache)是把读取过来的数据保存起来,重新读取时若命中,就不去硬盘了,若没有命中就去读硬盘,其中的数据会根据读取频率进行组织,把最频繁读取的内容放在最容易找到的位置,把不再读取的内容不断往后排,直至从中删除。
缓冲(buffer)时根据磁盘的读写设计的,把分散的写操作集中进行,减少磁盘碎片和硬盘的的反复寻道,从而提高系统性能,linux有一个守护进程定期清空缓冲内容(即写入磁盘)。(buffer是即将要写入磁盘的,而cache是被从磁盘中读出来的。)
available:和free是有区别的,是实际可以用的最大空间。是应用程序认为可用内存数量,available = free + buff/cache (注:只是大概的计算方法)Linux 为了提升读写性能,会消耗一部分内存资源缓存磁盘数据,对于内核来说,buffer 和 cache 其实都属于已经被使用的内存。但当应用程序申请内存时,如果 free 内存不够,内核就会回收 buffer 和 cache 的内存来满足应用程序的请求。这就是稍后要说明的 buffer 和 cache。注:物理内存(total)=系统看到的用掉的内存(used)+系统看到空闲的内存(free)
2. top
top实时显示系统中各个进程的资源占用情况。
(1)命令格式
top [-d number] | top [-bnp]
(2)命令参数
-d:number代表秒数,表示top命令显示的页面更新一次的间隔。默认是5秒。 -b:以批次的方式执行top。 -n:与-b配合使用,表示需要进行几次top命令的输出结果。 -p:指定特定的pid进程号进行观察。
在top命令显示的页面还可以输入以下按键执行相应的功能(注意大小写区分的):
?:显示在top当中可以输入的命令【注:大写字母 】
P:以CPU的使用资源排序显示 M:以内存的使用资源排序显示 N:以pid排序显示 T:由进程使用的时间累计排序显示 k:给某一个pid一个信号。可以用来杀死进程 r:给某个pid重新定制一个nice值(即优先级) q:退出top。
在top基本视图中,按键盘数字“1”可以监控每个逻辑CPU的状况; 敲击键盘‘x’(打开/关闭排序列的加亮效果);敲击键盘‘b’(打开关闭运行态进程的加亮效果)
用ctrl+c也可以退出top。
(3)输出内容
top - 10:27:50 up 201 days, 18:07, 2 users, load average: 1.23, 1.09, 1.02 Tasks: 908 total, 1 running, 726 sleeping, 0 stopped, 0 zombie %Cpu(s): 2.8 us, 1.3 sy, 0.0 ni, 95.4 id, 0.0 wa, 0.0 hi, 0.5 si, 0.0 st KiB Mem : 65622940 total, 1967308 free, 13326808 used, 50328824 buff/cache KiB Swap: 8388604 total, 8380656 free, 7948 used. 51702960 avail Mem PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND 32104 999 20 0 2560284 221456 20640 S 72.8 0.3 4246:24 mysqld 31293 root 20 0 702760 8208 2624 S 33.1 0.0 1811:00 docker-proxy 3163 root 20 0 20.744g 314620 18820 S 19.7 0.5 1289:46 java
top前5行统计信息
第1行:top - 05:43:27 up 4:52, 2 users, load average: 0.58, 0.41, 0.30。 第1行是任务队列信息,其参数如下:
内容 含义 05:43:27 表示当前时间 up 4:52 系统运行时间 格式为时:分 2 users 当前登录用户数 load average: 0.58, 0.41, 0.30 系统负载,即任务队列的平均长度。 三个数值分别为 1分钟、5分钟、15分钟前到现在的平均值。
第2行:Tasks: 159 total, 1 running, 158 sleeping, 0 stopped, 0 zombie ;第3行:%Cpu(s): 37.0 us, 3.7 sy, 0.0 ni, 59.3 id, 0.0 wa, 0.0 hi, 0.0 si, 0.0 st ;第2、3行为进程和CPU的信息 ;当有多个CPU时,这些内容可能会超过两行,其参数如下:
内容 含义 159 total 进程总数 1 running 正在运行的进程数 158 sleeping 睡眠的进程数 0 stopped 停止的进程数 0 zombie 僵尸进程数 37.0 us 用户空间占用CPU百分比 3.7 sy 内核空间占用CPU百分比 0.0 ni 用户进程空间内改变过优先级的进程占用CPU百分比 59.3 id 空闲CPU百分比 0.0 wa 等待输入输出的CPU时间百分比 0.0 hi 硬中断(Hardware IRQ)占用CPU的百分比 0.0 si 软中断(Software Interrupts)占用CPU的百分比 0.0 st
第4行:KiB Mem: 1530752 total, 1481968 used, 48784 free, 70988 buffers ;第5行:KiB Swap: 3905532 total, 267544 used, 3637988 free. 617312 cached Mem ;第4、5行为内存信息
其参数如下:
内容 含义 KiB Mem: 1530752 total 物理内存总量 1481968 used 使用的物理内存总量 48784 free 空闲内存总量 70988 buffers(buff/cache) 用作内核缓存的内存量 KiB Swap: 3905532 total 交换区总量 267544 used 使用的交换区总量 3637988 free 空闲交换区总量 617312 cached Mem 缓冲的交换区总量。 3156100 avail Mem 代表可用于进程下一次分配的物理内存数量
进程信息
列名 含义 PID 进程id PPID 父进程id RUSER Real user name UID 进程所有者的用户id USER 进程所有者的用户名 GROUP 进程所有者的组名 TTY 启动进程的终端名。不是从终端启动的进程则显示为 ? PR 优先级 NI nice值。负值表示高优先级,正值表示低优先级 P 最后使用的CPU,仅在多CPU环境下有意义 %CPU 上次更新到现在的CPU时间占用百分比 TIME 进程使用的CPU时间总计,单位秒 TIME+ 进程使用的CPU时间总计,单位1/100秒 %MEM 进程使用的物理内存百分比 VIRT 进程使用的虚拟内存总量,单位kb。VIRT=SWAP+RES SWAP 进程使用的虚拟内存中,被换出的大小,单位kb RES 进程使用的、未被换出的物理内存大小,单位kb。RES=CODE+DATA CODE 可执行代码占用的物理内存大小,单位kb DATA 可执行代码以外的部分(数据段+栈)占用的物理内存大小,单位kb SHR 共享内存大小,单位kb nFLT 页面错误次数 nDRT 最后一次写入到现在,被修改过的页面数。 S 进程状态。D=不可中断的睡眠状态 R=运行 S=睡眠 T=跟踪/停止 Z=僵尸进程 COMMAND 命令名/命令行 WCHAN 若该进程在睡眠,则显示睡眠中的系统函数名 Flags 任务标志
CPU
查看cpu信息(信息记录在/proc/cpuinfo中)
总核数 = 物理CPU个数 X 每颗物理CPU的核数
总逻辑CPU数 = 物理CPU个数 X 每颗物理CPU的核数 X 超线程数
【补充wc、sort、uniq、cut命令】
wc
Linux wc命令用于计算字数。
利用wc指令我们可以计算文件的Byte数、字数、或是列数,若不指定文件名称、或是所给予的文件名为"-",则wc指令会从标准输入设备读取数据。
语法
wc [-clw][--help][--version][文件...]参数:
- -c或--bytes或--chars 只显示Bytes数。
- -l或--lines 显示行数。
- -w或--words 只显示字数。
- --help 在线帮助。
- --version 显示版本信息。
sort
sort 命令对 File 参数指定的文件中的行排序,并将结果写到标准输出。如果 File 参数指定多个文件,那么 sort 命令将这些文件连接起来,并当作一个文件进行排序。
参数
- -b 忽略每行前面开始出的空格字符。
- -d 排序时,对英文字母、数字及空格字符进行排序,忽略其他的字符
- -u 意味着是唯一的(unique),输出的结果是去完重了的。
- -o<输出文件> 将排序后的结果存入指定的文件
- -t<分隔字符> 指定排序时所用的栏位分隔字符。例如:-t* 以*分隔字符 ,分成多列,然后+ 或-k指定按照第几列排序,列数从1开始计数。
- +<起始栏位>-<结束栏位> 以指定的栏位来排序,范围由起始栏位到结束栏位的前一栏位。
- [-k field1[,field2]] 按指定的列进行排序
示例:
frilab@fri-ml-server:~$ sort one a b cd se sort 命令将以默认的方式将文本文件的第一列以 ASCII 码的次序排列,并将结果输出到标准输出。
,使用-t指定分隔符,使用 -k 参数设置对第二列的值进行重排,结果如下: (1)文件内容 frilab@fri-ml-server:~$ cat one b-3 a-2 cd-1 se-0 (2)指定分隔符、指定排序列数 frilab@fri-ml-server:~$ sort -t- -k 2 one se-0 cd-1 a-2 b-3
uniq
uniq命令可以去除排序过的文件中的重复行,因此uniq经常和sort合用。也就是说,为了使uniq起作用,所有的重复行必须是相邻的。
语法
uniq [-icu] [输入文件][输出文件]
选项与参数:
- -i :忽略大小写字符的不同;
- -c :进行计数
- -u :只显示唯一的行
- [输入文件] 指定已排序好的文本文件。如果不指定此项,则从标准读取数据;
- [输出文件] 指定输出的文件。如果不指定此选项,则将内容显示到标准输出设备(显示终端)
cut
cut命令可以从一个文本文件或者文本流中提取文本列。
语法
cut -d'分隔字符' -f fields <==用于有特定分隔字符
参数
- -d :后面接分隔字符。与 -f 一起使用;
- -f :依据 -d 的分隔字符将一段信息分割成为数段,用 -f 取出第几段的意思,去除多段时,逗号分隔。
(1)PATH变量值 frilab@fri-ml-server:~$ echo $PATH /usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:/snap/bin:/usr/java/jdk1.8.0_231/bin (2)分号分隔 去除3 5位的字符【序号从1开始计数】 frilab@fri-ml-server:~$ echo $PATH | cut -d ':' -f 3,5 /usr/sbin:/sbin frilab@fri-ml-server:~$
查看虚拟机逻辑CPU的个数
# cat /proc/cpuinfo| grep "processor"| wc -l [root@localhost ~]# cat /proc/cpuinfo| grep "processor"| wc -l 6
查看物理CPU个数
# cat /proc/cpuinfo| grep "physical id"| sort| uniq| wc -l [root@localhost ~]# cat /proc/cpuinfo| grep "physical id"| sort| uniq| wc -l 1
列出CPU详细信息
# lscpu
frilab@fri-ml-server:~$ lscpu Architecture: x86_64 CPU op-mode(s): 32-bit, 64-bit Byte Order: Little Endian CPU(s): 32 On-line CPU(s) list: 0-31 Thread(s) per core: 2 Core(s) per socket: 8 Socket(s): 2 NUMA node(s): 2 Vendor ID: GenuineIntel CPU family: 6 Model: 85 Model name: Intel(R) Xeon(R) Silver 4110 CPU @ 2.10GHz Stepping: 4 CPU MHz: 2100.116 BogoMIPS: 4200.00 Virtualization: VT-x L1d cache: 32K L1i cache: 32K L2 cache: 1024K L3 cache: 11264K
磁盘
du
作用
显示每个文件和目录的磁盘使用空间~~~文件的大小。
命令参数
-a #显示目录中文件的大小 单位 KB 。
-b #显示目录中文件的大小,以字节byte为单位。
-c #显示目录中文件的大小,同时也显示总和;单位KB。
-k 、 -m 、#显示目录中文件的大小,-k 单位KB,-m 单位MB.
-s #仅显示目录的总值,单位KB。
-h #以K M G为单位显示,提高可读性~~~(最常用的一个~也可能只用这一个就满足需求了)
-x #以一开始处理时的文件系统为准,若遇上其它不同的文件系统目录则略过。
-L #显示选项中所指定符号链接的源文件大小。
-S #显示个别目录的大小时,并不含其子目录的大小。
-X #在<文件>指定目录或文件。
--exclude=<目录或文件> #略过指定的目录或文件。
-D #显示指定符号链接的源文件大小。
-H或--si #与-h参数相同,但是K,M,G是以1000为换算单位。
-l #重复计算硬件链接的文件。
df
作用:显示磁盘分区上还没有使用可使用的磁盘空间
这里只记住两个参数就好:
-a #查看全部文件系统,单位默认KB
-h #使用-h选项以KB、MB、GB的单位来显示,可读性高~~~(最常用)