解决问题: 性能优化,首先分析是由于哪些瓶颈造成的性能低下, 如 cpu 瓶颈,内存瓶颈,io瓶颈, 或者程序本身调用有问题

常用工具:

cpu瓶颈

# top 命令

top - 09:14:56 up 264 days, 20:56, 1 user, load average: 0.02, 0.04, 0.00

Tasks: 87 total, 1 running, 86 sleeping, 0 stopped, 0 zombie

Cpu(s): 0.0%us, 0.2%sy, 0.0%ni, 99.7%id, 0.0%wa, 0.0%hi, 0.0%si, 0.2%st

Mem: 377672k total, 322332k used, 55340k free, 32592k buffers

Swap: 397308k total, 67192k used, 330116k free, 71900k cached

PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND

1 root 20 0 2856 656 388 S 0.0 0.2 0:49.40 init

2 root 20 0 0 0 0 S 0.0 0.0 0:00.00 kthreadd

3 root 20 0 0 0 0 S 0.0 0.0 7:15.20 ksoftirqd/0

4 root RT 0 0 0 0 S 0.0 0.0 0:00.00 migration/

进入交互模式后:

输入M,进程列表按内存使用大小降序排序,便于我们观察最大内存使用者使用有问题(检测内存泄漏问题);

输入P,进程列表按CPU使用大小降序排序,便于我们观察最耗CPU资源的使用者是否有问题;

top第三行显示当前系统的,其中有两个值很关键:

%id:空闲CPU时间百分比,如果这个值过低,表明系统CPU存在瓶颈;

%wa:等待I/O的CPU时间百分比,如果这个值过高,表明IO存在瓶颈;

内存瓶颈

# free 命令

