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 系统性能分析的更多相关文章

  1. (转)Linux 系统性能分析工具图解读(一、二)

    Linux 系统性能分析工具图解读(一.二) 原文:http://oilbeater.com/linux/2014/09/08/linux-performance-tools.html 最近看了 Br ...

  2. Linux系统性能分析

    http://c.biancheng.net/cpp/html/2782.htmlLinux系统性能分析 这篇教程的目的是向大家介绍一些免费的系统性能分析工具(命令),使用这些工具可以监控系统资源使用 ...

  3. Linux 系统性能分析工具 sar

    sar(System Activity Reporter系统活动情况报告)是目前 Linux 上最为全面的系统性能分析工具之一,可以 从多方面对系统的活动进行报告,包括:文件的读写情况.系统调用的使用 ...

  4. 【转】Linux系统性能分析命令

    作为一名linux系统管理员,最主要的工作是优化系统配置,使应用在系统上以最优的状态运行,但是由于硬件问题.软件问题.网络环境等的复杂性和多变性,导致对系统的优化变得异常复杂,如何定位性能问题出在哪个 ...

  5. Linux系统性能分析工具 sar--系统活动情况报告

    1.结论: sar 命令是linux系统上,分析系统性能的常用工具,可以查看cpu.内存.磁盘IO.文件读写.系统调用, 2.sar会有一个定时任务,定期记录当前系统信息到  /var/log/sa/ ...

  6. Linux系统性能分析工具

    1.  uptime 2.  htop 3. mpstat 4 . iostat 5. dstat 6. netstat 7. tcpdump 8. sar

  7. sar 找出系统瓶颈的利器 目前Linux上最为全面的系统性能分析工具之一 直接 sar -dur 1 30 即可看内存 CPU和IO占用

    12. sar 找出系统瓶颈的利器 sar是System Activity Reporter(系统活动情况报告)的缩写.sar工具将对系统当前的状态进行取样,然后通过计算数据和比例来表达系统的当前运行 ...

  8. JMeter—系统性能分析思路(十三)

    参考<全栈性能测试修炼宝典JMeter实战>第九章 性能监控诊断 第二节 系统性能分析思路和第三节 定位分析 系统在工作负载中的性能受到许多因素影响,处理器速度.内存容量.网络或磁盘I/O ...

  9. 通信原理实践(四)——模拟通信系统性能分析

    一.模拟通信系统性能分析 1.系统框图 2.信噪比定义 (1)输入信噪比: (2)输出信噪比: (3)调制制度增益: 3.模拟通信系统分析等价模型 即自己产生一个高斯白噪声,加入到调制信号,然后在送入 ...

随机推荐

  1. liquibase的使用

    前言 liquibase是一个数据库持续集成插件.独立于数据库存在,oracle,mysql,db2,h2,sql server,postgresql都能使用.它使用配置文件来更新数据库结构,并加入版 ...

  2. Total Commander 8.52 Beta 1

    Total Commander 8.52 Beta 1http://www.ghisler.com/852_b1.php 10.08.15 Release Total Commander 8.52 b ...

  3. Spark源码学习1.8——ShuffleBlockManager.scala

    shuffleBlockManager继承于Logging,参数为blockManager和shuffleManager.shuffle文件有三个特性:shuffleId,整个shuffle stag ...

  4. 字节序相关问题简单总结,LSB与MSB

    细细碎碎的知识点还真是不少啊,今天总结下通信中的数据字节序的问题. 先来认识名词: MSB:Most Significant Bit.    “最高有效位” LSB:Least Significant ...

  5. 转载--提高C++性能的编程技术

    读书笔记:提高C++性能的编程技术   第1章 跟踪范例 1.1 关注点 本章引入的实际问题为:定义一个简单的Trace类,将当前函数名输出到日志文件中.Trace对象会带来一定的开销,因此在默认情况 ...

  6. 一、Android屏幕的计量单位

    px  :是屏幕的像素点in   :英寸mm:毫米pt   :磅,1/72英寸dp  :一个基于density的抽象单位,如果一个160dpi的屏幕,1dp=1pxdip :等同于dpsp  :同dp ...

  7. Rails学习笔记一

    安装篇: 下载railsintalls 这里我下载的是rubyinstaller-1.9.3-p448 安装后,安装SQLite3数据库 下载sqlite3.def sqlite3.dll sqlit ...

  8. 深入理解JavaScript系列:为什么03-0.2不等于0.1

    五一宅家看书,所以接着更新一篇文章. 今天讲一下为什么03-0.2不等于0.1这个问题. 有点标题党的味道,在JavaScript中,当你试着对小数进行加减运算时,有时候会发现某个结果并非我们所想的那 ...

  9. HTML教程-各窗口间相互操作(Frame Target)

    由Frames分出来的几个窗口的内容并不是静止不变的,往往一个窗口的内容随着另一个窗口的要求而不断变化,这就提高了Frames的利用价值.为了完成各窗口之间的相互操作,我们必须为每一个窗口起一个名字, ...

  10. 软件测试第二次作业——Fault,Failure,Error辨析与设计测试用例

    Fault 静态错误 ,Failure 外部错误 ,Error 内部错误 问题答案 第一题 1.1 当数组x内的元素≥2时,该循环不会检测到x[0]这个元素. 1.2 test: x=[2, 3, 2 ...