您的位置:首页 > 运维架构 > Linux

Linux资源性能监控命令工具

2020-11-02 12:25 881 查看

    资源性能监控是linux系统管理的重要工作内容,在监控中有如zabbix这样的集成监控软件,适用于界面查看报警,而针对机器的命令行监控工具也是相当重要,尤其是在机器上排查故障的时候,命令行监控工具能提供更多的有效信息,是开发运维必须掌握的基础技能。本节主要介绍机器基础资源、进程、网络的监控以及排查故障的思路。

3.3.1 基础资源监控管理

  1)检查登录用户----w 命令 

  作用:查看当前机器用户登录在线信息

  示例:[root@centos7 ~]# w    #展示在线用户的登录信息

  2)监看CPU使用情况----uptime 命令

  作用:查看启动时间及cpu消耗负载

  参数:-s 查看系统启动时。

  [root@centos7 ~]# uptime    #查看系统启动时间和负载
   22:22:52 up 5 min, 3 user, load average: 0.00, 0.03, 0.03
  uptime的执行结果分四组释义:
    22:22:52       表示当前时间
    up 5 min       表示机器运行了5分钟
    3 user           表示有3个用户连接机器
    load average: 0.00, 0.03, 0.03   表示1、5、15分钟内系统平均负载
  [root@centos7 ~]# uptime -s  #查看机器启动时间
  2020-10-25 22:17:00

  提示:cpu的负载值应该小于 cpu个数*核数,负载过大时就需要排查问题了。

  3)查看内存消耗----free 命令

  作用:查看系统内存使用情况

  参数:-b 以Byte显示内存;-k 以KB显示内存;-m 以MB为单位显示内存,-s 以持续时间观察内存状况,-h 以合适单位显示内存情况。

  [root@centos7 ~]# free       #直接查看内存,默认KB计量大小
  [root@centos7 ~]# free -m     #以MB单位显示内存大小
  [root@centos7 ~]# free -s 2      #每两秒执行一次命令,Ctrl+c退出
  [root@centos7 ~]# free -h     #自动选择合适单位显示内存状况
     total  used free shared buff/cache available
  Mem:  1.8G   131M   1.5G  9.5M   170M  1.5G
  Swap: 2.0G    0B    2.0G

   结果释义:total 总内存,userd 已用内存,free 空闲内存,buff/cache 缓存,available 可用内存是free+buff/cache之和;mem 是机器内存信息行,swap 是交换分区使用信息行。推荐使用 free -h命令查看信息。

  4)查看磁盘占用量----df 命令

  作用:查看系统磁盘信息

  参数:-h 自动选择合适单位显示磁盘大小;-i 显示磁盘iNode信息; -T显示文件系统类型。

  [root@centos7 ~]# df       #默认KB单位显示信息
  [root@centos7 ~]# df -h      #自适应单位显示磁盘信息
  [root@centos7 ~]# df -i       #查看磁盘的inode信息
  [root@centos7 ~]# df -T      #显示磁盘文件系统类型(格式)

  提示:iNode数是该分区能够创建的文件个数,如果inode耗尽,分区将无法创建存储新文件。

  5)监控磁盘IO----iotop

  作用:动态查看磁盘io状况

  参数:-o 显示正在读写磁盘的进程;-p 查看指定pid进程的磁盘读写情况;-u 指定某个用户产出的磁盘io情况。

  [root@centos7 ~]# iotop       #动态查看磁盘io消耗情况
  [root@centos7 ~]# iotop -o      #查看正在读写磁盘的进程及消耗情况
  [root@centos7 ~]# iotop -p 6766   #查看指定pid进程的磁盘io信息
  [root@centos7 ~]# iotop -u nginx   #查看nginx用户的磁盘读写情况

  提示:系统默认不带该命令,需要执行yum install iotop -y安装才能使用。

