linux和性能相关的命令及系统性能诊断

author:skate

time:2011-03-09


   
   
这是我总结的关于linux环境和性能相关的命令,以备查询

内容:

一.              命令详解

二.              识别 cpu/io/ 内存 /network 瓶颈,及决方法啊

 

 

 

常用的和性能有关的命令

Iostat/vmstat/top/mpstat/time/strace/ipcs/ipcrm/ifconfig/tethereal/netstat/free/uptime

 

 

一. 命令详解

 

1.        Top 命令详解:

参考: http://bbs.linuxtone.org/thread-1684-1-1.html

 

[root@localhost ~]# top

 

top - 12:08:54 up 1 day, 21:06,  2 users,  load average: 0.16, 0.11, 0.06

Tasks: 123 total,   2 running, 121 sleeping,   0 stopped,   0 zombie

Cpu(s):  0.0% us,  0.0% sy,  0.0% ni, 99.9% id,  0.0% wa,  0.0% hi,  0.0% si

Mem:   8173076k total,  3188184k used,  4984892k free,   147472k buffers

Swap: 10223608k total,        0k used, 10223608k free,  2833104k cached

 

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

    1 root      16   0  4772  564  468 S  0.0  0.0   0:01.34 init                          

    2 root      RT   0     0    0    0 S  0.0  0.0   0:00.01 migration/0                  

    3 root      34  19     0    0    0 S  0.0  0.0   0:00.00 ksoftirqd/0                  

    4 root      RT   0     0    0    0 S  0.0  0.0   0:00.01 migration/1                  

    5 root      34  19     0    0    0 S  0.0  0.0   0:00.00 ksoftirqd/1                  

    6 root      RT   0     0    0    0 S  0.0  0.0   0:00.00 migration/2                  

    7 root      34  19     0    0    0 S  0.0  0.0   0:00.00 ksoftirqd/2                  

    8 root      RT   0     0    0    0 S  0.0  0.0   0:00.00 migration/3                  

    9 root      34  19     0    0    0 S  0.0  0.0   0:00.00 ksoftirqd/3                  

   10 root      RT   0      0    0    0 S  0.0  0.0   0:00.01 migration/4                  

   11 root      34  19     0    0    0 S  0.0  0.0   0:00.00 ksoftirqd/4                  

   12 root      RT   0     0    0    0 S  0.0  0.0   0:00.00 migration/5                  

   13 root      34  19     0    0    0 S  0.0  0.0   0:00.00 ksoftirqd/5                  

   14 root      RT   0     0    0    0 S  0.0  0.0   0:00.00 migration/6                  

   15 root      34  19     0    0    0 S  0.0  0.0   0:00.00 ksoftirqd/6                   

   16 root      RT   0     0    0    0 S  0.0  0.0   0:00.00 migration/7                  

   17 root      34  19     0    0    0 S  0.0  0.0   0:00.00 ksoftirqd/7

 

 

 

top 命令 Linux 下常用的性能 分析工具 ,能够实时显示系统 中各个进程 的资源占用状况,类似于Windows 的任务管理 ; top 是一个动态显示过程, 即可以通过用户按键来不断刷新当前状态. 如果在前台执行该命令, 它将独占前台, 直到用户终止该程序 为止.

 

默认情况下仅显示比较重要的  PIDUSERPRNIVIRTRESSHRS%CPU%MEMTIME+COMMAND  列。可以通过下面的快捷键来更改显示内容。

 

1.      更改显示内容通过 f 键可以选择显示的内容。按 f 键之后会显示列的列表,按 a-z   即可显示或隐藏对应的列,最后按回车键确定。

 

2.      o 键可以改变列的显示顺序。按小写的 a-z 可以将相应的列向右移动,而大写的 A-Z   可以将相应的列向左移动。最后按回车键确定。

 

 

3.      按大写的 F O 键,然后按 a-z 可以将进程按照相应的列进行排序。而大写的  R 键可以将当前的排序倒转。

 

 

统计信息区前五行是系统整体的统计信息。第一行是任务队列信息,同 uptime   命令的执行结果。其内容如下:

 

12:08:54

当前时间

up 1 day, 21:06

系统 运行 时间,格式为时:

2 user

当前登录用户数

load average: 0.16, 0.11, 0.06

系统 负载 ,即任务队列的平均长度。
            
三个数值分别为  1 分钟、5 分钟、15 分钟前到现在的平均值。

 

 

第二、三行为进程和 CPU 的信息。当有多个 CPU 时,通过按键“ 1 “可以在总 cpu 和每个 cpu 信息之间切换,这些内容可能会超过两行。内容如下:

 

Tasks: 123 total

进程总数

2 running

正在运行的进程数

121 sleeping

睡眠的进程数

0 stopped

停止的进程数

0 zombie

僵尸进程数

Cpu(s): 0.0% us

用户空间占用CPU 百分比

0.0% sy

内核 空间占用CPU 百分比

0.0% ni

用户进程空间内改变过优先级的进程占用CPU 百分比

99.9% id

空闲CPU 百分比

0.0% wa

等待输入输出的CPU 时间百分比

0.0% hi

 

0.0% si

 

 

最后两行为内存 信息。内容如下:

 

Mem:   8173076k total

物理内存总量

3188184k used

使用的物理内存总量

4984892k free

空闲内存总量

147472k buffers

用作内核 缓存 的内存量

Swap: 10223608k total

交换区总量

0k used

使用的交换区总量

10223608k free

空闲交换区总量

2833104k cached

缓冲的交换区总量。
            
内存中的内容被换出到交换区,而后又被换入到内存,但使用过的交换区尚未被覆盖,
            
该数值即为这些
内容已存在于内存中 的交换区的大小。
            
相应的内存再次被换出时可不必再对交换区写入。

 

 

进程信息区统计信息区域的下方显示了各个进程的详细信息。首先来认识一下各列的含义。

序号

列名

含义

a

PID

进程id

b

PPID

父进程id

c

RUSER

Real user name

d

UID

进程所有者的用户id

e

USER

进程所有者的用户名

f

GROUP

进程所有者的组名

g

TTY

启动进程的终端名。不是从终端启动的进程则显示为 ?

h

PR

优先级

i

NI

nice 值。负值表示高优先级,正值表示低优先级

j

P

最后使用的CPU ,仅在多CPU 环境 下有意义

k

%CPU

上次更新到现在的CPU 时间占用百分比

l

TIME

进程使用的CPU 时间总计,单位秒

m

TIME+

进程使用的CPU 时间总计,单位1/100

n

%MEM

进程使用的 物理内存 百分比

o