[/home/weber#]free

total used free shared buffers cached

Mem: 501820 452028 49792 37064 5056 136732

-/+ buffers/cache: 310240 191580

Swap: 0 0 0

# 第二行是从操作系统的角度去计算的

# 第三行是从应用程序的角度去计算的

# 第三行:

已使用的(used) 310240 = 第二行 used - buffers - cached

空闲的(free):第二行 free + buffers + cached

# 真正可使用的是第三行 free 的值

io 瓶颈

# iostat

安装:yum -y install sysstat

命令格式: iostat 选项 时间 次数

选项:

-C 显示CPU使用情况

-d 显示磁盘使用情况

-k 以 KB 为单位显示

-m 以 M 为单位显示

-N 显示磁盘阵列(LVM) 信息

-n 显示NFS 使用情况

-p[磁盘] 显示磁盘和分区的情况

-t 显示终端和CPU的信息

-x 显示详细信息

-V 显示版本信息

/root$iostat

Linux 2.6.32-279.el6.x86_64 (colin) 07/16/2014 _x86_64_ (4 CPU)

avg-cpu: %user %nice %system %iowait %steal %idle

10.81 0.00 14.11 0.18 0.00 74.90

Device: tps Blk_read/s Blk_wrtn/s Blk_read Blk_wrtn

sda 1.95 1.48 70.88 9145160 437100644

dm-0 3.08 0.55 24.34 3392770 150087080

dm-1 5.83 0.93 46.49 5714522 286724168

dm-2 0.01 0.00 0.05 23930 289288

# cpu属性值说明:

%user:CPU处在用户模式下的时间百分比。

%nice:CPU处在带NICE值的用户模式下的时间百分比。

%system:CPU处在系统模式下的时间百分比。

%iowait:CPU等待输入输出完成时间的百分比。

%steal:管理程序维护另一个虚拟处理器时,虚拟CPU的无意识等待时间百分比。

%idle:CPU空闲时间百分比。

注:如果%iowait的值过高,表示硬盘存在I/O瓶颈,%idle值高,表示CPU较空闲,如果%idle值高但系统响应慢时,有可能是CPU等待分配内存,此时应加大内存容量。%idle值如果持续低于10,那么系统的CPU处理能力相对较低,表明系统中最需要解决的资源是CPU。

# disk属性值说明:

rrqm/s: 每秒进行 merge 的读操作数目。即 rmerge/s

wrqm/s: 每秒进行 merge 的写操作数目。即 wmerge/s

r/s: 每秒完成的读 I/O 设备次数。即 rio/s

w/s: 每秒完成的写 I/O 设备次数。即 wio/s

rsec/s: 每秒读扇区数。即 rsect/s

wsec/s: 每秒写扇区数。即 wsect/s

rkB/s: 每秒读K字节数。是 rsect/s 的一半,因为每扇区大小为512字节。

wkB/s: 每秒写K字节数。是 wsect/s 的一半。

avgrq-sz: 平均每次设备I/O操作的数据大小 (扇区)。

avgqu-sz: 平均I/O队列长度。

await: 平均每次设备I/O操作的等待时间 (毫秒)。

svctm: 平均每次设备I/O操作的服务时间 (毫秒)。

%util: 一秒中有百分之多少的时间用于 I/O 操作,即被io消耗的cpu百分比

备注:如果 %util 接近 100%,说明产生的I/O请求太多,I/O系统已经满负荷,该磁盘可能存在瓶颈。如果 svctm 比较接近 await,说明 I/O 几乎没有等待时间;如果 await 远大于 svctm,说明I/O 队列太长,io响应太慢,则需要进行必要优化。如果avgqu-sz比较大,也表示有当量io在等待。

实例:

/root$iostat -d -x -k 1 1

Linux 2.6.32-279.el6.x86_64 (colin) 07/16/2014 _x86_64_ (4 CPU)

Device: rrqm/s wrqm/s r/s w/s rkB/s wkB/s avgrq-sz avgqu-sz await svctm %util

sda 0.02 7.25 0.04 1.90 0.74 35.47 37.15 0.04 19.13 5.58 1.09

dm-0 0.00 0.00 0.04 3.05 0.28 12.18 8.07 0.65 209.01 1.11 0.34

dm-1 0.00 0.00 0.02 5.82 0.46 23.26 8.13 0.43 74.33 1.30 0.76

dm-2 0.00 0.00 0.00 0.01 0.00 0.02 8.00 0.00 5.41 3.28 0.00

rrqm/s: 每秒进行 merge 的读操作数目.即 delta(rmerge)/s

wrqm/s: 每秒进行 merge 的写操作数目.即 delta(wmerge)/s

r/s: 每秒完成的读 I/O 设备次数.即 delta(rio)/s

w/s: 每秒完成的写 I/O 设备次数.即 delta(wio)/s

rsec/s: 每秒读扇区数.即 delta(rsect)/s

wsec/s: 每秒写扇区数.即 delta(wsect)/s

rkB/s: 每秒读K字节数.是 rsect/s 的一半,因为每扇区大小为512字节.(需要计算)

wkB/s: 每秒写K字节数.是 wsect/s 的一半.(需要计算)

avgrq-sz:平均每次设备I/O操作的数据大小 (扇区).delta(rsect+wsect)/delta(rio+wio)

avgqu-sz:平均I/O队列长度.即 delta(aveq)/s/1000 (因为aveq的单位为毫秒).

await: 平均每次设备I/O操作的等待时间 (毫秒).即 delta(ruse+wuse)/delta(rio+wio)

svctm: 平均每次设备I/O操作的服务时间 (毫秒).即 delta(use)/delta(rio+wio)

%util: 一秒中有百分之多少的时间用于 I/O 操作,或者说一秒中有多少时间 I/O 队列是非空的,即 delta(use)/s/1000 (因为use的单位为毫秒)

如果 %util 接近 100%,说明产生的I/O请求太多,I/O系统已经满负荷,该磁盘可能存在瓶颈。 idle小于70% IO压力就较大了,一般读取速度有较多的wait。

如果 svctm 比较接近 await,说明 I/O 几乎没有等待时间;如果 await 远大于 svctm,说明 I/O 队列太长,应用得到的响应时间变慢,如果响应时间超过了用户可以容许的范围,这时可以考虑更换更快的磁盘,调整内核 elevator 算法,优化应用,或者升级 CPU。

形象比喻:

r/s+w/s 类似于交款人的总数

平均队列长度(avgqu-sz)类似于单位时间里平均排队人的个数

平均服务时间(svctm)类似于收银员的收款速度

平均等待时间(await)类似于平均每人的等待时间

平均I/O数据(avgrq-sz)类似于平均每人所买的东西多少

I/O 操作率 (%util)类似于收款台前有人排队的时间比例

拓展命令

# lsof

lsof(list open files)是一个查看当前系统文件的工具。在linux环境下,任何事物都以文件的形式存在,通过文件不仅仅可以访问常规数据,还可以访问网络连接和硬件。如传输控制协议 (TCP) 和用户数据报协议 (UDP) 套接字等,系统在后台都为该应用程序分配了一个文件描述符,该文件描述符提供了大量关于这个应用程序本身的信息。

lsof打开的文件可以是:

普通文件

目录

网络文件系统的文件

字符或设备文件

(函数)共享库

管道,命名管道

符号链接

网络文件(例如:NFS file、网络socket,unix域名socket)

还有其它类型的文件,等等

命令参数

-a 列出打开文件存在的进程

-c 列出指定进程所打开的文件

-g 列出GID号进程详情

-d 列出占用该文件号的进程

+d 列出目录下被打开的文件

+D 递归列出目录下被打开的文件

-n 列出使用NFS的文件

-i 列出符合条件的进程。(4、6、协议、:端口、 @ip )

-p 列出指定进程号所打开的文件

-u 列出UID号进程详情

-h 显示帮助信息

-v 显示版本信息

实例

$lsof| more

COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME

init 1 root cwd DIR 253,0 4096 2 /

init 1 root rtd DIR 253,0 4096 2 /

init 1 root txt REG 253,0 150352 1310795 /sbin/init

init 1 root mem REG 253,0 65928 5505054 /lib64/libnss_files-2.12.so

init 1 root mem REG 253,0 1918016 5521405 /lib64/libc-2.12.so

init 1 root mem REG 253,0 93224 5521440 /lib64/libgcc_s-4.4.6-20120305.so.1

init 1 root mem REG 253,0 47064 5521407 /lib64/librt-2.12.so

init 1 root mem REG 253,0 145720 5521406 /lib64/libpthread-2.12.so

COMMAND:进程的名称

PID:进程标识符

PPID:父进程标识符(需要指定-R参数)

USER:进程所有者

PGID:进程所属组

FD:文件描述符,应用程序通过文件描述符识别该文件。如cwd、txt等:

(1)cwd:表示current work dirctory,即:应用程序的当前工作目录,这是该应用程序启动的目录,除非它本身对这个目录进行更改

(2)txt :该类型的文件是程序代码,如应用程序二进制文件本身或共享库,如上列表中显示的 /sbin/init 程序

(3)lnn:library references (AIX);

(4)er:FD information error (see NAME column);

(5)jld:jail directory (FreeBSD);

(6)ltx:shared library text (code and data);

(7)mxx :hex memory-mapped type number xx.

(8)m86:DOS Merge mapped file;

(9)mem:memory-mapped file;

(10)mmap:memory-mapped device;

(11)pd:parent directory;

(12)rtd:root directory;

(13)tr:kernel trace file (OpenBSD);

(14)v86 VP/ix mapped file;

(15)0:表示标准输入

(16)1:表示标准输出

(17)2:表示标准错误

一般在标准输出、标准错误、标准输入后还跟着文件状态模式:r、w、u等

(1)u:表示该文件被打开并处于读取/写入模式

(2)r:表示该文件被打开并处于只读模式

(3)w:表示该文件被打开并处于

(4)空格:表示该文件的状态模式为unknow,且没有锁定

(5)-:表示该文件的状态模式为unknow,且被锁定

同时在文件状态模式后面,还跟着相关的锁

(1)N:for a Solaris NFS lock of unknown type;

(2)r:for read lock on part of the file;

(3)R:for a read lock on the entire file;

(4)w:for a write lock on part of the file;(文件的部分写锁)

(5)W:for a write lock on the entire file;(整个文件的写锁)

(6)u:for a read and write lock of any length;

(7)U:for a lock of unknown type;

(8)x:for an SCO OpenServer Xenix lock on part of the file;

(9)X:for an SCO OpenServer Xenix lock on the entire file;

(10)space:if there is no lock.

TYPE:文件类型,如DIR、REG等,常见的文件类型:

(1)DIR:表示目录

(2)CHR:表示字符类型

(3)BLK:块设备类型

(4)UNIX: UNIX 域套接字

(5)FIFO:先进先出 (FIFO) 队列

(6)IPv4:网际协议 (IP) 套接字

DEVICE:指定磁盘的名称

SIZE:文件的大小

NODE:索引节点(文件在磁盘上的标识)

NAME:打开文件的确切名称

实例2: lsof -c mysql # 查看某个进程对应的文件

实例3: lsof -a /bin/bash # 查看某个文件对应的进程

实例4: lsof -i :80 # 找出哪些文件在使用80端口

实例5: lsof -i # 查看所有网络连接

实例6: lsof -i tcp # 查看所有 tcp 连接

linux sw状态,linux 下查看性能状态命令相关推荐

  1. firewalls 查看防火墙状态_windows下查看防火墙状态命令netsh firewall ,开启防火墙与关闭防火墙...

    开启防火墙: netsh firewall set opmode mode=enable 关闭防火墙: netsh firewall set opmode mode=disable 详细命令:nets ...

  2. Linux下 启动SELinux命令,Linux下查看SELinux状态和关闭SELinux的方法命令是什么

    Linux继承了Unix以网络为核心的设计思想,是一个性能稳定的多用户网络操作系统.对于SELinux状态可能很多用户不知道怎么设置,这篇文章主要介绍了Linux下查看SELinux状态和关闭SELi ...

  3. linux下查看防火墙状态、关闭防火墙、开放关闭端口等

    linux下查看防火墙状态.关闭防火墙.开放关闭端口等 1. 查看防火墙状态 2. 关闭防火墙 3. 开启防火墙 4. 关闭.开启防火墙示例看图 5. 查看防火墙开放的端口.设置开放端口 5.1 查看 ...

  4. Linux确认服务所在磁盘io性能状态

    Linux确认服务所在磁盘io性能状态 1.背景 监控服务应用influxdb在上线前需要检查磁盘io性能,防止磁盘io性能太低影响监控数据量写入延迟. 下面以influxdb服务为例,且数据落盘在/ ...

  5. linux查看显示器名称命令,linux 查看显示器信息Linux下查看硬件信息命令大全

    /proc 虚拟的目录,是系统内存的映射.可直接访问这个目录来获取系统信息.其中也包含下面的信息: 主机CPU信息:cpuinfo 主机DMA通道信息:dma 文件系统信息:filesystems 主 ...

  6. linux查看文件版本,Linux下查看版本号的命令

    Linux下查看版本号的命令 1,查看内核版本命令: cat   /proc/version uname   -a uname   -rcat   /etc/issue man   uname 2,查 ...

  7. Windows 环境下查看 Redis 版本号命令

    Windows 环境下查看 Redis 版本号命令: // Redis 客户端输入info server// 结果 # Server redis_version:3.2.100 redis_git_s ...

  8. linux 查看san链路状态,Linux下查看网络状态的方法

    当我的设备在机房,懒得去查看网线连接情况:或者设备在远端,没有条件让眼睛亲临现场,我需要在终端查看设备网络接口的物理连接状态.基于此种场景,我就了解了几种关于命令查看网络状态的方法. 1. ifcon ...

  9. linux 下查看线程状态

    前言 在调试程序时需要查看各个线程的状态,方便定位问题. 解决 方法1.pstree pstree PID 方法2.top top 然后按H,会显示线程 -p 可以指定PID,但是在嵌入式平台很可能被 ...

最新文章

  1. printf 格式输出代码大全
  2. ios原子操作和各种锁
  3. 机器人局部避障的动态窗口法(dynamic window approach) (转)
  4. 动画专业艺术里最懂计算机的,美国数字媒体艺术专业了解一下!
  5. 1-4-14:计算邮资
  6. 你的烂代码终于有了解决方案
  7. 极路由3C【C103B】刷breed再刷老毛子教程
  8. sql注入检测工具 mysql_SQL注入测试
  9. 聚合支付系统搭建如何对接
  10. 体验数学之美——泛函
  11. SM2/RSA证书工具--简单CA实现
  12. X站全称是什么_考不上高中上什么专业
  13. 利用CK11N改标准价格需要注意的地方
  14. Arduino (一)——面包板与固定导线长度
  15. mysql using where_mysql 优化问题 Using where; Using filesort
  16. Android手机界面绘制类似wifi信号图标
  17. chromedriver与chrome各版本对应及下载地址
  18. 自媒体运营的八条建议
  19. python语句list range 13执行结果为_python练习题-答案
  20. picasso介绍及使用

热门文章

  1. SMAT,PacBio
  2. 乾坤符和鸿蒙符,少年三国志四种暗金兵符技能怎么样 四种暗金兵符技能分析...
  3. java swing 外观框架_【GUI】一、Swing外观框架BeautyEye使用
  4. 基于matlab的对流层散射信道特性仿真,对流层散射信道建模和FPGA实现
  5. java exchange发邮件_java发送exchange邮件问题
  6. tf.data.Dataset.from_tensor_slices 的用法
  7. nginx 常用命令 和 配置
  8. 报错解决: error: ‘writev’ was not declared in this scope
  9. 小蛮机器人如何联网_国际相对论第三期——机器人与物联网的碰撞
  10. shell脚本的基础知识