3.3.2 进程监控管理

  1)查看进程----ps 命令

  作用:查看当前系统进程信息

  参数:-u 指定用户;-e 列出所有进程;-f 显示程序关系;-aux 显示用户的所有进程详细信息。

  [root@centos7 ~]# ps -e       #列出所有进程
  [root@centos7 ~]# ps -ef       #显示所有进程信息及进程命令
  [root@centos7 ~]# ps -u nginx    #显示nginx用户的进行详情
  [root@centos7 ~]# ps -aux      #列出当前内存中的所有进程信息详情
  [root@centos7 ~]# ps -eLf      #列出所有线程信息
  [root@centos7 ~]# ps -aux --sort -pcpu | less    #根据CPU使用升序排序
  [root@centos7 ~]# ps -aux --sort -pmem | less    #根据内存使用大小排序
  [root@centos7 ~]# pstack 12366      #查看pid为12366进程的栈跟踪信息

  提示:pstack可以查看进程的栈信息,需要yum install gdb -y安装后使用,用法 pstack pid。

  2)监看系统负载情况----vmstat 命令

  作用:查看mem、 swap、system、cpu活动的状态信息

  参数:-a 显示活跃和非活跃内存;-f 显示系统所有fork进程数量;-n 只显示一次指标名称;-d 显示磁盘相关信息;-p 显示指定分区信息;

  [root@centos7 ~]# vmstat         #默认查看进程内存swap以及cpu消耗状态
  [root@centos7 ~]# vmstat -a         #查看带有活跃或不活跃内存信息的系统负载
  [root@centos7 ~]# vmstat -f         #从机器启动到当前时间的进程fork总数
  [root@centos7 ~]# vmstat -n 1       #每隔一秒刷新一次监控信息
  [root@centos7 ~]# vmstat -d         #查看磁盘的读写及IO
  [root@centos7 ~]# vmstat -p /dev/sda1   #查看单一分区的读写及请求信息

   结果释义:命令执行的结果如上图,结果中有很多参数指标代指特定意义信息,以前两个命令为例:r 表示等待执行任务数量,b 表示等待io的进程数量,swpd 表示正在使用的虚拟内存,free 表示空闲内存,buff 表示已使用的buff大小,cache 表示已在使用的cache大小,inact 意思是不活跃内存大小,active 表示活跃内存大小,si 从内存写入交换区大小,so 从交换区写到内存的大小,bi 块设备读数据总量,bo 块设备写入数据总量,in 每秒的中断数,cs 上下文切换量,us 表示用户cpu消耗百分比,sy 消耗cpu时间,id空闲cpu使用率,wa 表示等待io时间,st 虚拟机等待cpu分配的时间。

  3)进程动态监控----top 命令

  作用:动态查看进程的任务、cpu、内存、负载等信息

  参数:-c 显示完整命令行;-d 指定刷新时间;-p 查看指定pid的进程信息;-n 指定刷新次数;-i 不显示闲置进程;-u 查看指定用户的进程信息;-H 线程模式显示。

  [root@centos7 ~]# top         #默认显示进程、系统负载信息
  [root@centos7 ~]# top -c        #显示COMMAND完整进程命令
  [root@centos7 ~]# top -d 2       #没两秒刷新一次监控信息
  [root@centos7 ~]# top -n 2       #刷新两次后退出动态查看
  [root@centos7 ~]# top -i        #动态查看活跃进程
  [root@centos7 ~]# top -u nginx     #查看nginx用户的进程状态
  [root@centos7 ~]# top -p 12365     #指定进程的动态信息
  [root@centos7 ~]# top -H        #线程模式显示信息

   结果释义:命令执行的结果如上图所示,图中有众多参数,下面逐一释义。第一行:up 后面是系统运行的时间,user是当前用户数量,load average是1/5/15分钟负载情况;第二行tasks任务:total是任务进程总数,running是正在运行的进程,sleeping表示休眠进程,stoped 表示已停止的进程,zombie表示僵尸进程;第三行Cpu消耗百分比:us表示用户进程cpu时间,sy是内核进程的cpu时间,ni是优先进程的cpu时间,id表示cpu空闲时间,wa是等待磁盘IO的cpu时间,hi 硬件中断时间,si 软件终端时间,st 虚拟机等待cpu分配的时间;第四行是Mem内存的使用情况;第五行是Swap交换分区的使用情况;第六行进程信息参数:PID 是进程ID号,USER是进程的所有者,PR表示进程调度优先级,NI是nice进程的优先级、越小优先级越高,VIRT是虚拟内存的大小,RES表示物理内存大小,SHR是共享内存,S表示当前进程的运行状态,%CPU表示进程使用的cpu比例,%MEM表示进程内存使用比,TIME+表示累计使用cpu的时间,COMMAND是运行进程的程序命令。其中进程的运行状态值中有R(运行中)、S(睡眠)、T(停止)、D(不可中断)、Z(僵尸)等多种进程状态。