VIRT

进程使用的虚拟内存总量,单位kbVIRT=SWAP+RES

p

SWAP

进程使用的虚拟内存中,被换出的大小,单位kb

q

RES

进程使用的、未被换出的物理内存大小,单位kbRES=CODE+DATA

r

CODE

可执行代码占用的 物理 内存大小,单位kb

s

DATA

可执行代码以外的部分( 数据 +) 占用的 物理 内存大小,单位kb

t

SHR

共享内存大小,单位kb

u

nFLT

页面错误次数

v

nDRT

最后一次写入到现在,被修改过的页面数。

w

S

进程状态。
            
D = 不可中断的睡眠状态
            
R = 运行
            
S = 睡眠
            
T = 跟踪/ 停止
            
Z = 僵尸进程

x

COMMAND

命令名/ 命令行

y

WCHAN

若该进程在睡眠,则显示睡眠中的系统函数名

z

Flags

任务标志,参考 sched.h

2.     vmstat 命令详解

 

[root@localhost ~]# vmstat 1 5

procs -----------memory---------- ---swap-- -----io---- --system-- ----cpu----

  r  b   swpd   free   buff  cache   si   so    bi    bo   in    cs us sy id wa

  1  0      0 4886396 147552 2905036    0    0     1     4    4     3  0  0 100  0

  0  0      0 4886396 147552 2905036    0    0     0   228 4144  4103  1  1 98  0

  0  0      0 4886396 147552 2905036    0    0     0    88 1964  1286  0  0 99  0

  0  0      0 4886396 147552 2905036    0     0     0   100 2321  2007  1  0 99  0

  1  0      0 4886332 147552 2905036    0    0     0   156 2647  2265  1  0 99  0

[root@localhost ~]#

 

 

 

usage: vmstat [-V] [-n] [delay [count]]

              -V prints version.

              -n causes the headers not to be reprinted regularly.

              -a print inactive/active page stats.

              -d prints disk statistics

              -D prints disk table

              -p prints disk partition statistics

              -s prints vm table

              -m prints slabinfo

              -S unit size

              delay is the delay between updates in seconds.

              unit size k:1000 K:1024 m:1000000 M:1048576 (default is K)

              count is the number of updates.

 

 

 

