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.模拟通信系统分析等价模型 即自己产生一个高斯白噪声,加入到调制信号,然后在送入 ...
随机推荐
- hibernate的一种报错
Exception in thread "main" java.lang.NoClassDefFoundError: javax/tools/StandardJavaFileMan ...
- java 抓取网页图片
import java.io.File; import java.io.FileOutputStream; import java.io.InputStream; import java.io.Out ...
- Action的搜索顺序(Struts2搜索Action的机制)
当访问如下链接时, http://localhost:8080/struts2Demo/path1/path2/path3/LoginAction.action 第一步:判断当前路径下action是否 ...
- .Net中使用com组件后发生System.ArithmeticException异常的解决办法(Message=算术运算中发生溢出或下溢。)
最近在开发一个.Net程序,其中涉及到对com组件的调用,或者第三方DLL调用, 在调用完以后如果使用一些小的测试程序继续运行,一切正常,但是在使用带有GUI的form程序,或者WPF程序中,继续执行 ...
- 第九章 硬件抽象层:HAL
这一章介绍HAL,全称为Hardware Abstract Layer,即硬件抽象层,它是建立在Linux驱动之上的一套程序库,程序库并不属于Linux内核,而是属于Linux内核层之上的应用层.为A ...
- Ubuntu14.04安装build-essential失败,包依赖问题如何解决?
正在读取软件包列表... 完成 正在分析软件包的依赖关系树 正在读取状态信息... 完成 有一些软件包无法被安装.如果您用的是 unstable 发行版,这也许是 因为系统 ...
- layer弹框
官网http://layer.layui.com/ /!*如果是页面层*/layer.open({ type: 1, content: '传入任意的文本或html' //这里content是一个普通的 ...
- simple_html_dom配合snoopy使用
https://github.com/samacs/simple_html_dom Snoopy的特点是“大”和“全”,一个fetch什么都采到了,可以作为采集的第一步.接下来就需要用simple_h ...
- 使用C#程序处理PowerPoint文件中的字符串
最近, 有同事偶然发现Microsoft Office PowerPoint可以被看作是一个压缩包,然后通过WinRAR解压出来一组XML文件.解压出来的文件包括: 一个索引文件名称为:[Conte ...
- Magento代码之订单创建流程
Magento代码之订单创建流程 直接看代码吧.下面的代码是如何通过程序创建一个完美订单. <?php require_once 'app/Mage. ...