linux分析命令
- 一、服务器基础知识
- 二、linux文件结构
- 三、linux文件权限
- 四、linux命令
- 1、安装应用
- fedora家族: 如centos
- debain家族:如ubuntu
- 2、获取帮助
- 第一种:`command --help`
- 第二种:`man command`
- 第三种:`info`
- 3、服务器性能分析基础命令
- 1、top:实时显示各个系统中的各个进程的资源占用情况
- 2、ps:获取当前系统的进程状态
- 3、vmstat:对虚拟内存,进程,cpu活动进行监控
- 4、mpstat:主要监控cpu相关统计信息
- 5、pidstat:主要看cpu的上下文切换信息
- 6、netstat:检测本机各端口的网络连接情况
- 7、iostat:显示设备,分区和网络文件系统的cpu统计信息和输入输出统计信息
- 8、dstat:一个用来替换vmstat\iostat等命令的工具
- 9、sar:主要用作网络相关数据查看
-
一、服务器基础知识
- 无图像界面的服务器,一般才会作为服务器
- 通过客户端 xshell、putty、cmd、finalshell
- 客户端工具要能连接到linux机器上,机器必须开放ssh服务,这个服务端口22
- centos系统默认是安装了ssh服务,开放了22端口
- ubuntu系统 默认没有安装ssh服务,所以,ubuntu这种图像界面系统,有时候不能通过客户端来连接。
- 你想要连接到一台服务器上:
- 1、服务器必须启动ssh服务
- 2、服务器要开放ssh服务的端口
- 3、你本地与服务器之间网络要能通
- 检查: telnet server_ip 22
-
二、linux文件结构
- linux中,一切都是文件
- 查看文件结构:
- 安装查看结构的软件(树形结构展示文件路径):
yum -y install tree
- 查看n级路径:
tree -L 1/2/3
- 查看路径下的某个文件夹下的:
tree -L 1 /opt
- 安装查看结构的软件(树形结构展示文件路径):
目录 | 存储 |
---|---|
/boot | 核相关文件(内核) |
/bin | 存放系统中可用的命令,比如说cd,mkdir之类的 |
/etc | 系统管理所需要的所有配置文件 |
/usr | unix shared resource 用户共享程序文件夹,就像windows系统的program files目录 |
/opt | optional 给主机额外安装的软件目录 相当于windows的d盘 |
/home | 用户目录,它下一级文件夹,默认是被系统当作用户名的根路径。在企业中,你们操作服务器,一般会给你们非root权限的账号,那这个账号,肯定会在/home目录下面有一个文件夹,文件夹的名称是你的用户名,你的所有操作权限,都受这个用户的权限控制,所以你默认的操作都是在这个路径下 |
/sys | 系统文件,记录内核设备数 |
/media | 自动识别的外设 |
/mnt | 给用户临时挂载外部文件系统。因为linux所有的都是文件,所以当u盘等设备连接的时候,会把u盘当做文件挂载在这边,挂载的路径一般是这边 |
/proc | process进程,虚拟文件系统,存储当前内核运行状态的特殊文件 。比如cpuinfo: 记录着系统在启动时,读取的cpu相关信息。meminfo: 记录着系统在启动时,读取的memory相关信息。里面还有很多数字: 都是进程的id和pid。 进入这个文件夹,可以查看这个进程启动时相关信息 |
/root | 超级权限者的主目录 |
/run | 临时文件,系统启动的信息 |
/srv | 服务启动后,需要提取的数据 |
/var | 不断扩充的东西,如日志。/var/log/你的程序名称 日志文件 |
/tmp | 临时文件 |
/dev | device,linux的外部设备 |
-
三、linux文件权限
-
以时间顺序显示目录及其文件列表:
ls -lth
- 第1个: 目录:
d
开头,链接:l
开头, 文件:-
开头 - 第2/3/4个:归属用户user权限: r读 (4)w写(2) x执行(1)
chmod 777
文件名 授予权限,7表示授予读写执行权限
- 第5/6/7个:归属用户组group权限
- 第8/9/10个:其他other用户权限
- 第12个:归属用户username chown
- 第13个:归属用户组 groupname chgrp
- 第14个:大小
- 第15个:日期时间
- 最后一个:文件名称
- 第1个: 目录:
-
四、linux命令
-
2、获取帮助
-
第一种:
command --help
- 这种一般都显示
-
第二种:
man command
- 显示系统手册中的内容,会展示更多程序相关信息 - man ls如下
-
第三种:
info
- 能提供比man更详细的帮助信息
- info ls
-
-
- ps:并不是所有工具都有这些帮助
-
3、服务器性能分析基础命令
-
相关字段的解释
- 接下来我们对每行的数据进行逐步分析:
- 第一行:top - 11:14:43 up 379 days, 19:01, 1 user, load average: 0.24, 0.23, 0.31
- top - 11:14:43 :展示当前的系统时间
- up 379 days, 19:01:表示系统启动了多长时间
- 1 user:当前系统有几个用户连接进来(可以是同一个用户,比如5个用户都用root权限登录,那这边会展示5个)
- load average: 0.24, 0.23, 0.31:系统平均负载值
- 第一个值表示系统过去1分钟的平均负载值
- 第二个值表示系统过去5分钟的平均负载值
- 第三个值表示系统过去15分钟的平均负载值。
- 系统负载值,不等于cpu使用率值,因为系统的负载值,由两部分组成:cpu使用率+io使用率
- 历史经验,系统负载高低,与cpu数量有一定关系,但并不是绝对
- io:换入和换出。不止是磁盘的读写,还包括像服务器发起请求,服务器处理完成后,通过网络向外传递,磁盘从内存进入缓存,从内存进入cpu,从cpu进入内存等,比较宽泛
- cpu使用率高,受以下参数影响:us sy ni hi si…
- us:user space,用户态使用cpu的时间占比,比如说写了一段代码,代码只做了逻辑的判断,没有做底层的运算。类比测试就相当于熟悉系统,写测试用例这种做测试准备的非核心的工作。(非内核)
- sy:systcl space,系统态,在cpu内核中进行计算消耗的时间占比。占用时间越高,这个值越大。类比测试,就相当于执行测试,找bug这种核心工作。(内核)
- ni:nice 优先级切换(进程切换)占cpu百分比
- hi:hardware interrupt,硬中断占用百分比。比如你和家人视频通话时候一个电话来了,不得不中断。中断会导致时间浪费,也会导致资源占用升高(进程/线程切换)
- si:software interrupt,软中断占用百分比。就像是你打电话的时候另一个电话来了,然后你将第一个电话保持,然后去接第二个电话(进程/线程切换)
- id:idolt 空闲cpu百分比
- wa:wait IO等待占用cpu百分比
- st:hypervisor管理程序占用百分比
- 以后,不要说系统负载值大于cpu数量,就一定负载高
- load average: 0.24, 0.23, 0.31:如何知道我们现在系统的负载情况?
- 看第一个值是上升还是下降,如果现在负载值在上升,表示还会继续上升。
- 如果第一个值小于第二个值,表示现在系统负载正在下降,再过一段时间可能会恢复正常
- 如果第三个值小于第二个值,同上
- 输入数字
1
可以看到cpu数量,核数
- 第二行:Tasks: 272 total, 1 running, 205 sleeping, 0 stopped, 66 zombie
- tasks进程数,Threads:可以按
H
来切换线程- 任务列表中,S列对应
- S sleep 休眠
- R running 正在运行
- T stopped 终止
- Z zombie 僵尸进程
- KiB Mem : 32779828 total, 2448616 free, 3810724 used, 26520488 buff/cache
- KiB Swap: 0 total, 0 free, 0 used. 27860280 avail Mem
- buff/cache:缓存
- buffer:缓冲区(磁盘虚拟出来的加快读速度的空间)
- cache:缓存(cpu,内存的缓存)
- Swap:交换分区(也是磁盘虚拟出来的,进行内存数据转移的,不进行计算:内存->swap,swap->内存)
- PID:进程id
- USER:进程的归属用户
- PR:优先级的级别
- NI :优先级的值,值越低优先级越高
- VIRT:虚拟内存,进程使用的虚拟内存大小,默认是kb(任何一个程序启动都会在内存中占用物理内存和虚拟内存)
- RES: 物理内存大小,进程使用的物理内存大小,默认是kb
- SHR:共享内存大小,默认单位是kb
- 上面3个都是进程的内存相关数据,按小写e可以切换单位
- S:进程的状态
- %CPU:进程使用cpu率
- %MEM:进程使用mem率
- TIME+ :进程使用cpu的时间
- COMMAND:进程名称
- tasks进程数,Threads:可以按
-
这里只是展示了部分,按
F
可以获取更多信息
-
具体使用
-
top后具体的使用如下:
-
1、查看当前系统cpu使用率最高的4个进程
n4 回车键
-
还原
n0 回车
-
输入
m 回车
:内存信息
-
输入
t 回车
(task/cpu stats)cpu的情况
-
改变刷新频率:
s或者是d + 回车键
-
查看某个进程下线程资源的使用情况:
top H -p pid
-
-
2、ps:获取当前系统的进程状态
- ps(process status)获取帮助:
man ps
- 获取当前系统的进程状态
ps -ef/-eF/-ely
使用标准语法查看系统上的每个进程ps aux/ax
使用BSD语法查看系统上的每个进程ps -ejH/axms
显示进程树ps -eLf/axms
显示进程信息- 区别就是展示的内容不一致
- ps(process status)获取帮助:
-
3、vmstat:对虚拟内存,进程,cpu活动进行监控
- vmstat(yum -y install sysstat)
- 虚拟内存的缩写,可对虚拟内存,进程,cpu活动进行监控
-
-
参数 | 用法说明 |
---|---|
-a,–active | 显示活跃或非活跃的内存 |
-f,–forks | 线程从系统启动至今的fork数量(复制了几次) |
-m,–stabs | 显示stab信息 |
-n,–one-header | 头信息,仅显示一次 |
-s,–stats | 以表格方式显示时间计数器的内存状态 |
-d,–disk | 报告磁盘状态 |
-p,–partition | 显示指定的硬盘分区状态 |
-s,–unit | 输出信息的定位 |
- 具体含义的解释
procs -----------memory---------- ---swap-- -----io---- -system-- ------cpu-----r b swpd free buff cache si so bi bo in cs us sy id wa st1 0 0 2182412 4 26211260 0 0 0 15 0 0 4 1 96 0 01 0 0 2182140 4 26211260 0 0 0 0 1140 705 6 1 94 0 0
参数 | 说明 |
---|---|
procs | r显示多少进程在等待:如果r列的数量大于cpu核数,说明现在有大量的进程在等待cpu计算,现在可能出现了cpu不够用的情况–cpu成了我们的性能瓶颈,此时可能要去增加cpu数量或者减少运行的进程数。b显示多少进程正在不可中断的休眠:就是一直占用cpu资源,虽然没有在计算,就一直是等待状态。就像是进行接力赛,我边跑边等待前一个人把接力棒传给我。这个数量不能过大,过大说明资源不够用 |
memory | swad显示多少块被换出磁盘,free显示剩下的空闲块,buff/buffer表示正在被用作缓冲区的块,cache表示正在被用作操作系统的缓存 |
swap | 现在交换活动,si:每秒有多少块正在被换入内存,so:每秒有多少块正在被换出到磁盘 |
io | 显示了多少块从块设备读取(bi)和写出(bo),通常反映了磁盘I/O |
system | 显示每秒中断(in:interrupt)和上下文切换(cs cpu上下文切换)的数量 |
cpu | 显示所有的cpu时间花费在各类操作的百分比,包括执行用户代码(非内核),执行系统代码(内核),空闲以及等待IO |
- 内存不足的表现:
-
free memory急剧减少,回收buffer也无济于事,大量使用交换分区(swpd),页面交换(swap)频繁,读写磁盘数量(io)增多,缺页中断(in)增多,上下文切换(cs)次数增多,等待io的进程数(b)增多,大量cpu时间用于等待io(wa)
-
举例
- 每隔1s收集1次数据,共收集10次
- 每隔1s展示磁盘数据的情况
- 以表格方式显示时间计数器的内存状态(左边的数字展示的是数量)
-
4、mpstat:主要监控cpu相关统计信息
-
实时监控工具,主要监控cpu相关统计信息
-
需要手动安装sysstat才能使用(这个工具包中带了很性能分析的工具)
-
mpstat 1 10
每秒显示一次监控数据,总共显示10次
-
mpstat -P ALL 3
3s获取1次所有的监控数据 (这里还多展示了各个cpu的情况)
-
-
相关字段解释:
- %usr:用户态使用cpu的时间占比
- %nice:nice 优先级切换(进程切换)占cpu百分比
- %sys:系统态,在cpu内核中进行计算消耗的时间占比
- %iowait :等待占用cpu百分比
- %irq:硬中断
- %soft :软中断
- %steal :管理者占用资源
- %guest:显示cpu或cpu运行虚拟机处理器所花费的时间占比
- %gnice:显示cpu或cpu运行nices客户机所花费的时间占比
- %idle:idolt 空闲cpu百分比
-
5、pidstat:主要看cpu的上下文切换信息
- 监控全部或指定进程的cpu,内存,设备io等资源占用情况,主要看cpu的上下文切换信息。是一个常用的进程性能分析工具,用来实时查看进程的CPU,内存,IO以及上下文切换等指标信息
pidstat -u -w 1
-u
:查看cpu数据-w
:看cpu上下文数据
-
- 每隔1s收集1次数据,共收集10次
-
04:06:01 PM UID PID %usr %system %guest %CPU CPU Command
04:06:02 PM 999 1088 2.00 0.00 0.00 2.00 2 opsrv
04:06:02 PM 999 20072 1.00 1.00 0.00 2.00 5 postgres
- cswch/s (voluntary context switches)自愿上下文切换(在cpu做计算时候需要有资源来进行计算,如果资源给的足够,是可以去做的。做完这件事情后,自愿切换到其他事情上去)
- nvcswch voluntary context switches)非自愿上下文切换(做这件事情的时候资源不够,或者时间分配不足,到点了需要去做另外的事情,需要进行切换)
- 中断 VS 上下文切换:
-
中断: 中断当前正在运行的,去做其他事情
-
上下文切换: 资源的切换
-
中断,一定会导致上下文切换,但是上下文切换,不一定会中断。
-
6、netstat:检测本机各端口的网络连接情况
- 用于显示与IO/TCP/UDP/CMP协议相关的数据统计,一般用于检测本机各端口的网络连接情况
-a
显示所有连线中的socket-n
直接使用ip地址,用数字的方式显示,而不通过域名服务器-p
显示正在使用sokcet的程序识别码和程序名称-e
显示网络相关信息-t
显示tcp传输协议的连线情况
-
常用命令
netstat -anp
可以查看所有进程和进程的服务id
netstat -anp | grep
‘进程关键词或端口’,通过关键词过滤查找进程netstat -apl
-
7、iostat:显示设备,分区和网络文件系统的cpu统计信息和输入输出统计信息
-
显示设备,分区和网络文件系统的cpu统计信息和输入输出统计信息
-
-c
显示cpu使用率报告- 间隔1s,统计10次cpu使用率
- 间隔1s,统计10次cpu使用率
-
-d
显示设备使用率报告- 间隔1s,统计10次磁盘使用率
-
-k
以每秒千字节显示统计报告 -
-m
以每秒兆字节显示统计报告 -
-x
显示扩展统计信息,对比上个截图,是不是多了很多信息?
- 字段说明
iostat -dx 1 10
------没有带-m
,数据单位默认kb- rrqm/s 合并的每秒读多少请求
- wrqm/s 合并的每秒写多少请求
- r/s 读/每秒
- w/s 写/每秒
- rkB/s 读kb/s
- wkB/s
- avgrq-sz 平均请求的扇区数/每秒
- avgqu-sz 等待大的请求数
- await 等待的时间
- r_await 读等待的时间
- w_await 写等待的时间
- svctm 实际请求的时间
- %util 至少有一个活跃请求的所占的时间百分比
- 字段说明
-
8、dstat:一个用来替换vmstat\iostat等命令的工具
- 是一个用来替换vmstat\iostat等命令的工具,功能比较全,有彩色界面
- 安装:
yum install dstat -y
dstat -lcmdry
参数 用法 -c 显示cpu系统占用情况 -i 显示中断情况 -m 显示内存使用情况 -p 显示进程状态 -d 显示磁盘读写情况 -l 显示系统负载 -n 显示网络情况 -r 显示io运行情况 dstat -lcmdrpgny
hiq\siq
:硬中断/软中断int|csw
:中断次数\上下文切换次数
-
-
-
-
相关参数
-d/-b
磁盘驱动相关信息(disk,磁盘,io)-l
中断信息情况-n
网络统计信息(network)-q
系统负载压力统计-r
内存利用率信息-u
cpu利用率信息-P ALL
cpu调度相关
-
常用命令
sar -u 1
每隔1s统计一次cpu使用情况
sar -r 1
每隔1s统计一次内存使用情况sar -W 1
每隔1s统计一次交换分区使用情况sar -b 1
每隔1s统计一次IO使用情况sar -n socket 1
socket统计sar -n TCP 1
tcp连接统计
sar -w 1
每秒上下文交换信息sar -q 1
队列长度sar -B 1
页交换速率- 块:从磁盘中读取数据的最小单位
- 页:从内存中交换数据的最小单位,页的大小比块要大
-B
分页情况