vmstat 是一个相当全面的性能 分析工具 ,可以观察到系统进程 状态、内存 使用、虚拟内存使用、磁盘的 IO 、中断、上下问切换、 CPU 使用等性能信息

 

 

   Procs

       r: The number of processes waiting for run time. 运行 的和等待 (CPU 时间片 ) 运行的进程数,这个值也可以判断是否需要增加 CPU( 长期大于 cpu 个数 )

       b: The number of processes in uninterruptible sleep. 处于不可中断状态的进程数,这个值一般为 2-3 cpu 的个数就表明 cpu 排队比较严要了,常见的情况是由 IO 引起的

 

 

   Memory

       swpd: the amount of virtual memory used. 现在已经使用的虚拟内存,单位 k

       free: the amount of idle memory. 空闲物理内存,单位 k

       buff: the amount of memory used as buffers. 作为 buffer 使用的物理内存,对块设备读写进行缓冲,单位 k

       cache: the amount of memory used as cache. 作为 cache 使用的物理内存,对文件系统的缓冲,单位 k

       inact: the amount of inactive memory. (-a option) (没有活动的物理内存,单位 k

       active: the amount of active memory. (-a option) (有活动的物理内存,单位 k

 

buffer cache 的区别:

buffers are only used for file metadata (inodes, etc) and data from raw block devices. It's accessed via block device and block number.
Cache has file data blocks, and memory mapped information (i.e. files mapped with mmap() calls). It's accessed primarily via inode number.
  So, the main difference would be scope, One's more concerened with blocks on a device, the other with information in a file.

  buffer and cache both can flush to disk, however. The buffer to the device file and the cache through the file system layer to the block device.   

 

   Swap

       si: Amount of memory swapped in from disk (k/s). (每秒由磁盘调入内存的数量)

       so: Amount of memory swapped to disk (k/s). (每秒由内存调入磁盘的数量)

 

   IO

       bi: Blocks received from a block device (blocks/s). (从块设备读入的数据块数量)

       bo: Blocks sent to a block device (blocks/s).  (写到块设备的数据块数量)

如果这两个值比较大,说明 io 的压力也较大, cpu io 的等待可能也会大

 

   System

       in: The number of interrupts per second, including the clock. (每秒产生中断的次数)

       cs: The number of context switches per second. (每秒产生上下文切换的次数)

这个两个值比较大说明,说明消耗内核上 cpu 较多,可能不合理的使用 cpu

 

 

   CPU

       These are percentages of total CPU time.

       us: Time spent running non-kernel code. (user time, including nice time) (用户进程使用 cpu 的时间)

       sy: Time spent running kernel code. (system time) (内核进程使用 cpu 的时间)

       id: Time spent idle. Prior to Linux 2.5.41, this includes IO-wait time. (空闲事件使用 cpu 的时间,这个值越小,说明 cpu 可能很忙)

       wa: Time spent waiting for IO. Prior to Linux 2.5.41, shown as zero. (等待 io 使用 cpu 的时间)

 

 

3.        iostat 命令详解

 

iostat 用于监控 cpu 的统计信息和磁盘的统计信息

 

[oracle@localhost ~]$ iostat

Linux 2.6.9-78.ELsmp (localhost)        09/29/2010

 

avg-cpu:  %user   %nice    %sys %iowait   %idle

           0.18    0.00    0.08    0.02   99.72

 

Device:            tps   Blk_read/s   Blk_wrtn/s   Blk_read   Blk_wrtn

sda               8.48        26.06       111.87    6429617   27601457

sda1              0.00         0.00         0.00        628          0

sda2              0.00         0.01         0.00       1654         33

sda3              8.48        26.05       111.87    6426351   27601424

dm-0             14.65        26.04       111.87    6425698   27601424

dm-1              0.00         0.00         0.00        360          0

 

 

cpu 的统计信息,如果是多 cpu 系统,显示的所有 cpu 的平均统计信息。

 

%user :用户进程消耗 cpu 的比例

%nice :用户进程优先级调整消耗的 cpu 比例

%sys :系统内核消耗的 cpu 比例

%iowait :等待磁盘 io 所消耗的 cpu 比例

%idle :闲置 cpu 的比例(不包括等待磁盘 io s

 

磁盘的统计信息:

 

Device :设备的名称

Tps :设备上每秒的 io 传输(可能多个 io 被组成一个 io )的次数

Blk_read/s :每秒从设备读取 block kernel 2.4 以上, block=512byte )的数量

Blk_wrtn/s :每秒写到设备 block kernel 2.4 以上, block=512byte )的数量

Blk_read :间隔时间内,从设备读取总的 block 数量

Blk_wrtn :间隔时间内,写到设备总的 block 数量

 

 

默认 iostat 不带任何参数显示的是概要信息,如果要看更比较详细的信息,可以用“ iostat –x “,例子如下:

 

 

[root@localhost ~]# iostat -x

Linux 2.6.9-78.ELsmp (localhost)        09/30/2010

 

avg-cpu:  %user   %nice    %sys %iowait   %idle

           0.14    0.00    0.07    0.01   99.78

 

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

sda          0.04   5.08  0.46  6.74   19.21   94.55     9.60    47.27    15.80     0.01    0.93   0.18   0.13

sda1         0.00   0.00  0.00  0.00    0.00    0.00     0.00     0.00    26.17     0.00    3.08   2.83   0.00

sda2         0.00   0.00  0.00  0.00    0.00    0.00     0.00     0.00    17.57     0.00    0.99   0.84   0.00

sda3         0.03   5.08  0.46  6.74   19.20   94.55     9.60    47.27    15.80     0.01    0.93   0.18   0.13

dm-0         0.00   0.00  0.49 11.82   19.19   94.55     9.60    47.27     9.24     0.36   29.58   0.11   0.13

dm-1         0.00   0.00  0.00  0.00    0.00    0.00     0.00     0.00     8.00     0.00    6.22   0.62   0.00

 

字段说明:

 

rrqm/s 每秒进行 merge( 多个 io 的合并 ) 读操作的数量

wrqm/s 每秒进行 merge( 多个 io 的合并 ) 写操作的数量

r/s 每秒完成读 io 设备的次数

w/s 每秒完成写 io 设备的次数

rsec/s 每秒读扇区的次数

wsec/s 每秒写扇区的次数

rkB/s 每秒读多少 k 字节,在 kernel2.4 以上, rkB/s=2 × rsec/s ,因为一个扇区为 512bytes

wkB/s 每秒写多少 k 字节,在 kernel2.4 以上, wkB/s =2 × wsec/s ,因为一个扇区为 512bytes

avgrq-sz 平均每次 io 设备的大小(以扇区为单位),因为有 merge 读或写,所以每次 io 大小需要计算

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

await 每次 io 设备的等待时间,也包括 io 服务时间(毫秒)。

await 的大小一般取决于服务时间 (svctm) 以及 I/O 队列的长度和 I/O 请求的发出模式
如果 svctm 比较接近 await ,说明 I/O 几乎没有等待时间;
如果 await 远大于 svctm ,说明 I/O 队列太长,应用 得到的响应时间变慢,
如果响应时间超过了用户可以容许的范围,这时可以考虑更换更快的磁盘,调整内核 elevator 算法,优化 应用,或者升级 CPU
队列长度 (avgqu-sz) 也可作为衡量系统 I/O 负荷的指标,但由于 avgqu-sz 是按照单位时间的平均值,所以不能反映瞬间的 I/O 洪水

 

svctm 每次 io 设备的服务时间(毫秒), 它的大小一般和磁盘性能 有关:CPU/ 内存 的负荷也会对其有影响,请求过多也会间接导致 svctm 的增加

 

%util 处理 io 操作的 cpu 比例,如果这个着接近 100% ,说明 io 请求非常多, cpu 的所有时间都用来处理 io 请求, io 系统负载很大(也有可能 cpu 资源不足),磁盘可能存在瓶颈;在 %util 等于 70% 的时候, io 的读取就会有很多等待。

 

 

下面是别人写的这个参数输出的分析
# iostat -x 1
avg-cpu:  %user   %nice    %sys   %idle
16.24    0.00    4.31   79.44
Device:    rrqm/s wrqm/s   r/s   w/s  rsec/s  wsec/s    rkB/s    wkB/s avgrq-sz avgqu-sz   await  svctm  %util
/dev/cciss/c0d0
0.00  44.90  1.02 27.55    8.16  579.59     4.08   289.80    20.57    22.35   78.21   5.00  14.29
/dev/cciss/c0d0p1
0.00  44.90  1.02 27.55    8.16  579.59     4.08   289.80    20.57    22.35   78.21   5.00  14.29
/dev/cciss/c0d0p2
0.00   0.00  0.00  0.00    0.00    0.00     0.00     0.00     0.00     0.00    0.00   0.00   0.00

 


上面的 iostat 输出表明秒有 28.57 次设备 I/O 操作 : IO(io)/s = r/s( ) +w/s( ) = 1.02+27.55 = 28.57 ( / ) 其中写操作占了主体 (w:r = 27:1)


平均每次设备 I/O 操作只需要 5ms 就可以完成,但每个 I/O 请求却需要等上 78ms ,为什么 ? 因为发出的 I/O 请求太多 ( 每秒钟约 29 ) ,假设这些请求是同时发出的,那么平均等待时间可以这样计算 :
平均等待时间 = 单个 I/O 服务时间 * ( 1 + 2 + ... + 请求总数 -1) / 请求总数

应用到上面的例子 : 平均等待时间 = 5ms * (1+2+...+28)/29 = 70ms ,和 iostat 给出的 78ms 的平均等待时间很接近。这反过来表明 I/O 是同时发起的。


每秒发出的 I/O 请求很多 ( 29 ) ,平均队列却不长 ( 只有 2 左右 ) ,这表明这 29 个请求的到来并不均匀,大部分时间 I/O 是空闲的。


一秒中有 14.29% 的时间 I/O 队列中是有请求的,也就是说, 85.71% 的时间里 I/O 系统无事可做,所有 29 I/O 请求都在 142 毫秒之内处理掉了。
delta(ruse+wuse)/delta(io) = await = 78.21 => delta(ruse+wuse)/s=78.21 * delta(io)/s = 78.21*28.57 =2232.8
,表明每秒内的 I/O 请求总共需要等待 2232.8ms 。所以平均队列长度应为 2232.8ms/1000ms = 2.23 ,而 iostat 给出的平均队列长度 (avgqu-sz) 却为 22.35 ,为什么 ?! 因为 iostat 中有 bug avgqu-sz 值应为 2.23 ,而不是 22.35

 

 

 

4.        sar 命令详解

 

sar 的常用参数:

-A :所有报告的总和。
-u
CPU 利用率
-v
:进程、 I 节点、文件和锁表状态。
-d
:硬盘使用报告。
-r
:内存和交换空间的使用统计。
-g
:串口 I/O 的情况。
-b
:缓冲区使用情况。
-a
:文件读写情况。
-c
:系统调用情况。
-q
:报告队列长度和系统平均负载
-R
:进程的活动情况。
-y
:终端设备活动情况。
-w
:系统交换活动。
-x { pid | SELF | ALL }
:报告指定进程 ID 的统计信息, SELF 关键字是 sar 进程本身的统计, ALL 关键字是所有系统进程的统计

 

 

 

查看 cpu

[root@localhost ~]# sar -u 1 5

Linux 2.6.9-78.ELsmp (localhost)        09/30/2010

 

06:08:27 PM       CPU     %user     %nice   %system   %iowait     %idle

06:08:28 PM       all      0.00      0.00      0.00       0.00    100.00

06:08:29 PM       all      0.00      0.00      0.12      0.00     99.88

06:08:30 PM       all      0.00      0.00      0.00      0.00    100.00

 

06:08:30 PM       CPU     %user     %nice   %system   %iowait     %idle

06:08:31 PM       all      0.00      0.00      0.00      0.00    100.00

06:08:32 PM       all      0.00      0.00      0.00      0.00    100.00

Average:          all      0.00      0.00      0.02      0.00     99.98

 

在显示内容包括:

  %userCPU 处在用户模式下的时间百分比。
    %nice CPU 处在带NICE 值的用户模式下的时间百分比。
  %systemCPU 处在系统模式下的时间百分比。
  %iowaitCPU 等待输入输出完成时间的百分比。
    %idle CPU 空闲时间百分比。
         在所有的显示中,我们应主要注意%iowait%idle%iowait 的值过高,表示硬盘存在I/O 瓶颈,%idle 值高,表示CPU 较空闲,如果%idle 值高但系统响应慢时,有可能是CPU 等待分配内存,此时应加大内存容量。%idle 值如果持续低于10 ,那么系统的CPU 处理能力相对较低,表明系统中最需要解决的资源是CPU

 

 

查看 io

[root@localhost ~]# sar -b 1 5

Linux 2.6.9-78.ELsmp (localhost)        09/30/2010

 

06:10:06 PM       tps      rtps      wtps   bread/s   bwrtn/s

06:10:07 PM      0.00      0.00      0.00      0.00      0.00

06:10:08 PM      3.00      0.00      3.00      0.00     48.00

06:10:09 PM      2.00      0.00      2.00      0.00    112.00

 

06:10:09 PM       tps      rtps      wtps   bread/s   bwrtn/s

06:10:10 PM     21.78      0.00     21.78      0.00    213.86

06:10:11 PM      3.00      0.00      3.00      0.00     48.00

Average:         5.99      0.00      5.99      0.00     84.63

 

查看物理内存和 swap 空间使用信息

[root@localhost ~]# sar -r 1 5

Linux 2.6.9-78.ELsmp (localhost)        09/30/2010

 

06:12:21 PM kbmemfree kbmemused  %memused kbbuffers  kbcached kbswpfree kbswpused  %swpused  kbswpcad

06:12:22 PM   1272620   6900456     84.43    176328    6388732  10223608         0      0.00         0

06:12:23 PM   1272620   6900456     84.43    176328   6388732  10223608         0      0.00         0

06:12:24 PM   1272620   6900456     84.43    176328   6388732  10223608         0      0.00         0

 

06:12:24 PM kbmemfree kbmemused  %memused kbbuffers  kbcached kbswpfree kbswpused  %swpused  kbswpcad

06:12:25 PM   1272620   6900456     84.43    176328   6388732  10223608         0      0.00         0

06:12:26 PM   1272620   6900456     84.43    176328   6388732  10223608         0      0.00         0

Average:      1272620   6900456     84.43    176328   6388732  10223608         0      0.00         0

 

 

 

查看网卡流量统计

root@localhost ~]# sar -n EDEV 1 5

