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.模拟通信系统分析等价模型 即自己产生一个高斯白噪声,加入到调制信号,然后在送入 ...
随机推荐
- Oracle存储过程中异常Exception的捕捉和处理
Oracle存储过程中异常的捕捉和处理 CREATE OR REPLACE Procedure Proc_error_process ( v_IN in Varchar2, v_OUT Out Var ...
- centos 7 下安装numpy、scipy等python包
本文适用于刚入门的小白,欢迎大牛们批评指正. 因为要开始数据分析,而python又不像R和matlab那么简洁.需要安装的包很多~ 网上找了好多牛人博客,想在centos7下安装numpy,scipy ...
- 超简单的js数字验证
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.or ...
- GoLang 通过http Post获取数据
func GetPostResponse(url, bodyType string, body *[]byte) (rdata []byte, err error) { b := bytes.NewB ...
- javaScript学习(入门)
不落俗套的来讲讲javascript的特点: 1.所有主流浏览器都是支持javascript的. 2.绝大部分网页都使用javascript. 3.javascript可以实现网页呈现各种动态效果. ...
- jquery打印特定div
实现javascript打印功能,打印整个页面就很简单,但如果指定打印某一个区域就有点难点,这里有一个jQuery插件PrintArea可实现打印页面某区域功能. 使用说明需要使用jQuery库文件和 ...
- 细说JAVA反射
Reflection 是 Java 程序开发语言的特征之一,它允许运行中的 Java 程序对自身进行检查,或者说“自审”,并能直接操作程序的内部属性.例如,使用它能获得 Java 类中各成员的名称并显 ...
- 曲线参数化的Javascript实现(理论篇)
在关键帧动画的制作过程中,动画师在k物体运动的过程中,一般要确定2个参数: 1)运动轨迹(表示物体运动的路径): 2)速度曲线(表示物体随时间的速度变化). 对于运动轨迹通常选用一定的样条曲线,通过动 ...
- C语言实现栈
#include <stdio.h> #include <stdlib.h> #include <stdbool.h> typedef struct stack_t ...
- 使用Java代码实现对宽带的连接
对于多个类似的用户名相同的密码,运行java代码实现对宽带的自动连接 这是源代码: import java.io.BufferedReader; import java.io.IOException; ...