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. Python错误和异常学习

    一:错误解释 1.语法错误:代码不符合解释器或者编译器语法 2.逻辑错误:不完整或者不合法输入或者计算出现问题 代码运行前的语法或者逻辑错误,语法错误在执行前修改,逻辑错误无法修改 二:异常 执行过程 ...

  2. 使用NSJSONSerialization将数组或字典转为字符串

    IOS中将数组或字典转为字符串可以用NSJSONSerialization,代码如下: NSData* data = [NSJSONSerialization dataWithJSONObject:a ...

  3. 麦咖啡阻挡正常打开Excel文件

    双击打开Excel文件,提示如下图: Excel文件被麦咖啡做阻挡,无法正常打开 处理方案: 过一会儿还是出现此问题,干脆就把缓冲区保护给禁用掉

  4. Ionic 2 rc 添加第三方的插件(plugin) 以Echarts为例

    Ionic2 在升级RC版之后做了很多改变,本文就使用Echarts 图表插件为例.记录一下如何引用第三方插件备忘. 一.再集成终端中使用NPM安装Echarts npm install echart ...

  5. Java 自定义注解

    在spring的应用中,经常使用注解进行开发,这样有利于加快开发的速度. 介绍一下自定义注解: 首先,自定义注解要新建一个@interface,这个是一个注解的接口,在此接口上有这样几个注解: @Do ...

  6. oracle全文索引

    1.检查数据库是否具有全文检索功能(这是针对已经建成使用的数据库) 查看用户中是否存在ctxsys用户,查询角色里是否存在ctxapp角色.以上两个中的1个不满足(不存在),则说明没有装过全文检索功能 ...

  7. Android实战技巧:ViewStub的应用

    在开发应用程序的时候,经常会遇到这样的情况,会在运行时动态根据条件来决定显示哪个View或某个布局.那么最通常的想法就是把可能用到的View都写在上面,先把它们的可见性都设为View.GONE,然后在 ...

  8. Java数组和C++异同

    一.定义和初始化 1.Jave定义和初始化: Java:两种方式 Type[]  A; Type A[]; 定义时不能指定数组的长度 静态初始化:   A = new Type[][Ele1,Ele2 ...

  9. JQuery的一些简单操作01

    一.JQuery的隐藏和显示效果 1.hide/show/toggle hide隐藏效果,hide(1000)括号里面跟毫秒,show显示效果同样后面括号可以有数值,toggle开关按钮,交替作用隐藏 ...

  10. 当想mysql某插入有某字段设置了unique且和之前相同时,会报错,并停止运行