Linux 2.6.9-78.ELsmp (localhost)        09/30/2010

 

06:18:22 PM     IFACE   rxerr/s   txerr/s    coll/s  rxdrop/s  txdrop/s  txcarr/s  rxfram/s  rxfifo/s  txfifo/s

06:18:23 PM        lo      0.00      0.00      0.00      0.00      0.00      0.00      0.00      0.00      0.00

06:18:23 PM      eth0      0.00      0.00      0.00      0.00      0.00      0.00      0.00      0.00      0.00

06:18:23 PM      eth1      0.00      0.00      0.00      0.00      0.00      0.00      0.00      0.00      0.00

06:18:23 PM      sit0      0.00      0.00      0.00      0.00      0.00      0.00      0.00      0.00      0.00

 

06:18:23 PM     IFACE   rxerr/s   txerr/s    coll/s  rxdrop/s  txdrop/s  txcarr/s  rxfram/s  rxfifo/s  txfifo/s

06:18:24 PM        lo      0.00      0.00      0.00      0.00      0.00      0.00      0.00      0.00       0.00

06:18:24 PM      eth0      0.00      0.00      0.00      0.00      0.00      0.00      0.00      0.00      0.00

06:18:24 PM      eth1      0.00      0.00      0.00      0.00      0.00      0.00      0.00      0.00      0.00

06:18:24 PM      sit0       0.00      0.00      0.00      0.00      0.00      0.00      0.00      0.00      0.00

 

06:18:24 PM     IFACE   rxerr/s   txerr/s    coll/s  rxdrop/s  txdrop/s  txcarr/s  rxfram/s  rxfifo/s  txfifo/s

06:18:25 PM        lo      0.00      0.00      0.00       0.00      0.00      0.00      0.00      0.00      0.00

06:18:25 PM      eth0      0.00      0.00      0.00      0.00      0.00      0.00      0.00      0.00      0.00

06:18:25 PM      eth1      0.00      0.00      0.00      0.00      0.00      0.00       0.00      0.00      0.00

06:18:25 PM      sit0      0.00      0.00      0.00      0.00      0.00      0.00      0.00      0.00      0.00

 

06:18:25 PM     IFACE   rxerr/s   txerr/s    coll/s  rxdrop/s  txdrop/s  txcarr/s  rxfram/s  rxfifo/s  txfifo/s

06:18:26 PM        lo      0.00      0.00      0.00      0.00      0.00      0.00      0.00      0.00      0.00

06:18:26 PM      eth0      0.00      0.00      0.00      0.00      0.00      0.00      0.00      0.00      0.00

06:18:26 PM      eth1      0.00       0.00      0.00      0.00      0.00      0.00      0.00      0.00      0.00