3.3.3 网络性能监控管理

  1)网络接口信息----ip命令

  作用:显示设置网络接口信息

  参数:addr 显示或设置地址信息;route 显示或设置路由;link 显示连接数据信息。

  [root@centos7 ~]# ip addr    #查看网络设备ip信息
  [root@centos7 ~]# ip route     #查看本机路由信息
  [root@centos7 ~]# ip -s link    #查看网卡数据传输信息

  提示:ip 的命令可以直接执行ip和路由的设置,为了安全不建议使用这种方式配置网络。

  2)路由信息管理----route 命令

  作用:显示或设置静态IP路由

  [root@centos7 ~]# route -n        #查看路由表信息
  [root@centos7 ~]# route add default gw 192.168.1.254    #设置默认网关
  [root@centos7 ~]# route del default gw 192.168.1.1      #删除默认网关
  [root@centos7 ~]# route add -net 192.168.1.0/24 gw 192.168.1.254  #为指定网段设置网关
  [root@centos7 ~]# route add -net 192.168.2.0 netmask 255.255.255.0 dev eth1 #指定网段网卡设置

  提示:网络变更涉及安全稳定问题,建议在配置文件中设置调整网络,先备份再调整。

  3)查看网络状态信息----netstat 命令

  作用:查看网络连接端口PID信息

  参数:-a (all)显示所有选项;-r 显示route路由表;;-t (tcp)显示tcp相关选项;-u (udp)显示udp相关选项;-n 显示IP地址连接信息;-l 显示在监听状态下的socket连接;-p 显示程序名及ID;-e 显示扩展信息;-s 按协议数据统计信息;-v 显示命令执行过程。

  [root@centos7 ~]# netstat -a       #默认显示所有连接socket
  [root@centos7 ~]# netstat -r       #查看路由表,相当route -n
  [root@centos7 ~]# netstat -i       #查看网卡接口数据状态信息
  [root@centos7 ~]# netstat -s       #显示按协议分类的数据统计信息
  [root@centos7 ~]# netstat -l       #查看监控的接口连接信息
  [root@centos7 ~]# netstat -an      #查看所有网络连接状态信息
  [root@centos7 ~]# netstat -lnupt     #列出查看连接、端口、程序名等信息
  [root@centos7 ~]# netstat -lnpt |grep tcp| awk '{print $7}' | cut -d/ -f1   #列出tcp进程的pid
  [root@centos7 ~]# netstat -ant |awk '{print $6}'|sort|uniq -c|sort -rn   #按顺序列出tcp状态连接数
  [root@centos7 ~]# netstat -anlp|grep 80|grep tcp|awk '{print $5}'|awk -F: '{print $1}'|sort|uniq -c|sort -nr|head -n10   #列出连接80端口最多的访问ip

  提示:netstat命令常与grep/awk/sort等命令组合使用,用于查询端口信息及分析网络连接数据信息。

  4)网络性能动态监控----iftop 命令

  作用:监控网卡实时流量

  参数:-i 指定网卡;-F 指定网段/掩码。

  [root@centos7 ~]# iftop         #默认监控流量
  [root@centos7 ~]# iftop -i ens33    #监控指定网卡流量
  [root@centos7 ~]# iftop -F 192.168.1.0/255.255.255.0  #监控指定网段的流量

 

   结果释义:箭头表示流量的走向,指明了从哪里来和到哪里去及流量大小;最下面的TX表示发送流量,RX表示接收的流量,TOTAL是总流量,cum是统计iftop开启监控到当前时间的累积流量,peak表示流量的峰值大小,rates表示2秒/10秒/40秒的平均流量。

