系统稳定性(一)Linux性能分析
原书《大型分布式网站架构设计与实践》第四章——系统稳定性
本篇中的内容来自4.1 ~ 4.2,主要介绍了Linux下的用来监控系统性能和负载的一些常用命令和手段。
在线日志分析#
常用Linux命令#
介绍了一些Linux常用命令,其中有不少我之前不知道的。
-
cat
-
分页显示文件
一个文件可能过大,cat会一次性将它读出,非常耗费运行中系统的IO性能,所以可以使用
more
和less
命令,交互式读取文件 -
tail
显示文件尾tail -n10 data/wrapper.log
显示文件最后10行
tail -f
可以让程序不退出,持续显示文件新增的行 -
head
显示文件头 -
sort
排序行tail -n10 data/activemq.log | sort -k 2 -t ','
,先获取日志的尾部10行,再根据每行的,
进行分割,通过第二列进行排序
sort -r
反向排序 -
字符统计
-
uniq
能够识别连续重复出现的多行,可以显示重复次数,只显示重复的行和只显示不重复的行
uniq -c .zshrc
,可以看到有些空行重复出现了2次
uniq -c -u .zshrc
,只展示出现一次的行 -
grep
字符串查找 -
文件查找
find
-
表达式求值
-
cut
切分列 -
组合使用
cat access.log | sort -k 2 -n -r | head -10
找出响应最慢的前10个页面
日志分析脚本#
介绍了sed
、awk
和shell脚本的一些基础,略
集群监控#
监控指标#
load#
系统的load是系统特定时间间隔内运行队列中的平均线程数,即符合下面条件的线程:
- 没有处于I/O等待状态
- 没有主动进入等待状态,比如等待其他线程
- 没有被中止
load越大,CPU越繁忙,当前线程等待CPU分配时间片的等待时间越长。当每个CPU当前活动线程数不大于3,我们认为负载是正常的,如果大于5,表示系统当前负载很高
CPU利用率#
top用来获取CPU利用率
- 用户时间us(User Time):CPU执行用户进程所占用的时间,在生产系统中,我们希望该值越高越好
- 系统时间sy(System Time):CPU在内核态花费的时间,太高证明系统某些方面设计的不合理,有频繁的用户内核态转换
- Nice时间ni(Nice Time):系统在调整进程优先级上花费的时间
- 空闲时间id(Idle Time):系统处于空闲期,等待进程运行,在生产系统中,我们希望该值越低越好
- 等待时间wa(Waiting Time):系统在等待IO时花费的时间,不应该太大
- 硬件中断处理时间hi(Hardware Irq Time):系统处理硬件中断占用的时间
- 软件中断处理时间si(Software Irq Time):系统处理软件中断占用的时间
- 丢失时间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表示每秒向设备写入的数据量,后面两个是读取和写入的总量
内存使用#
- total:总大小
- used:已使用大小
- free:未使用大小
- shard:多个进程共享内存空间大小
- buffers:缓冲区大小
- cached:缓存大小
Linux内核可能会预先将free空间申请为cached以达到内存利用率最大化,对频繁进行文件读写的系统很明显可以看到这个现象。所以free空间小不代表系统没有可用内存,系统可以随时从cache和buffer中回收。
swap内存也应该被关注,它过大代表系统内存可能已经不够了,此时内存中的进程可能会频繁换入换出,swap/IO频繁是非常影响系统性能的。
命令vmstat
可以反应swap/IO发生的频率,si表示每秒从磁盘中交换到内存中的数据量,so表示每秒从内存到磁盘交换到数据量。单位是KB。
其他参数#
- qps:每秒钟查询(请求)数,即系统每秒处理多少次请求
- rt:系统响应时间
- select/ps:数据库系统的每秒钟
select
语句数量 - update/ps,delete/ps:数据库系统每秒更新和删除数量
- GC:Java应用不得不关注的性能参数,如果采用基于分代设计的垃圾回收器,Full GC(对老年代的垃圾收集)是很耗时的,所以要降低Full GC的频率。
作者:Yudoge
出处:https://www.cnblogs.com/lilpig/p/15993666.html
版权:本作品采用「署名-非商业性使用-相同方式共享 4.0 国际」许可协议进行许可。
欢迎按协议规定转载,方便的话,发个站内信给我嗷~
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 单元测试从入门到精通
· winform 绘制太阳,地球,月球 运作规律
· 上周热点回顾(3.3-3.9)