06:18:26 PM      sit0      0.00      0.00      0.00      0.00      0.00      0.00      0.00      0.00      0.00

 

06:18:26 PM     IFACE   rxerr/s   txerr/s    coll/s  rxdrop/s  txdrop/s  txcarr/s  rxfram/s  rxfifo/s  txfifo/s

06:18:27 PM        lo      0.00      0.00      0.00      0.00      0.00      0.00      0.00      0.00      0.00

06:18:27 PM      eth0      0.00      0.00      0.00      0.00      0.00      0.00      0.00      0.00      0.00

06:18:27 PM      eth1      0.00      0.00      0.00      0.00      0.00      0.00      0.00      0.00      0.00

06:18:27 PM      sit0      0.00      0.00      0.00      0.00      0.00      0.00      0.00      0.00      0.00

 

Average:        IFACE   rxerr/s   txerr/s    coll/s  rxdrop/s  txdrop/s  txcarr/s  rxfram/s  rxfifo/s  txfifo/s

Average:           lo      0.00      0.00      0.00      0.00      0.00      0.00      0.00      0.00      0.00

Average:         eth0      0.00      0.00      0.00      0.00      0.00      0.00      0.00      0.00      0.00

Average:         eth1      0.00      0.00      0.00      0.00      0.00      0.00      0.00      0.00      0.00

Average:         sit0      0.00      0.00      0.00      0.00      0.00      0.00       0.00      0.00      0.00

 

 

查看 运行进程队列长度

[root@localhost ~]# sar -q 1 5

Linux 2.6.9-78.ELsmp (localhost)        09/30/2010

 

08:00:04 PM   runq-sz  plist-sz   ldavg-1   ldavg-5  ldavg-15

08:00:05 PM         0       127      0.02      0.16      0.10

08:00:06 PM         0       127      0.02      0.16      0.10

08:00:07 PM         0       127      0.02      0.16      0.10

 

08:00:07 PM   runq-sz  plist-sz   ldavg-1   ldavg-5  ldavg-15

08:00:08 PM         0       127      0.02      0.16      0.10

08:00:09 PM         0       127      0.01       0.16      0.10

Average:            0       127      0.02      0.16      0.10

 

字段说明:

runq-sz 准备运行的进程运行队列。
plist-sz    进程队列里的进程和线程的数量
ldavg-1    前一分钟的系统平均负载 (load average)
ldavg-5    前五分钟的系统平均负载 (load average)
ldavg-15    15 分钟的系统平均负载 (load average)

 

一般来说只要每个CPU 的当前活动进程数不大于3 那么系统的性能就是良好的,如果每个CPU 的任务数大于5 ,那么就表示这台机器的性能有严重问题。负载/cpu 数量,表示每个cpu 的活动进程数

 

 

5.        ps 命令详解

ps 用户查看进程的相关信息,和 top 类似

 

查看系统当前运行的所有进程

ps –ef ps auxw

其中参数 a 表示显示系统中所有用户的的进程; u 表示输出进程用户所属信息; x 表示也显示没有控制台的进程; w 表示加宽可以显示较多 的资讯; 若显示行太长而被截断则可以使用 f 参数

 

 

[root@localhost ~]# ps -auxw|more

USER       PID %CPU %MEM   VSZ  RSS TTY      STAT START   TIME COMMAND

root         1  0.0  0.0  4772  564 ?        S    Sep26   0:01 init [5]                                        

                 

root         2  0.0  0.0     0    0 ?        S    Sep26   0:00 [migration/0]

root         3  0.0  0.0     0    0 ?        SN    Sep26   0:00 [ksoftirqd/0]

root         4  0.0  0.0     0    0 ?        S    Sep26   0:00 [migration/1]

root         5  0.0  0.0     0    0 ?        SN   Sep26   0:00 [ksoftirqd/1]

root         6  0.0  0.0     0    0 ?        S    Sep26   0:00 [migration/2]

root         7  0.0  0.0     0    0 ?        SN   Sep26   0:00 [ksoftirqd/2]

root         8  0.0  0.0     0    0 ?        S    Sep26   0:00 [migration/3]

root         9  0.0  0.0     0    0 ?        SN   Sep26   0:00 [ksoftirqd/3]

root        10  0.0  0.0     0    0 ?        S    Sep26   0:00 [migration/4]

root        11  0.0  0.0     0    0 ?        SN   Sep26   0:00 [ksoftirqd/4]

 

字段说明:

USER: 行程拥有者
PID: pid
%CPU:
占用的 CPU 使用率

%MEM:
占用的记忆体使用率

VSZ:
占用的虚拟记忆体大小

RSS:
占用的记忆体大小

TTY:
终端的次要装置号码
(minor device number of tty)
STAT:
该行程的状态
:
     D:
不可中断的静止 ( 通悸□□b 进行 I/O 动作
)
     R:
正在执行中

     S:
静止状态

     T:
暂停执行

     Z:
不存在但暂时无法消除

      W:
没有足够的记忆体分页可分配

     <:
高优先序的行程

     N:
低优先序的行程

     L:
有记忆体分页分配并锁在记忆体内 ( 即时系统或捱
A I/O)
START:
行程开始时间

TIME:
执行的时间

COMMAND:
所执行的指令

 

 

 

6.     time 命令详解

查看命令运行的时间

 

[root@localhost ~]# time ps -ef | wc -l

134

 

real    0m0.009s

user    0m0.004s

sys     0m0.006s

 

7.     pstree 命令详解

显示进程的树形结构

 

[root@localhost ~]# pstree |more

init ─┬─acpid

     ├─atd

     ├─crond

     ├─cups-config-dae

     ├─cupsd

     ├─dbus-daemon-1

     ├─dhclient

     ├─events/0 ─┬─aio/0

               ├─aio/1

               ├─aio/2

               ├─aio/3

               ├─aio/4

               ├─aio/5

               ├─aio/6

               ├─aio/7

               ├─kacpid

               ├─kblockd/0

               ├─kblockd/1

               ├─kblockd/2

               ├─kblockd/3

               ├─kblockd/4

               ├─kblockd/5

               ├─kblockd/6

               ├─kblockd/7

--More—

 

8.     进程的跟踪命令介绍

 

进程无法启动,软件运行速度突然变慢,程序的"SegmentFault" 等等都是让每个Unix 系统用户头痛的问题,可以用这些进程跟踪命令来诊断(在aix 上有类似gdb 命令)

 

truss strace :用来跟踪一个进程的系统调用或信号产生的情况,

ltrace :用来跟踪进程调用库函数的情况。

 

 

这三个命令的用户基本相同,介绍下常用的参数

 

