linux命令繁杂,确必不可少,这里用来总结日常用的命令记录,随时更新…
free
free -s 3 # 持续刷新,每3s |
- total 本机的物理内存+swap
- used 已使用的内存和swap
- free 尚未分配的内存和swap
- shared 被共享的内存的大小,一般可以忽略
- buff/cache buffer 和 cache 使用的物理内存大小。
- available 列显示还可以被应用程序使用的物理内存大小。
公式:
available = free + buffer/cache
total = used + avaliable
free available : 在 free 命令的输出中,有一个 free 列,同时还有一个 available 列。这二者到底有何区别?
free 是真正尚未被使用的物理内存数量。available 是从应用程序的角度看到的可用内存数量。Linux 内核为了提升磁盘操作的性能,会消耗一部分内存去缓存磁盘数据,就是我们介绍的 buffer 和 cache。所以对于内核来说,buffer 和 cache 都属于已经被使用的内存。当应用程序需要内存时,如果没有足够的 free 内存可以用,内核就会从 buffer 和 cache 中回收内存来满足应用程序的请求。所以从应用程序的角度来说,available = free + buffer + cache
。请注意,这只是一个很理想的计算方式,实际中的数据往往有较大的误差。
另一种展示方式:
- total 物理内总量
- used 所有已使用的内存,包括实际使用的+bufers + cached
- free 未被分配的内存
- shared 共享内存,一般不会用到
- buffers 系统分配但未被使用的buffers数量
- cached 系统分配但未被使用的cache数量
- 第二行 buffers/cache
- used2 实际使用的buffers 与cache总量,也是实际使用的内存总量
- free2 未被使用的buffers 与cache 和未被分配的内存之和,这就是系统当前实际可用内存。
故:
total1 = used1 + free1
total1 = used2 + free2
used1 = buffers1 + cached1 + used2
free2 = free1 + buffers1 + cached1
那么为什么 free 命令不直接称为 cache 而非要写成 buff/cache?
这是因为缓冲区和页高速缓存的实现并非天生就是统一的。在 linux 内核 2.4 中才将它们统一。更早的内核中有两个独立的磁盘缓存:页高速缓存和缓冲区高速缓存。前者缓存页面,后者缓存缓冲区。当你知道了这些故事之后,输出中列的名称可能已经不再重要了。
ss
ss命令用于显示socket状态,建议使用ss命令替代netstat部分命令,例如netsat -ant/lnt等.
time netstat -lnp | wc -l |
ss -tlnp | grep 3100
- -n 地址使用数字展示(端口默认展示为别名)
- -p 展示端口所在的进程信息
- -l 展示listening的端口
- -t TCP
- -u UDP
或者
ss -tlnp sport = :3100
sport = :3100
用于过滤
vmstat
vmstat 1 1000
每秒刷新一次,1000次
字段含义说明:
- Procs(进程)
- r 等待执行的任务数。展示了正在执行和等待cpu资源的任务个数。当这个值超过了cpu个数,就会出现cpu瓶颈。
- B 等待IO的进程数量
- Memory(内存)
- swpd 正在使用虚拟的内存大小,单位k
- free 空闲内存大小
- buff 已用的buff大小,对块设备的读写进行缓冲
- cache 已用的cache大小,文件系统的cache
- inact 非活跃内存大小,即被标明可回收的内存,区别于free和active
- active 活跃的内存大小
- Swap
- si 每秒从交换区写入内存的大小(单位:kb/s)(注意是写入)
- so 每秒从内存写到交换区的大小
- IO
- bi 每秒读取的块数(读磁盘)(注意是读!就是读!)。现在的Linux版本块的大小为1024bytes。
- bo 每秒写入的块数(写磁盘)
- system
- in 每秒中断数,包括时钟中断,这两个值越大,会看到由内核消耗的cpu时间会越多
- cs 每秒上下文切换数
- CPU(以百分比表示)
- Us 用户进程执行消耗cpu时间(user time)。us的值比较高时,说明用户进程消耗的cpu时间多,但是如果长期超过50%的使用,那么我们就该考虑优化程序算法或其他措施了
- Sy 系统进程消耗cpu时间(system time)。sys的值过高时,说明系统内核消耗的cpu资源多,这个不是良性的表现,我们应该检查原因。
- Id 空闲时间(包括IO等待时间)
- wa 等待IO时间。Wa过高时,说明io等待比较严重,这可能是由于磁盘大量随机访问造成的,也有可能是磁盘的带宽出现瓶颈。
关于bi,bo,wa: vmstat下表io下面的bi表示读取和bo表示写入,单位是block(硬盘读写的最小单位是扇区,一个扇区是512 bytes。一次硬盘读写的数据量不会超过512 bytes,这一次读写的数据量就称为1个block。在大文件的读写操作中,基本可以按乘512来根据block计算出读写的实际数据量,误差很小。)cpu下面的wa,这个wa就是wait的缩写,代表的意思是CPU在等待硬盘读写操作的时间,用百分比表示。wait越大则机器io性能就越差。
iostat
iostat 1 10
每1s刷新一次,刷新十次
ps
$ ps -ef | grep nginx |
lsof
查看进程正在打开文件、网络、socket的状态
ps -ef | grep nginx #进程名 -> pid |
mac:
sudo lsof -nP -i :20002 |
netstat
查看当前的网络连接状态,主要用来查看本机和外部的的网络连接,包括端口,连接情况
netstat -anp # 所有端口 |
top
命令参数:
top -p 11232 # 仅展示某个进程 |
执行命令:
- -p 监控特定的PID
- -c 命令行列显示程序名以及参数
- -H 设置为线程模式
快捷键总结:
- V 大写V,以进程树的形式展示命令行列
- c 命令行列显示程序名以及参数
- E 更改总体内存展示单位
- e 更改每个进程内存展示的单位
- 1 展示每个单核的负荷
- P 大写P 按cpu排序
- M 大写M 按内存排序
- t 可以更动态的展示cpu
- m 更动态的展示内存
- f 更改展示字段
- s 改变更新周期
- %cpu可能会超过100%,因为是多核心负荷的累加。如果是12核机器,最多可达1200%!。使用
cat /proc/cpuinfo| grep "processor"| wc -l
查看核心数
实用的内部命令:
top 运行中可以通过 top 的内部命令对进程的显示方式进行控制。内部命令如下: |
字段含义:
序号 列名 含义 |
ip
ip addr # 网络状态 |
ls
mac: |
ps
ps -ef、ps aux命令可以展示进程的大概信息,启动时间展示不完整,如果想得知进程的详细启动时间,怎么办呢?
linux: |
系统信息
# linux内核信息 |
pidstat
使用示例
pidstat [ 选项 ] [ <时间间隔> ] [ <次数> ] |
参数说明
-u:默认的参数,显示各个进程的cpu使用统计 |