影响 Linux 服务器性能的因素
CPU
内存
磁盘 IO
网络 IO
系统性能评估标准
影响性能因素 | 好 | 坏 | 糟糕 |
---|---|---|---|
CPU | user% + sys%< 70% | user% + sys%= 85% | user% + sys% >=90% |
内存 | Swap In(si)=0 Swap Out(so)=0 | Per CPU with 10 page/s | More Swap In & Swap Out |
磁盘 | iowait % < 20% | iowait % =35% | iowait % >= 50% |
其中:
%user: 表示 CPU 处在用户模式下的时间百分比.
%sys: 表示 CPU 处在系统模式下的时间百分比.
%iowait: 表示 CPU 等待输入输出完成时间的百分比.
swap in: 即 si, 表示虚拟内存的页导入, 即从 SWAP DISK 交换到 RAM
swap out: 即 so, 表示虚拟内存的页导出, 即从 RAM 交换到 SWAP DISK.
系统性能分析工具
常用系统命令
Vmstat,sar,iostat,netstat,free,ps,top 等
常用组合方式:
用 vmstat,sar,iostat 检测是否是 CPU 瓶颈.
用 free,vmstat 检测是否是内存瓶颈.
用 iostat 检测是否是磁盘 I/O 瓶颈.
用 netstat 检测是否是网络带宽瓶颈.
系统整体负载查询(uptime)
- uptime
- 08:21:34 up 36 min, 2 users, load average: 0.00, 0.00, 0.00
- # 当前服务器时间: 08:21:34
- # 当前服务器运行时长 36 min
- # 当前用户数 2 users
- # 当前的负载均衡 load average 0.00, 0.00, 0.00, 分别取 1min,5min,15min 的均值
该命令为查询 CPU 的负载情况, 在观察时应取得 CPU 核心数目 N, 观察后面 2 个数字, 用数字 / N, 如果得到的值小于 0.7 即可无忧.
CPU 性能评估
vmstat 命令
利用 vmstat 命令监控系统 CPU, 该命令可以显示关于系统各种资源之间相关性能的简要信息, 这里我们主要用它来看 CPU 一个负载情况.
vmstat 5 5: 每 5 秒监控一次, 总共 5 次
r: 表示运行队列(就是说多少个进程真的分配到 CPU), 一般运行队列多大, 表示 CPU 很繁忙, 导致 CPU 使用率过高(运行和等待 CPU 时间片的进程数, 原则上 1 核的 CPU 的运行队列不要超过 2, 整个系统的运行队列不能超过总核数的 2 倍, 否则代表系统压力过大)
b: 表示阻塞的进程(等待资源的进程数, 比如正在等待磁盘 I/O, 网络 I/O 等.)
swpd : 虚拟内存已使用的大小, 如果大于 0, 表示你的机器物理内存不足了, 如果不是程序内存泄露的原因, 那么你该升级内存了或者把耗内存的任务迁移到其他机器.
cs: 每秒上下文切换次数
us: 用户 CPU 时间
sy: 系统 CPU 时间, 如果太高, 表示系统调用时间长, 例如是 IO 操作频繁.
id : 空闲 CPU 时间
wt : 等待 IO CPU 时间
free : 空闲的物理内存的大小
buff: 设备和设备之间的缓冲 . Linux/Unix 系统是用来存储, 目录里面有什么内容, 权限等的缓存
cache : CPU 和内存之间的缓冲
si: 每秒从磁盘读入虚拟内存的大小, 如果这个值大于 0, 表示物理内存不够用或者内存泄露了, 要查找耗内存进程解决掉.
so : 每秒虚拟内存写入磁盘的大小, 如果这个值大于 0, 同上.
bi : 块设备每秒接收的块数量, 这里的块设备是指系统上所有的磁盘和其他块设备, 默认块大小是 1024byte
bo: 块设备每秒发送的块数量, 例如我们读取文件, bo 就要大于 0.bi 和 bo 一般都要接近 0, 不然就是 IO 过于频繁, 需要调整.
wa : 等待 IO CPU 时间.
us: 用户 CPU 时间
sy: 系统 CPU 时间, 如果太高, 表示系统调用时间长, 例如是 IO 操作频繁.
id : 空闲 CPU 时间, 一般来说, id + us + sy = 100, 一般我认为 id 是空闲 CPU 使用率, us 是用户 CPU 使用率, sy 是系统 CPU 使用率.
重点参数 r,b,swpd,free,buff,cache,si,so,bi,bo
sar 命令
sar 分析包括: 文件的读写情况, 系统调用的使用情况, 磁盘 I/O,CPU 效率, 内存使用状况, 进程活动及 IPC 有关的活动等
命令格式: sar [options] [-A] [-o file] t [n]
其中:
t: 采样间隔, n 为采样次数, 默认值是 1
-o file: 表示将命令结果以二进制格式存放在文件中, file 是文件名.
options 为命令行选项, sar 命令常用选项如下:
-A: 所有报告的总和
-u: 输出 CPU 使用情况的统计信息
-v: 输出 inode, 文件和其他内核表的统计信息
-d: 输出每一个块设备的活动信息
-r: 输出内存和交换空间的统计信息
-b: 显示 I/O 和传送速率的统计信息
-a: 文件读写情况
-c: 输出进程统计信息, 每秒创建的进程数
-R: 输出内存页面的统计信息
-y: 终端设备活动情况
-w: 输出系统交换活动信息
sar -u 2 5: 输出 CPU 使用情况和统计信息
输出说明:
CPU:all 表示统计信息为所有 CPU 的平均值.
%user: 显示在用户级别 (application) 运行使用 CPU 总时间的百分比.
%nice: 显示在用户级别, 用于 nice 操作, 所占用 CPU 总时间的百分比.
%system: 在核心级别 (kernel) 运行所使用 CPU 总时间的百分比.
%iowait: 显示用于等待 I/O 操作占用 CPU 总时间的百分比.
%steal: 管理程序 (hypervisor) 为另一个虚拟进程提供服务而等待虚拟 CPU 的百分比.
%idle: 显示 CPU 空闲时间占用 CPU 总时间的百分比.
若 %iowait 的值过高, 表示硬盘存在 I/O 瓶颈
若 %idle 的值高但系统响应慢时, 有可能是 CPU 等待分配内存, 此时应加大内存容量
若 %idle 的值持续低于 1, 则系统的 CPU 处理能力相对较低, 表明系统中最需要解决的资源是 CPU
mpstat 命令
查看所有 CPU 核信息: mpstat -P ALL 2
pidstat 命令
每个进程使用 CPU 的用量分解信息: pidstat -u 1 -p 进程编号
内存性能评估
free 命令
free
free -m 以 M 为单位
free -g 以 G 为单位
pidstat 命令
pidstat -p 进程号 -r 采样间隔秒数
vmstat 命令
- vmstat 2 3
- [[email protected] ~]# vmstat 2 3
- procs ----memory---- -swap- --io-- -system- --CPU--
- r b swpd free buff cache si so bi bo in cs us sy id wa st
- 0 0 0 162240 8304 67032 0 0 13 21 1007 23 0 1 98 0 0
- 0 0 0 162240 8304 67032 0 0 1 0 1010 20 0 1 100 0 0
- 0 0 0 162240 8304 67032 0 0 1 1 1009 18 0 1 99 0 0
说明:
memory
swpd 列表示切换到内存交换区的内存数量(以 k 为单位). 如果 swpd 的值不为 0, 或者比较大, 只要 si,so 的值长期为 0, 这种情况下一般不用担心, 不会影响系统性能.
free 列表示当前空闲的物理内存数量(以 k 为单位)
buff 列表示 buffers cache 的内存数量, 一般对块设备的读写才需要缓冲.
cache 列表示 page cached 的内存数量, 一般作为文件系统 cached, 频繁访问的文件都会被 cached, 如果 cache 值较大, 说明 cached 的文件数较多, 如果此时 IO 中 bi 比较小, 说明文件系统效率比较好.
swap
si 列表示由磁盘调入内存, 也就是内存进入内存交换区的数量.
so 列表示由内存调入磁盘, 也就是内存交换区进入内存的数量.
一般情况下, si,so 的值都为 0, 如果 si,so 的值长期不为 0, 则表示系统内存不足. 需要增加系统内存.
磁盘 I/O 性能评估
磁盘存储基础
熟悉 RAID 存储方式, 可以根据应用的不同, 选择不同的 RAID 方式.
尽可能用内存的读写代替直接磁盘 I/O, 使频繁访问的文件或数据放入内存中进行操作处理, 因为内存读写操作比直接磁盘读写的效率要高千倍.
将经常进行读写的文件与长期不变的文件独立出来, 分别放置到不同的磁盘设备上.
对于写操作频繁的数据, 可以考虑使用裸设备代替文件系统.
使用裸设备的优点有:
数据可以直接读写, 不需要经过操作系统级的缓存, 节省了内存资源, 避免了内存资源争用.
避免了文件系统级的维护开销, 比如文件系统需要维护超级块, I-node 等.
避免了操作系统的 cache 预读功能, 减少了 I/O 请求.
使用裸设备的缺点是:
数据管理, 空间管理不灵活, 需要很专业的人来操作.
iostat 命令
利用 iostat 评估磁盘
- [[email protected] ~]# iostat -d 2 3
- Linux 2.6.9-42.ELsmp (webserver) 12/01/2008 _i686_ (8 CPU)
- Device: tps Blk_read/s Blk_wrtn/s Blk_read Blk_wrtn
- sda 1.87 2.58 114.12 6479462 286537372
- Device: tps Blk_read/s Blk_wrtn/s Blk_read Blk_wrtn
- sda 0.00 0.00 0.00 0 0
- Device: tps Blk_read/s Blk_wrtn/s Blk_read Blk_wrtn
- sda 1.00 0.00 12.00 0 24
对上面每项的输出解释如下:
Blk_read/s 表示每秒读取的数据块数.
Blk_wrtn/s 表示每秒写入的数据块数.
Blk_read 表示读取的所有块数.
Blk_wrtn 表示写入的所有块数.
可以通过 Blk_read/s 和 Blk_wrtn/s 的值对磁盘的读写性能有一个基本的了解, 如果 Blk_wrtn/s 值很大, 表示磁盘的写操作很频繁, 可以考虑优化磁盘或者优化程序, 如果 Blk_read/s 值很大, 表示磁盘直接读取操作很多, 可以将读取的数据放入内存中进行操作.
对于这两个选项的值没有一个固定的大小, 根据系统应用的不同, 会有不同的值, 但是有一个规则还是可以遵循的: 长期的, 超大的数据读写, 肯定是不正常的, 这种情况一定会影响系统性能.
sar 命令
利用 sar 评估磁盘性能
通过 "sar -d" 组合, 可以对系统的磁盘 IO 做一个基本的统计, 请看下面的一个输出:
- [[email protected] ~]# sar -d 2 3
- Linux 2.6.9-42.ELsmp (webserver) 11/30/2008 _i686_ (8 CPU)
- 11:09:33 PM DEV tps rd_sec/s wr_sec/s avgrq-sz avgqu-sz await svctm %util
- 11:09:35 PM dev8-0 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00
- 11:09:35 PM DEV tps rd_sec/s wr_sec/s avgrq-sz avgqu-sz await svctm %util
- 11:09:37 PM dev8-0 1.00 0.00 12.00 12.00 0.00 0.00 0.00 0.00
- 11:09:37 PM DEV tps rd_sec/s wr_sec/s avgrq-sz avgqu-sz await svctm %util
- 11:09:39 PM dev8-0 1.99 0.00 47.76 24.00 0.00 0.50 0.25 0.05
- Average: DEV tps rd_sec/s wr_sec/s avgrq-sz avgqu-sz await svctm %util
- Average: dev8-0 1.00 0.00 19.97 20.00 0.00 0.33 0.17 0.02
需要关注的几个参数含义:
await 表示平均每次设备 I/O 操作的等待时间(以毫秒为单位).
svctm 表示平均每次设备 I/O 操作的服务时间(以毫秒为单位).
%util 表示一秒中有百分之几的时间用于 I/O 操作.
对以磁盘 IO 性能, 一般有如下评判标准:
正常情况下 svctm 应该是小于 await 值的, 而 svctm 的大小和磁盘性能有关, CPU, 内存的负荷也会对 svctm 值造成影响, 过多的请求也会间接的导致 svctm 值的增加.
await 值的大小一般取决与 svctm 的值和 I/O 队列长度以及 I/O 请求模式, 如果 svctm 的值与 await 很接近, 表示几乎没有 I/O 等待, 磁盘性能很好, 如果 await 的值远高于 svctm 的值, 则表示 I/O 队列等待太长, 系统上运行的应用程序将变慢, 此时可以通过更换更快的硬盘来解决问题.
%util 项的值也是衡量磁盘 I/O 的一个重要指标, 如果 %util 接近 100%, 表示磁盘产生的 I/O 请求太多, I/O 系统已经满负荷的在工作, 该磁盘可能存在瓶颈. 长期下去, 势必影响系统的性能, 可以通过优化程序或者通过更换更高, 更快的磁盘来解决此问题.
网络性能评估
(1)通过 ping 命令检测网络的连通性
(2)通过 netstat -i 组合检测网络接口状况
(3)通过 netstat -r 组合检测系统的路由表信息
(4)通过 sar -n 组合显示系统的网络运行状态
(5)通过 ifstat 命令
来源: http://www.bubuko.com/infodetail-3394686.html