-f :除了跟踪当前进程外,还跟踪其子进程。
-o file
:将输出信息写到文件file 中,而不是显示到标准错误输出(stderr )。
-p pid
:绑定到一个由pid 对应的正在运行的进程。此参数常用来调试后台进程。

-e execve :只记录 execve 这类系统调用

 

 

9.     网络相关命令

 

ifconfig               # 查看所有网络接口的属性

netstat -lntp          # 查看所有监听端口

netstat -antp          # 查看所有已经建立的连接

netstat -s             # 查看网络统计信息进程

tethereal

 

iptraf :可以监控网络流量

 

安装方式:

1. 官网及下载 http://iptraf.seul.org/download.html

2. get ftp://iptraf.seul.org/pub/iptraf/iptraf-3.0.0.tar.gz

3. yum install -y iptraf

 

 

 

 

 

 

带说明:

 

10 Ipcs Ipcrm 命令详解

 

Ipcs ipcrm 是管理 System V IPC 对象的( 消息、信号量(semaphores) 和共享内存 ),在日常工作中,有时会遇到共享内存无法释放。这个时候就可以通过ipcs 查询,ipcrm 删除

样例:

ipcs [-m|-q|-s]

-m      输出有关共享内存(shared memory) 的信息

-q      输出有关信息队列(message queue) 的信息

-s      输出有关“遮断器”(semaphore) 的信息

#ipcs -m

 

删除ipc

ipcrm -m|-q|-s shm_id

#ipcrm -m 105

 

参考: http://www.52rd.com/Blog/Detail_RD.Blog_wqyuwss_6519.html

 

 

性能分析分类汇总:

进程性能分析相关的命令:

top ps pstree

 

Cpu 性能分析相关命令:

vmstat sar time top

 

Memory 性能分析相关命令:

vmstat top ipcs ipcrm cat /proc/meminfo cat /proc/slabinfo cat /proc/<pid #>/maps

 

io 性能分析相关命令:

vmstat iostat

 

网络性能分析相关命令:

Ifconfig netstat tethereal sar –n EDEV

 

 

 

 

 

 

 

 

二.              识别 cpu/io/ 内存 /network 瓶颈,及决方法啊

 

1.        识别 cpu 性能瓶颈

 

衡量 Cpu 性能指标:

 

1 用户使用 CPU 的情况;
CPU 运行常规用户进程

CPU 运行 niced process
CPU
运行实时进程

2 . 系统使用CPU 情况;
用于I/O 管理:中断和驱动
用于内存管理 :页面交换
用户进程管理:进程开始和上下文切换

3 WIO :用于进程等待磁盘I/O 而使CPU 处于空闲状态的比率。

4 CPU 的空闲率,除了上面的WIO 以外的空闲时间

5 CPU 用于上下文交换的比率

6 nice

7 real-time

8 .运行进程队列的长度

9 .平均负载

 

用于查看 cpu 性能的命令有: vmstat iostat sar top strace

既然已经知道 cpu 性能指标了,那就用命令查看确认

 

步骤一:先用 vmstat 查看系统的 cpu 整体运行状况

 

[root@localhost ~]# vmstat -n 1 10

procs -----------memory---------- ---swap-- -----io---- --system-- ----cpu----

  r  b    swpd   free   buff  cache   si   so    bi    bo   in    cs us sy id wa

  0  0       0 1282844 176332 6389000    0    0     1     6   10     8  0  0 100  0

  0  0       0 1282844 176332 6389000    0    0     0     0 1028   120  0  0 100  0

  0  0       0 1282844 176332 6389000    0    0     0     8 1011    41  0  0 100  0

  0  0       0 1282844 176332 6389000    0    0     0    28 1033   146  0  0 100  0

  0  0       0 1282844 176332 6389000    0    0     0    40 1009    31   0  0 100  0

  0  0       0 1282844 176332 6389000    0    0     0     0 1048   156  0  0 100  0

  0  0       0 1282844 176332 6389000    0    0     0    24 1010    35  0  0 100  0

  0  0       0 1282844 176332 6389000    0    0     0     0 1026   119  0  0 100   0

  0  0       0 1282844 176332 6389000    0    0     0     0 1017    63  0  0 100  0

  0  0       0 1282844 176332 6389000    0    0     0    24 1032   141  0  0 100  0

 

红色的字表是和 cpu 性能有关的

r: 如果在 procs 中运行的序列 (process r) 是连续的大于在系统中的 CPU 的个数,表示 cpu 比较忙,系统现在运行比较慢 , 有多数的进程等待 CPU. 如果 r 的输出数大于系统中可用 CPU 个数的 4 的话 , 则系统面临着 CPU 短缺的问题 , 或者是 CPU 的速率过低 , 系统中有多数的进程在等待 CPU, 造成系统中进程运行过慢 .

b : 如果在 procs 中运行的序列 (process b) , 即处于不可中断状态的进程数,连续我为 cpu 2-3 倍就表明 cpu 排队比较严要了

 

SYSTEM
in: 每秒产生的中断次数
cs: 每秒产生的上下文切换次数
上面2 个值越大,会看到由内核消耗的CPU 时间会越大

 

CPU
us: 用户进程消耗的CPU 时间百分,

us 的值比较高时,说明用户进程消耗的CPU 时间多,在 服务 高峰期持续大于5060 ,是可以接受 但是如果长期超50% 的使用,那么我们就该考虑优化程序算法或者进行加速

 

sy: 内核进程消耗的CPU 时间百分比

sy 的值高时,说明系统内核消耗的CPU 资源多,这并不是良性表现,我们应该检查原因

wa: IO 等待消耗的CPU 时间百分比
wa
的值高时,说明IO 等待比较严重,这可能由于磁盘大量作随机访问造成,也有可能磁盘出现瓶颈(块操作)。

id: CPU 处于空闲状态时间百分比, 如果空闲时间(cpu id) 持续为0 并且系统时间(cpu sy) 是用户时间的 两倍 (cpu us) 系统则面临着CPU 资源的短缺. 服务高峰期持续小于 50 ,可以接受

 

通过这个命令可以观察 cpu 性能的结果是:

A .如果 r 连续大于 cpu 的个数,甚至几倍 cpu 个数; b 也有持续有值,甚至 cpu 2-3 倍,并且 id 也持续小于 50% wa 也比较小,这就表明 cpu 符合很严重。

再详细确认可以用: sar -u 1 5 sar -q 1 5 可以观察 cpu 的使用率和 cpu 运行进程队列长度及负载。

C 如果想再看看具体是什么进程在消耗 cpu ,就要使用命令 top ps –auxw | more

