linux 系统性能分析
CPU篇
top
- 1时,看各个cpu是否均衡;看每个cpu的使用率分布是否合理
- 看load average的负载( 1分钟、5分钟、15分钟前到现在的平均值)
- 看内存的使用
- 看进程数运行、休眠数
- M看各个进程内存的占用
只看某些进程的负载 top -p pid1,pid2
确认cpu的进程分布 ps -Ef
还有一个基于top的方法是:在top界面中,按下f.进入top Current Fields设置页面:
选中:j: P = Last used cpu (SMP)
则多了一项:P 显示此进程使用哪个CPU
另外,mpstat -P ALL 1 可以看到各个核心的统计情况
可以参考下面的vmstat
IO篇
iostat -x 1

看cpu的iowait和idle。
关键是r/s,w/s每秒的读写次数和量
平均的数据大小和io队列长度(仅参考)
结合await_time,来看svctm每次io操作的服务时间,前者远大于后者有问题。
vmstat 2

procs 中 r的数目大于cpu数,注意了!
b 表示阻塞的进程数目,即正在等待资源的进程数目,比如正在等待I/O,或内存交换等
如果swpd的值不为0,或者比较大,比如超过了100m,只要si、so的值长期为0,系统性能还是正常
如果cache较大,说明用到cache的文件较多,如果此时IO中bi比较小,说明文件系统效率比较好
si 每秒从磁盘读入虚拟内存的大小,如果这个值大于0,表示物理内存不够用或者内存泄露了,要查找耗内存进程解决
bi 从块设备读入数据的总量(读磁盘)(每秒kb)。
bo 块设备写入数据的总量(写磁盘)(每秒kb)
这里我们设置的bi+bo参考值为1000,如果超过1000,而且wa值较大应该考虑均衡磁盘负载,可以结合iostat输出来分析。
System
in 每秒的中断数,包括时钟中断。
cs 每秒的环境(上下文)切换次数。
上面2个值越大,会看到由内核消耗的CPU时间会越大
Cpu
us列显示了用户进程消耗的CPU 时间百分比。us的值比较高时,说明用户进程消耗的cpu时间多,但是如果长期大于50%,就需要考虑优化程序或算法。
sy列显示了内核进程消耗的CPU时间百分比。Sy的值较高时,说明内核消耗的CPU资源很多。
根据经验,us+sy的参考值为80%,如果us+sy大于 80%说明可能存在CPU资源不足。
wa IO等待消耗的CPU时间百分比。wa的值高时,说明IO等待比较严重,这可能由于磁盘大量作随机访问造成,也有可能磁盘出现瓶颈(块操作)。
网络篇
TCP
cat /proc/net/snmp | grep Tcp:
Tcp: RtoAlgorithm RtoMin RtoMax MaxConn ActiveOpens PassiveOpens AttemptFails EstabResets CurrEstab InSegs OutSegs RetransSegs InErrs OutRsts
Tcp: 1 200 120000 -1 78447 413 50234 221 3 5984652 5653408 156800 0 849
重传率 = RetransSegs / OutSegs
统计某端口:
ss -o state established '( sport = :23000 )' | wc -l
netstat -tan | awk '{printf("%s:%s\n",$4, $5)}' | awk -F":" '{if ($2==36000 && $4>0) {printf("%s\n",$3)}}'
统计所有的端口:
netstat -nt | awk '/^tcp/ {++state[$NF]} END {for(key in state) print key,"\t",state[key]}'
统计连接最多的服务器:
netstat -tan | awk '{print $5}' | awk -F":" '{print $1}' | sort | uniq -c | sort -nr
统计某端口连接过来最多的服务器
netstat -tan | awk '{printf("%s:%s\n",$4, $5)}' | awk -F":" '{if ($2==36000 && $4>0) {printf("%s\n",$3)}}' | sort | uniq -c | sort -nr
快速查看总体的连接状态数:
ss -s
如何查看连接的时间:
查看这个进程打开的这个连接的文件名,lsof -p pid | grep port,可以得到这个进程在这个端口上的连接的文件编号:
java 32439 root 118u IPv6 165707367 0t0 TCP SC-HOST-43:51518->192.168.110.231:8998 (ESTABLISHED)
java 32439 root 126u IPv6 165707404 0t0 TCP SC-HOST-43:51520->192.168.110.231:8998 (ESTABLISHED)
大家注意到118u和126u是这两个连接的文件名,然后去ll /proc/pid/fd/118,就可以看到这个连接的建立时间了。
快速确认是不是长连接:看下面的状态是不是ESTABLISH(没有TIME_WAIT),且端口不发生变化
netstat -tanp |awk '{print $4,$5,$6}' | grep 21000
统计某些进程的连接数是否均衡
netstat -tanp | grep ':9982 ' | awk '{print $7}' | awk -F"/" '{print $1}' | sort | uniq -c |sort
内存篇
查看共享内存(有时我们需要知道程序设定的那个id),这样的输出才赏心悦目:
ipcs -m | grep 0x | awk '{printf("%s\t%d\t%s\t%s\t%1.2fMB\n",$1,$6,strtonum($1),$3,$5/1000000)}'
ipcs -s | grep 0x | awk '{printf("%s\t%d\t%s\t%s\t%d\n",$1,$2,strtonum($1),$3,$5)}'
优化方法
- echo -e 'net.ipv4.tcp_tw_reuse = 1\nnet.ipv4.tcp_tw_recycle = 1' >> /etc/sysctl.conf && /sbin/sysctl -p
echo '1024 61000' > /proc/sys/net/ipv4/ip_local_port_range
echo -e '* hard nofile 102400\n* soft nofile 102400' >> /etc/security/limits.conf
分析整个系统
结合理论分析进行压测,
- 不要急于出数据,正确是第一要务
- 最好是把部署图完整清晰的画出来,多查看日志
- 压测要有成功率和时延的统计
- 提前想好要压测的数据结构并制表(在excel中),后续压测逐项填写数据
- 对系统的每一个模块都要查看其负载,尽可能的消除瓶颈
设计系统时,应该现将单机跑满,然后再整体
linux 系统性能分析的更多相关文章
- (转)Linux 系统性能分析工具图解读(一、二)
Linux 系统性能分析工具图解读(一.二) 原文:http://oilbeater.com/linux/2014/09/08/linux-performance-tools.html 最近看了 Br ...
- Linux系统性能分析
http://c.biancheng.net/cpp/html/2782.htmlLinux系统性能分析 这篇教程的目的是向大家介绍一些免费的系统性能分析工具(命令),使用这些工具可以监控系统资源使用 ...
- Linux 系统性能分析工具 sar
sar(System Activity Reporter系统活动情况报告)是目前 Linux 上最为全面的系统性能分析工具之一,可以 从多方面对系统的活动进行报告,包括:文件的读写情况.系统调用的使用 ...
- 【转】Linux系统性能分析命令
作为一名linux系统管理员,最主要的工作是优化系统配置,使应用在系统上以最优的状态运行,但是由于硬件问题.软件问题.网络环境等的复杂性和多变性,导致对系统的优化变得异常复杂,如何定位性能问题出在哪个 ...
- Linux系统性能分析工具 sar--系统活动情况报告
1.结论: sar 命令是linux系统上,分析系统性能的常用工具,可以查看cpu.内存.磁盘IO.文件读写.系统调用, 2.sar会有一个定时任务,定期记录当前系统信息到 /var/log/sa/ ...
- Linux系统性能分析工具
1. uptime 2. htop 3. mpstat 4 . iostat 5. dstat 6. netstat 7. tcpdump 8. sar
- sar 找出系统瓶颈的利器 目前Linux上最为全面的系统性能分析工具之一 直接 sar -dur 1 30 即可看内存 CPU和IO占用
12. sar 找出系统瓶颈的利器 sar是System Activity Reporter(系统活动情况报告)的缩写.sar工具将对系统当前的状态进行取样,然后通过计算数据和比例来表达系统的当前运行 ...
- JMeter—系统性能分析思路(十三)
参考<全栈性能测试修炼宝典JMeter实战>第九章 性能监控诊断 第二节 系统性能分析思路和第三节 定位分析 系统在工作负载中的性能受到许多因素影响,处理器速度.内存容量.网络或磁盘I/O ...
- 通信原理实践(四)——模拟通信系统性能分析
一.模拟通信系统性能分析 1.系统框图 2.信噪比定义 (1)输入信噪比: (2)输出信噪比: (3)调制制度增益: 3.模拟通信系统分析等价模型 即自己产生一个高斯白噪声,加入到调制信号,然后在送入 ...
随机推荐
- [转]as3 算法实例【输出1 到最大的N 位数 题目:输入数字n,按顺序输出从1 最大的n 位10 进制数。比如输入3,则输出1、2、3 一直到最大的3 位数即999。】
思路:如果我们在数字前面补0的话,就会发现n位所有10进制数其实就是n个从0到9的全排列.也就是说,我们把数字的每一位都从0到9排列一遍,就得到了所有的10进制数. /** *ch 存放数字 *n n ...
- python模块httplib的使用
GET: #lianxi-httplib.HTTPConnection.request-get.py import httplib class HttpRequestGETTest(object): ...
- shared_ptr:资源管理利器
如果你还在使用传统的C++,那么可以肯定堆内存的管理让你头痛过!在传统的C++领域,堆内存管理上我们能借用的现成工具就只有auto_ptr.但是很不幸用auto_ptr管理堆内存简直就是个错误.aut ...
- iOS 修改backBarButtonItem 中的titile 字段
需求如下:A 页面 push 到 B 页面. B 页面中有个返回按钮 不显示A 中的title,而显示 "<返回" ,当然系统的样式还是默认的系统样式.(考虑都是nav ...
- Qt中sizeof
class a{ int d; // virtual void ssss(); }; qDebug() <<sizeof(a) << sizeof(int) << ...
- 互联网实习笔记之shell笔记
linux下面一切都是可以配置的 #vim可以有 .vimrc文件 #------.vimrc开始---- set vb t_vb= set number syntax on set hlsearch ...
- UART接口基本知识
Universal asynchronous transciever即同一异步收发器,也就是我们平时所说的串口,是一种最简单,最基本的通信接口. 通信接口按照不同的标准有不同的分类,常见的有同步或异步 ...
- 每日总结 -----把人家代码干掉了 我恨git
今天搞了下午git,写完代码commit之后,pull完发现没法push,说是和origin有分支,然后自己查资料又是reset又是rebase的,commit之后发现自己改动的代码几乎没有被提交上去 ...
- 用ul 来制作导航栏的几个要点
1 ul 1)list-style:none; 3)设置宽度 2)清除浮动的影响,使高度自适应 2 li 1)向左浮动 2)设置margin和padding都为0 3 a 1) dsiplay :bl ...
- Java并发编程学习笔记(二)——对象的共享
主要概念:可见性.重排序.失效数据.最低安全性.发布.逸出.线程封闭(Ad-hoc.栈封闭.ThreadLocal类).不变性.Final域.事实不可变对象. 1.在没有同步的情况下,编译器.处理器以 ...