生产环境实践(二):Linux常用运维工具

系列文章——

     生产环境实践(一):保存运行时信息(堆栈、CPU、内存、IO等)

     生产环境实践(二):Linux常用运维工具

     生产环境实践(三):堆栈日志分析


《生产环境实践(一):保存JVM运行时信息(堆栈、CPU、GC等)》中提到了如何保持生产环境信息。

本章让我们看看生产环境需要关注那些指标以及一些运维工具的介绍。

考虑到大部分情况下生产使用的是Linux系统,本篇内容将采用Linux系统来讲述这些工具的使用说明。


毕竟——

工欲善其事必先利其器


CUP

TOP用于实时显示CPU各种指标的使用情况。等同于windows的任务管理器。

top
  • 第一行(系统综合信息)

    信息说明
    12:24:18系统时间
    up 66 days, 14:55运行时间
    3 users当前登录用户
    0.00, 0.00, 0.00负载均衡(1min/5min/15min)
  • 第二行(任务信息)

    信息说明
    210 total进程总数
    1 running正在运行的进程数
    195 sleeping休眠的进程数
    14 stopped停止的进程数
    0 zombie僵尸进程数
  • 第三行(CPU使用情况)

    信息说明
    0.1 us用户空间占用CPU百分比
    0.0 sy内核空间占用CPU百分比
    0.0 ni改变过优先级的进程占用CPU百分比
    99.9 id空闲CPU百分比
    0.0 wa等待IO占用CPU百分比
    0.0 hi硬中断占用CPU百分比
    0.0 si软中断占用CPU百分比
    0.0 st虚拟机占用百分比
  • 第四行(内存使用情况)

    信息说明
    16423720物理内存总量(KB)
    618952空闲中的内存总量(KB)
    8128964使用中的内存总量(KB)
    7675804缓存的内存总量(KB)
  • 第五行(Swap分区使用情况)

    信息说明
    8388604交换区总量(KB)
    8271280空闲中的交换区总量(KB)
    117324使用中的交换区总量(KB)
    7742344可用于进程下一次分配的物理内存数量(KB)
  • 列表(进程信息)

    列名说明
    PID进程ID
    USER进程所有者
    PR进程优先级
    VIRT进程使用虚拟内存总量(KB),VIRT=SWAP+RES
    RES进程使用的、未被换出的物理内存大小(KB,RES=CODE+DATA
    SHR共享内存大小(KB)
    S进程状态:D=不可中断的睡眠状态 R=运行 S=睡眠 T=跟踪/停止 Z=僵尸进程
    %CPU上次更新到现在的CPU时间占用百分比
    %MEM进程使用的物理内存百分比
    TIME+进程使用的CPU时间总计(1/100秒)
    COMMAND进程名称

TOP查看某一进程下各线程暂用资源

# -H:显示线程信息,-p:指定pid
top -Hp ${pid}

如上图所示查看JAVA进程的线程使用情况,此时的PID表示线程ID,可以方便观察到占用CPU资源最大的线。结合我们之前所说的jstack名称可以找到具体的线程,方便用于排查问题。

TOP结果存储到文件

# 线程资源占用(考虑CPU切换 保存3次 -n3)
top -Hp $pid -b -n3 >> $file_path/top.log

以上就是针对TOP命令的基本介绍。



内存

内存也是生产环境的重要参考指标,free命令用于查看系统内存的使用情况。

# -m:表示以MB为单位
free -m

Men:表示物理内存 / Swap:交换分区(类似Windows的虚拟内存)

total:内存总量 total ≈ userd + free + buff/cache

used:已经使用的内存总量

free:空闲的内存总量

shared:多个进程共享的内存总量

buff/cache:buff/cache暂用内存总量

available:可以被应用程序使用的内存总量 available ≈ free + buffer/cache



磁盘

  • 磁盘空间

    Linux一切皆文件,磁盘的重要性不言而喻。磁盘空间不足会引发各种程序不可用的问题。

    # -h 以人们较易阅读的GB,MB,KB等格式自行显示
    df -h
    

    Filesystem:文件系统对应的设备文件的路径名

    Size:分区的总大小

    Used:已使用磁盘空间

    Avail:可使用磁盘空间

    Use%:已使用空间占比

    Mounted On:磁盘挂载的目录

  • 磁盘IO

    iostat

    # 如果没有可以安装(iostat属于sysstat软件包)
    yum install sysstat
    
    # -x:显示详细信息
    iostat -x
    

    CPU信息说明:

    %user:CPU处在用户模式下的时间百分比。

    %nice:CPU处在带NICE值的用户模式下的时间百分比。

    %system:CPU处在系统模式下的时间百分比。

    %iowait:CPU等待输入输出完成时间的百分比。

    %steal:管理程序维护另一个虚拟处理器时,虚拟CPU的无意识等待时间百分比。

    %idle:CPU空闲时间百分比。

    DISK属性说明:

    rrqm/s: 每秒进行 merge 的读操作数目。即 rmerge/s

    wrqm/s: 每秒进行 merge 的写操作数目。即 wmerge/s

    r/s: 每秒完成的读 I/O 设备次数。即 rio/s

    w/s: 每秒完成的写 I/O 设备次数。即 wio/s

    rkB/s: 每秒读K字节数。是 rsect/s 的一半,因为每扇区大小为512字节。

    wkB/s: 每秒写K字节数。是 wsect/s 的一半。

    avgrq-sz: 平均每次设备I/O操作的数据大小 (扇区)。

    avgqu-sz: 平均I/O队列长度。

    await: 平均每次设备I/O操作的等待时间 (毫秒)。

    r_wait:每个读操作平均所需要的时间,不仅包括硬盘设备读操作的时间,也包括在内核队列中的时间。

    svctm: 平均每次设备I/O操作的服务时间 (毫秒)。

    w_wait: 每个写操平均所需要的时间,不仅包括硬盘设备写操作的时间,也包括在队列中等待的时间。

    %util: 一秒中有百分之多少的时间用于 I/O 操作,即被io消耗的cpu百分比



网络

网络是需要关注的一个重点,特别是服务涉及高并发、消息发送、批量任务等。

dstat

dstat 命令是一个用来替换vmstat、iostat、netstat、nfsstat和ifstat这些命令的工具,是一个全能系统信息统计工具。

# 如果没有可以先安装此命令
yum install dstat

# pid:进程号
dstat $pid
分组说明
CPU统计CPU使用率:用户占比、系统占比、空闲占比、等待占比、硬中断以及软中断
磁盘统计磁盘读写:读数据总量、写数据总量
网络统计网络设备收发统计:接受数据大小,发送数据大小
分页统计系统分页活动:显示换入(in)和换出(out)
系统统计系统统计:中断(int)和上下文切换(csw)


JDK

JDK也提供了许多好用的工具来帮助我们诊断生产问题。接下来我将介绍几款JDK自带的工具。

  • jps

    # 获取JAVA相关进程
    jps
    
  • jstat

    jstat命令可以查看堆内存各部分的使用量,以及加载类的数量。

    # 类加载统计
    jstat -class ${pid}
    
    # 编译统计
    jstat -compiler ${pid}
    
    # GC统计
    jstat -gc ${pid}
    

    S0C:第一个幸存区的大小

    S1C:第二个幸存区的大小

    S0U:第一个幸存区的使用大小

    S1U:第二个幸存区的使用大小

    EC:伊甸园区的大小

    EU:伊甸园区的使用大小

    OC:老年代大小

    OU:老年代使用大小

    MC:方法区大小

    MU:方法区使用大小

    CCSC:压缩类空间大小

    CCSU:压缩类空间使用大小

    YGC:年轻代垃圾回收次数

    YGCT:年轻代垃圾回收消耗时间

    FGC:老年代垃圾回收次数

    FGCT:老年代垃圾回收消耗时间

    GCT:垃圾回收消耗总时间

    # 保存GC信息信息
    jstat -gc ${pid} >> ${file_path}/gc.log
    
  • jmap

    # 查看堆内存使用情况
    jmap -heap ${pid}  
    
    # 保存堆dump文件(live表示仅存活)到指定的路径
    jmap -dump:live,format=b,file=${file_path}/heap.hprof ${pid}
    

    提示:堆dump文件可以导入MAT工具中方便我们排查线上问题。后续的章节我会陆续推出JAVA堆栈dump的介绍。

  • jstack

    # 查看栈信息
    jstack ${pid}
    

    提示:栈日志非常重要,是用于排查阻塞、死锁等问题的关键信息。后续章节在展开讨论。

    # 保存栈日志
    jstack ${pid} >> ${file_path}/stack.log
    


Docker

容器技术以及成为主流方向。让我们简单看看docker有哪些监控把。

# 容器占用资源情况
docker stats

CONTAINER ID:容器ID

NAME:容器名

CPU%:占用CPU百分比

MEM USAGE / LIMIT:当前使用内存/最大可用内存

MEM%:占用内存百分比

NET I/O:网络IO情况

BLOCK I/O:磁盘IO情况

PIDS:进程ID

# 查看容器日志,container:容器名或者ID
docker logs -f ${container}

# --tail:最近n行信息
docker logs -f --tail ${n} ${container}

本篇主要介绍了生产环境常用的性能监控工具。下一个篇章将带大家看看堆栈dump的解读。敬请期待!


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值