D 如果知道了某个进程消耗大量的 cpu ,想主要知道这个进程在做成什么,那就用命令: strace

 

 

2. 识别memory 性能瓶颈

 

为了提高磁盘存取效率, Linux 做了一些精心的设计, 除了对dentry 进行缓存( 用于VFS, 加速文件路径名到inode 的转换), 还采取了两种主要Cache 方式:Buffer CachePage Cache. 前者针对磁盘块的读写, 后者针对文件inode 的读写. 这些Cache 有效缩短了I/O 系统调用( 比如read,write,getdents) 的时间.
      
内存活动基本上可以用3 个数字来量化 : 活动虚拟内存总量, 交换(swapping) 率和调页(paging). 其中第一个数字表明内存的总需求量, 后两个数字表示那些内存中有多少比例正处在使用之中. 目标是减少内存活动或增加内存量, 直到调页率保持在一个可以接受的水平上为止.
     
活动虚拟内存的总量(VM)= 实际内存大小(size of real memory)( 物理内存)+ 使用的交换空间大小(amount of swap space used)


    
当程序运行需要的内存大于物理内存时,UNIX 系统采用了调页机制,即系统copy 一些内存中的页面到磁盘上,腾出来空间供进程使用。


大多数系统可以忍受偶尔的调页,但是频繁的调页会使系统性能急剧下降。


UNIX
内存管理UNIX 系统通过2 种方法进行内存管理, 调页算法 交换技术


调页算法: 是将内存中最近不常使用的页面换到磁盘上,把常使用的页面(活动页面)保留

在内存中供进程使用。
交换技术: 是系统将整个进程,而不是部分页面,全部换到磁盘上。正常情况下,系统会发

生一些交换过程。


当内存严重不足时,系统会 频繁使用调页和交换 ,这增加了磁盘I/O 的负载。进一步降低了系统对作业的执行速度,即系统I/O 资源问题又会影响到内存资源的分配。


Unix
的虚拟内存
Unix
的虚拟内存是一个十分复杂的子系统,它实现了进程间代码 与数据共享机制的透明性,并能够分配比系统现有物理内存更多的内存,某些操作系统的虚存甚至能通过提供缓存功能影响到文件系统的性能,各种风格的UNIX 的虚存的实现方式区别很大,但都离不开下面的4 个概念。


1:
实际内存
实际内存是指一个系统中实际存在的物理内存,称为RAM 。实际内存是存储临时数据最快最有效的方式,因此必须尽可能地分配给应用程序,现在的RAM 的形式有多种:SIMMDIMMRambusDDR 等,很多RAM 都可以使用纠错机制(ECC )。


2:
交换空间
交换空间是专门用于临时存储内存的一块磁盘空间,通常在页面调度和交换进程数据时使用,通常推荐交换空间的大小应该是物理内存的二到四倍。


3:
页面调度
页面调度是指从磁盘向内存传输数据,以及相反的过程,这个过程之所以被称为页面调度,是因为Unix 内存被平均划分成大小相等的页面;通常页面大小为4KB8KB (在Solaris 中可以用pagesize 命令查看)。当可执行程序开始运行时,它的映象会一页一页地从磁盘中换入,与此类似,当某些内存在一段时间内空闲,就可以把它们换出到交换空间中,这样就可以把空闲的RAM 交给其他需要它的程序使用。


4:
交换
页面调度通常容易和交换的概念混淆,页面调度是指把一个进程所占内存的空闲部分传输到磁盘上,而交换是指当系统中实际的内存已不够满足新的分配需求时,把整个进程传输到磁盘上,交换活动通常意味着内存不足。

 

[root@ticketA ~]# vmstat 1 10

procs -----------memory---------- ---swap-- -----io---- --system-- ----cpu----

  r  b    swpd   free   buff  cache   si   so     bi    bo   in    cs us sy id wa

  2  0   81616 105616 122168 31284140    1    1     16    24    0     0  2  0 98  0

  3  0   81616 105616 122168 31284140    0    0      0    12 5594  4285  3  1 96  0

  2  0   81616 105616 122172 31284136    0    0      0    16 5574  4176  3  1 96  0

  1  0   81616 105552 122172 31284136    0    0      0   108 5545  4329  3  1 96  0

  3  0   81616 105360 122172 31284136    0    0      0    36 5533  4195  3  1 96  0

  0  0   81616 105360 122180 31284128    0    0      0    60 5538  4341  3  1 96  0

  0  0   81616 105360 122180 31284128    0    0      0    48 5473  4179  3  1 96  0

  1  0   81616 105360 122180 31284128    0    0      0     8 5553  4299  3  1 96  0

  0  0   81616 105360 122180 31284128    0    0      0    20 5608  4231  3  1 96  0

  0  0   81616 105360 122180 31284128    0    0      0    60 5585  4285  3  0 96  0

 

 

MEMORY
-swap:
切换到交换内存上的内存(默认以KB 为单位)
如果SWAP 的值不为0 ,或者还比较大,比如超过100M 了,但是SISO 的值长期为0 ,这种情况我们可以不用担心,不会影响系统性能。-free: 空闲的物理内存

- buff:
作为buffer cache 的内存,对块设备的读写进行缓冲
- cache
:作为page cache 的内存,文件系统的 cache
如果cache 的值大的时候,说明cache 处的文件数多,如果频繁访问到的文件都能被cache 处,那么磁盘的读IO bi 会非常小。

SWAP
-si:
交换内存使用,由磁盘调入内存
-so:
交换内存使用,由内存调入磁盘
内存够用的时候,这2 个值都是0 ,如果这2 个值长期大于0 时,系统性能会受到影响,磁盘IOCPU 资源都会被消耗。
我发现有些朋友看到空闲内存(FREE )很少的或接近于0 时,就认为内存不够用了,实际上不能光看这一点,Linux 是抢占内存式的OS ,还要结合si,so ,如果free 很少,但是si,so 也很少(大多时候是0 ),那么不用担心,系统性能这时不会受到影响的。

 

 

3. 识别 io 性能瓶颈

 

首先用命令 vmstat 大概了解系统状况

 

[root@localhost ~]# vmstat 1 5

procs -----------memory---------- ---swap-- -----io---- --system-- ----cpu----

  r  b   swpd   free   buff  cache   si   so    bi    bo   in    cs us sy id wa

  0  0      0 1225516 176836 6452620    0    0     0     4    3     3  0  0 100  0

  0  0      0 1225524 176836 6452620    0    0     0    32 1021    66  0  0 100  0

  0  0       0 1225524 176836 6452620    0    0     0     0 1028   122  0  0 100  0

  0  0      0 1225524 176836 6452620    0    0     0    40 1009    36  0  0 100  0

  0  0      0 1225524 176836 6452620    0    0     0     0 1028   124  0  0 100  0

 