3.3.4 网络追踪

  1)查看网络通信状态----ping 命令

  作用:检测网络的通达性

  [root@centos7 ~]# ping 127.0.0.1       #测试本地网络是否正常
  [root@centos7 ~]# ping 192.168.1.133     #测试本地局域网中其他ip是否正常
  [root@centos7 ~]# ping 192.168.1.1      #测试本地网关是否通畅
  [root@centos7 ~]# ping 113.92.33.111     #测试外网ip能否连通
  [root@centos7 ~]# ping www.baidu.com   #测试外网域名解析是否正常

  提示:ping应按照由内到外的顺序进行排查问题,依次是本机/本地/网关/外网;在通常情况下,ping不通的地址会有网络问题,在一些服务机器上会设置防火墙禁ping,遇到ping的检测时也是没有反馈的,所以ping不通时,不能武断的认为ping不通就有网络问题,需要深入的排查,比如用telnet + ip + 端口的方式检测。

  2)检测机器端口通达性---telnet 命令

        作用:检查端口能否正常访问,或者登陆机器

  [root@centos7 ~]# telnet 127.0.0.1 80   #检测本机的80端口网络是否通畅
  [root@centos7 ~]# telnet 127.0.0.1      #telnet方式登录机器

  提示:telnet命令的退出可以用Ctrl+c,有时候会失效,需要用Ctrl+]组合键,输入quit退出。

  3)查询DNS信息----nslookup / dig 命令

  作用:查询域名与ip的对应解析关系

  [root@centos7 ~]# nslookup www.baidu.com  #检测dns能否解析百度域名
  [root@centos7 ~]# dig www.baidu.com    #检测域名解析详细信息

  提示:这两个命令非默认安装,使用前执行 yum install bind-utils -y 安装。

  4)网络路由跟踪----traceroute 命令

  作用:跟踪数据包路由

  示例:[root@centos7 ~]# traceroute www.baidu.com  #跟踪访问百度地址

  提示:该命令可yum install traceroute -y安装,建议无参数直接使用。

  5)网络数据抓包分析-----tcpdump 命令

  作用:抓取网络数据包

  参数:-i 指定网卡设备;-vv 详细信息;-w 抓取内容写入文件;-r 读取抓包文件;host 指定主机;port 设定端口;src 源地址;dst 目标地址;and 并列条件;or 任一条件。

  [root@centos7 ~]# tcpdump -vv -i ens33       #查看所有经过网卡ens33的数据
  [root@centos7 ~]# tcpdump -i ens33 -w /tmp/33.cap   #抓取数据写入文件
  [root@centos7 ~]# tcpdump -r /tmp/33.cap        #读取抓包文件数据
  [root@centos7 ~]# tcpdump -i ens33 dst host www.baidu.com   #抓取本地访问百度的数据
  [root@centos7 ~]# tcpdump -i ens33 host 192.168.142.129 and port 80   #抓取指定主机和端口的数据包

3.3.5 故障排查思路

  当遇到有人反馈生产环境某一网址无法访问时,不要慌,跟着清晰的思路开始排查:1)首先要清楚服务的网络架构,根据架构由上到下、由表及里,逐层深入排查;2)检测网址访问的错误反馈,不同的网络环境和设备访问,尽可能多的从反馈中提取错误相关信息;3)使用ping和telnet检测网站地址或端口的通畅性,使用curl检测链接的错误反馈;4)检查代理机器服务是否正常;5)到应用服务器上使用df、free、top、iftop等命令排查磁盘、内存、cpu、网络流量的资源的消耗情况;6)使用ps、netstat查看应用进程状态是否正常;7)查看应用配置和服务日志系统日志;8)检查数据库服务是否正常;9)检查端口、防火墙的控制状态;10)使用netstat/iotop/iftop检查是否具有被攻-击特征;11)跟踪抓包分析机器上的网络数据;12)请求百度、谷歌、技术大佬协助。大致思路流程就是这样了,技术不是一层不变的,具体实践操作需要活学活用,请记住,运维的世界本没有大佬,问题解决的多了,也就成了大佬。


内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: