前言
在我们开发过程中,会遇到各种生产问题,有系统资源不足引起的,有程序异常引起的,以及其它原因,之前在Java博客中介绍了一篇问题定位的文章,里面介绍了如果针对系统资源进行分析,但是没有针对里面使用到的几个linux命令进行详细的分析与介绍,这篇文章就是对这几个命令进行一个介绍,可能会再多介绍几个其它的命令,以后补充
目录
top(实时显示进程的动态)
free(系统内存的使用情况)
iostat(CPU和磁盘IO相关的统计信息)
netstat(显示各种网络相关信息)
top(实时显示进程的动态)
系统负载:系统CPU繁忙程度的度量,即有多少进程在等待被CPU调度
平均负载:一段时间内系统的平均负载,这个一段时间一般取1分钟,5分钟,15分钟(即下面注释的1min,5min,15min)
进入Linux环境下,输入命令top显示:
当前时间|系统运行时间|当前登录用户数|系统负载(1min,5min,15min)
进程总数|正在运行的进程数|睡眠的进程数|停止的进程数|僵尸进程数
用户空间|内核空间|用户进程空间改变过优先级的进程(占用百分比)|空闲CPU百分比|等待输入输出的CPU时间百分比|CPU服务于硬中断锁耗费的时间总额|CPU服务于软中断所耗费的时间总额
物理内存总量|使用的物理内存总量|空闲内存总量|用作内核缓存的内存量
交换区总量|使用的交换区总量|空闲交换区总量|缓冲的交换区总量
除了上面的统计信息外,还有详细的进程信息显示
PID 进程Id
PPID 父进程ID
USER 进程所有者的用户名
PR 优先级
NI nice值,赋值表示高优先级,正值表示低优先级
VIRT 进程使用的虚拟内存总量(kb)VIRT=SWAP+RES
RES 进程使用的,未被换出的物理内存大小(kb)RES=CODE+DATA
SHR 共享内存大小(kb)
S 进程状态 D(不可中断的睡眠状态)R(运行)S(睡眠)T(跟踪/停止)Z(僵尸进程)
%CPU 上次更新到现在的CPU时间占用百分比
%MEM 进程使用的物理内存百分比
top -c 显示进程详细信息
上面说明的内容不全,还可以通过shift+f键选择要显示的内容(按f键之后会显示新的列表,按a-z即可显示或隐藏对应的列,最后按回车键确定)
几个操作
shift+p 以CPU占用率大小的顺序排列进程列表
shift+m 以内存占用率大小的排序排列进程列表
shift+H 显示所有线程信息
free(系统内存的使用情况)
free -h -s 3(持续的观察内存的状态,每隔3秒输出一次内存的使用情况)
列解释
Mem 内存的使用情况
Swap 交换空间的使用情况
total 系统总得可用物理内存和交换空间大小
used 已经被使用的物理内存和交换空间
free 还有多少物理内存和交换空间可用
shared 被共享的物理内存大小
buff/cache 被buffer和cache使用的物理内存大小
avaliable 还可以被应用程序使用的物理内存大小
iostat(CPU和磁盘IO相关的统计信息)
用法 isstat [选项][<时间间隔>][<次数>]
-c 只显示系统CPU统计信息,不包括设备信息
-d 单独输出设备结果,不包括CPU接口
-x 输出更详细的io设备统计信息
-k/-m 输出结果以kb/mb为单位,而不是以扇区数为单位
iostat -x -k -d 1 2 (每隔1s输出磁盘IO的详细信息,总共采样2次)
列解释
rrqm/s 每秒对该设备的读请求被合并次数,文件系统会读取同块的请求进行合并
wrqm/s 每秒对该设备的写请求被合并次数
r/s|w/s 每秒完成的读次数|每秒完成的写次数
rKB/s|wKb 每秒读数据量|每秒写数据量(kb为单位)
avgrq-sz 平均每次IO操作的数据量(扇区数为单位)
avgqu-sz 平均等待处理的IO请求队列长度
await 平均每次IO请求等待时间(包括等待时间和处理时间,毫秒为单位)
svctm 平均每次IO请求的处理时间(毫秒为单位)
%util 采用周期内用于IO操作的时间比率,即IO队列非空的时间比率
netstat(显示各种网络相关信息)
Active Internet connections 有源TCP连接,Recv-Q 和 Send-Q 接收队列和发送队列,一般为0,如果不是则表示软件包正在队列中堆积
Active UNIX domain sockets 有源Uninx域套接口(和网络套接字一样,但是只能用于本机通信,性能可以提高一倍)
显示内容介绍
Proto 显示连接使用的协议
RefCnt 表示连接到本套接口上的进程数量
Types 显示套接口的类型
State 显示套接口当前的状态
Path 表示连接到套接口的其它进程使用的路径名
列出所有端口 netstat -a 列出所有tcp端口 netstat -at 列出所有udp端口 netstat -au
只显示监听端口 netstat -l 只显示所有监听tcp端口 netstat -lt 只现实所有监听udp端口 netstat -lu
每隔一秒输出网络信息 netstat -t -c 1
显示核心路由信息 netstat -rn
找出程序运行的端口 netstat -apn | grep ssh (ssh是一个服务名,没有权限的会不显示,使用root权限查看所有信息)
显示网络接口列表 netstat -i nettstat -ie