如果 b 的值为 2-3 cpu 数量, bi bo 的值很大(有时 bi bo 值很小,但 in cs 很大,也会引起磁盘 io 负载重), wa 的值持续很高,如高于 40 id 也持续高于 70 ,这些现象都表明系统的 io 可能出现性能问题。可以进一步通过 iostat 命令分析。

 

root@localhost ~]# iostat -x 1 5

Linux 2.6.9-78.ELsmp (localhost)        10/08/2010

 

avg-cpu:  %user   %nice    %sys %iowait   %idle

           0.07    0.00    0.03    0.01   99.89

 

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

sda          0.01   3.26  0.16  4.36    6.42   60.99     3.21    30.49    14.91     0.00    0.56   0.16   0.07

sda1         0.00   0.00  0.00  0.00    0.00    0.00     0.00     0.00    26.17     0.00    3.08   2.83   0.00

sda2         0.00   0.00  0.00  0.00    0.00    0.00     0.00     0.00    17.57     0.00    0.99   0.84   0.00

sda3         0.01   3.26  0.16  4.36    6.42   60.99     3.21    30.49    14.91     0.00    0.56   0.16   0.07

dm-0         0.00   0.00  0.17  7.62    6.42   60.99     3.21    30.49     8.65     0.12   15.45   0.09   0.07

dm-1         0.00   0.00  0.00  0.00    0.00    0.00     0.00     0.00     8.00     0.00    6.22   0.62   0.00

 

查看 iostat 的结果,首先看 %util( 服务 io 的时间占总时间的百分比 ) ,如果这个值接近 100% ,表示 io 的请求很多(表示任务 服务的所有时间几乎都用在 io 上),这种现象表明磁盘 io 性能出现瓶颈。

再看 await (表示每次 io 设备等待时间)和 svctm (表示每次 io 设备服务时间,一般性能越好的磁盘,这个值越小)。

如果 svctm 接近 await ,说明 io 几乎没有等待,每个 io 设备都得到及时的响应

如果 svctm 远小于 await ,说明 io 等待队列可能很长, io 的得到服务的时间将延长(排队 + 服务时间)。

 

avgqu-sz 表示 io 排队的现象,如果排队过长会影响 io 的响应时间

 

r/s+w/s :可以计算当前系统的 iops (可以结合硬盘的测试或者硬件参数来衡量是否超过磁盘的 iops 最大值)

 

 

4. 网络性能识别与分析

 

可以通过命令 netstat iptraf 命令来识别

 

可以通过 ifconfig netstat 连接网络基本情况

 

ifconfig               # 查看所有网络接口的属性

netstat -lntp          # 查看所有监听端口

netstat -antp          # 查看所有已经建立的连接

netstat -s             # 查看网络统计信息进程

 

iptraf 连接网络的速率,如果网络的带宽达到极限,那一般系统的支持的进程数或者最大连接数也会成为瓶颈

 

 

知道哪有问题了,接下来就是调整了,调整的方法如下:

 

Cpu 的调整:

一般在 cpu wa 小于 5% 就需要调整 cpu ,调整的相关参数在目录下: /proc/sys/kernel/ ;一边调整参数 threads-max pid_max ,如下:

[root@localhost ~]# sysctl kernel.pid_max

kernel.pid_max = 32768

[root@localhost ~]# sysctl kernel.pid_max=32769

kernel.pid_max = 32769

 

memory 调整:

当出现严重的换页现象,应该注意内存不足的影响

1. 关闭不必要的非核心进程

 

2. 调整 /proc/sys/vm/ 下的系统参数

 

保证 linux 有足够的物理内存,可以调整 vm 的如下参数

 

vm.min_free_kbytes=409600 ;// 默认值是 3797 ,保证物理内存有足够空闲空间,防止突发性换页

vm.vfs_cache_pressure=200 // 默认是 100 ,增大这个参数设置了虚拟内存回收 directory i-node 缓冲的倾向,这个值越大。越易回收

vm.swappiness=40 // 缺省 60 ,减少这个参数会使系统尽快通过 swapout 不使用的进程资源来释放更多的物理内存

3. 配置较大的 swap ,一般为物理内存 2

 

 

Io 的调整:

1.        负载平衡,磁盘 io 均分

2.        启用异步 io

查看是否启用异步 io

[root@localhost ~]# cat /proc/slabinfo |grep kio

kioctx 0  0    384   10    1 : tunables   54   27    8 : slabdata      0      0      0

kiocb 0 0    256   15    1 : tunables  120   60    8 : slabdata      0      0      0

 

3.        块设备调大预读扇区 readahead

[root@localhost ~]# blockdev --report

RO    RA   SSZ   BSZ   StartSec     Size    Device

rw   256   512  4096          0  570949632  /dev/sda

rw   256   512  1024         63      80262  /dev/sda1

rw   256   512  1024      80325     208845  /dev/sda2

rw   256   512   512     289170  570644865  /dev/sda3

rw   256   512  4096     289170  550109184  /dev/dm-0

rw   256   512  4096     289170   20447232  /dev/dm-1

[root@localhost ~]# blockdev --setra 2048 /dev/sda1

[root@localhost ~]# blockdev --report

RO    RA   SSZ    BSZ   StartSec     Size    Device

rw  2048   512  4096          0  570949632  /dev/sda

rw  2048   512  1024         63      80262  /dev/sda1

rw  2048   512  1024      80325     208845  /dev/sda2

rw  2048   512   512     289170  570644865  /dev/sda3

rw   256   512  4096     289170  550109184  /dev/dm-0

rw   256   512  4096     289170   20447232  /dev/dm-1

 

4.        调整 vm 相关参数

 

  改善 io 系统的性能的 vm 参数

overcommit_memory = 0

vm.overcommit_ratio = 10 // 默认值是 50 ,用于虚拟内存的物理内存的百分比

vm.dirty_ratio = 20 // 默认值是 40 ,为了保持稳定,持续的写入,把这个值调整的小一些,经验值是 20

vm.dirty_background_ratio // 缺省数值是 500 ,也就是 5 , 如果系统要求稳定持续的写,可以适当降低该值,把峰值的写操作平均多次,也避免宕机丢失更多的数据

vm.dirty_expire_centisecs // 缺省是 3000 ,也就是 30 , 如果系统写操作压力很大,可以适当减小该值,但也不要太小;建议设置为 1500

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值