linux sw状态,linux 下查看性能状态命令

解决问题: 性能优化,首先分析是由于哪些瓶颈造成的性能低下, 如 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 连接

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值