Loading

系统稳定性(一)Linux性能分析

原书《大型分布式网站架构设计与实践》第四章——系统稳定性

本篇中的内容来自4.1 ~ 4.2,主要介绍了Linux下的用来监控系统性能和负载的一些常用命令和手段。

在线日志分析

常用Linux命令

介绍了一些Linux常用命令,其中有不少我之前不知道的。

  1. cat

    cat命令

    cat -n显示行号

  2. 分页显示文件

    一个文件可能过大,cat会一次性将它读出,非常耗费运行中系统的IO性能,所以可以使用moreless命令,交互式读取文件

    more命令允许使用enter换行,space换页,f换屏

    less命令还允许查找,使用/WARN查找有WARN的行

  3. tail显示文件尾

    tail -n10 data/wrapper.log显示文件最后10行

    tail -f可以让程序不退出,持续显示文件新增的行

  4. head显示文件头

  5. sort排序行

    tail -n10 data/activemq.log | sort -k 2 -t ',',先获取日志的尾部10行,再根据每行的,进行分割,通过第二列进行排序

    sort -r反向排序

  6. 字符统计

    wc -l统计行数

    wc -c统计字节数

    wc -L统计最长行字数

    wc -w统计单词数

  7. uniq

    能够识别连续重复出现的多行,可以显示重复次数,只显示重复的行和只显示不重复的行
    uniq -c .zshrc,可以看到有些空行重复出现了2次

    uniq -c -u .zshrc,只展示出现一次的行

    uniq -c -d .zshrc,展示重复出现的行,全是空行

  8. grep字符串查找

    grep <pattern> <file>,查找文件中具有固定模式的行

    grep -c,显示找到的行数

  9. 文件查找

    find

    whereis zkCli.sh

  10. 表达式求值

    expr 35 % 6

  11. cut切分列

    cut -f2 -d ",",按照,将行分成若干列,取第二列

  12. 组合使用

    cat access.log | sort -k 2 -n -r | head -10
    找出响应最慢的前10个页面

日志分析脚本

介绍了sedawk和shell脚本的一些基础,略

集群监控

监控指标

load

系统的load是系统特定时间间隔内运行队列中的平均线程数,即符合下面条件的线程:

  1. 没有处于I/O等待状态
  2. 没有主动进入等待状态,比如等待其他线程
  3. 没有被中止

load越大,CPU越繁忙,当前线程等待CPU分配时间片的等待时间越长。当每个CPU当前活动线程数不大于3,我们认为负载是正常的,如果大于5,表示系统当前负载很高

  1. uptime

    后面三个值代表过去1分钟,5分钟,15分钟内系统的load值

CPU利用率

top用来获取CPU利用率

  1. 用户时间us(User Time):CPU执行用户进程所占用的时间,在生产系统中,我们希望该值越高越好
  2. 系统时间sy(System Time):CPU在内核态花费的时间,太高证明系统某些方面设计的不合理,有频繁的用户内核态转换
  3. Nice时间ni(Nice Time):系统在调整进程优先级上花费的时间
  4. 空闲时间id(Idle Time):系统处于空闲期,等待进程运行,在生产系统中,我们希望该值越低越好
  5. 等待时间wa(Waiting Time):系统在等待IO时花费的时间,不应该太大
  6. 硬件中断处理时间hi(Hardware Irq Time):系统处理硬件中断占用的时间
  7. 软件中断处理时间si(Software Irq Time):系统处理软件中断占用的时间
  8. 丢失时间st(Steal Time)

丢失时间不太懂,先贴张图

按1可以查看每个CPU的利用情况

按Shift+H可以按照线程查看CPU的利用情况,默认是按照进程,下图中的python都是来自我写的一个疯狂开启线程的python程序造成的。

-p选项可以查看指定进程

磁盘剩余空间

-h是格式化输出空间大小

查看具体目录占用的空间,-d是递归深度,-h格式化输出空间大小

网络traffic

可能需要安装一个软件

sudo apt install sysstat
sar -n DEV 1 1

磁盘IO

对于IO密集型应用,比如数据库和分布式文件系统,IO的繁忙程度能反映系统的负载情况

iostat -d -k

-d表示查看磁盘使用情况,-k表示按KB显示,tps表示每秒处理的IO请求数,KB_read/s表示每秒从设备读取的数据量,KB_wrtn/s表示每秒向设备写入的数据量,后面两个是读取和写入的总量

内存使用

  1. total:总大小
  2. used:已使用大小
  3. free:未使用大小
  4. shard:多个进程共享内存空间大小
  5. buffers:缓冲区大小
  6. cached:缓存大小

Linux内核可能会预先将free空间申请为cached以达到内存利用率最大化,对频繁进行文件读写的系统很明显可以看到这个现象。所以free空间小不代表系统没有可用内存,系统可以随时从cache和buffer中回收。

swap内存也应该被关注,它过大代表系统内存可能已经不够了,此时内存中的进程可能会频繁换入换出,swap/IO频繁是非常影响系统性能的。

命令vmstat可以反应swap/IO发生的频率,si表示每秒从磁盘中交换到内存中的数据量,so表示每秒从内存到磁盘交换到数据量。单位是KB。

其他参数

  1. qps:每秒钟查询(请求)数,即系统每秒处理多少次请求
  2. rt:系统响应时间
  3. select/ps:数据库系统的每秒钟select语句数量
  4. update/ps,delete/ps:数据库系统每秒更新和删除数量
  5. GC:Java应用不得不关注的性能参数,如果采用基于分代设计的垃圾回收器,Full GC(对老年代的垃圾收集)是很耗时的,所以要降低Full GC的频率。
posted @ 2022-03-11 14:43  yudoge  阅读(349)  评论(0编辑  收藏  举报