高级 Linux 命令精通指南--资源管理3_第1页
高级 Linux 命令精通指南--资源管理3_第2页
高级 Linux 命令精通指南--资源管理3_第3页
高级 Linux 命令精通指南--资源管理3_第4页
高级 Linux 命令精通指南--资源管理3_第5页
已阅读5页,还剩15页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

在此部分中 了解用于监视物理组件的高级在此部分中 了解用于监视物理组件的高级 Linux 命令命令 Linux 系统由若干主要物理组件组成 如 CPU 内存 网卡和存储设备 要有效地管理 Linux 环境 您 应该能够以合理的精度测量这些资源的各种指标 每个组件处理多少资源 是否存在瓶颈等 在本系列的其他部分中 您已经学习了处于宏级别的用于测量指标的一些命令 但在此部分中 您将了解 专门用于监视物理组件的高级 Linux 命令 具体而言 您将了解以下类别的命令 组件命令 内存free vmstat mpstat iostat sar CPUvmstat mpstat iostat sar I Ovmstat mpstat iostat sar 进程ipcs ipcrm 正如您所见 某些命令出现在多个类别中 这是由于这些命令可以执行很多任务 某些命令比较适合于某 些组件 例如 iostat 适合 I O 但是您应该了解它们工作的差别并使用您更熟悉的命令 在多数情况下 单个命令可能对于了解实际发生的情况没什么用 要获取所需的信息 您应该了解多个命 令 free 一个常见的问题是 我的应用程序和各种服务器 用户和系统进程正在使用多少内存 或者 现在有多少内 存可用 如果正在运行的进程使用的内存大于可用 RAM 则需要将这些进程移到交换区 因此 一个补 充问题是 正在使用多少交换区空间 free 命令将回答所有这些问题 而且 一个非常有用的选项 m 可以显示可用内存 以 MB 为单位 free m total used free shared buffers cached Mem 1772 1654 117 0 18 618 buffers cache 1017 754 Swap 1983 1065 918 以上输出显示系统具有 1 772 MB 的 RAM 已使用 1 654 MB 还有 117 MB 内存可用 第二行显示 在物理内存中缓冲区和缓存大小的更改 第三行显示交换区利用情况 要以 KB 或 GB 为单位显示以上内容 请将 m 选项分别替换为 k 或 g 使用 b 选项将以字节为 单位 free b total used free shared buffers cached Mem 1858129920 1724039168 134090752 0 18640896 643194880 buffers cache 1062203392 795926528 Swap 2080366592 1116721152 963645440 t 选项在输出底部显示总数 物理内存和交换区的总和 free m t total used free shared buffers cached Mem 1772 1644 127 0 16 613 buffers cache 1014 757 Swap 1983 1065 918 Total 3756 2709 1046 尽管 free 不显示百分比 但是我们可以提取并格式化输出的特定部分 将已使用的内存仅显示为总数的 百分比 free m grep Mem awk print 3 2 100 98 7077 这在具体数据非常重要的 shell 脚本中非常方便 例如 您可能希望在可用内存的百分比低于特定阈值时 触发一个警报 同样 要发现已使用交换区空间的百分比 您可以发出 free m grep i Swap awk print 3 2 100 可以使用 free 查看应用程序施加的内存负载 例如 启动备份应用程序之前检查可用内存 启动之后立 即检查可用内存 两者之差就是备份应用程序消耗的内存 针对针对 Oracle 用户的用法用户的用法 那么 您如何使用该命令管理运行 Oracle 环境的 Linux 服务器呢 性能问题的一个最常见原因是内存 不足 从而导致系统临时将内存区域 交换 到磁盘中 某种程度的交换可能是必然的 但是交换过多则表 示可用内存不足 而现在 您可以使用 free 获得可用内存信息 紧接着使用 sar 命令 稍后介绍 检查内存和交换区消耗 的历史趋势 如果交换区的使用是暂时的 则可能出现一次高峰 但是如果明确要经过一段时间 则应注 意 持续的内存过载可能有几个明显且可能的疑点 较大的 SGA 高于可用内存 在 PGA 上分配了大量内存 某些进程出现泄露内存的错误 对于第一种情况 应确保 SGA 低于可用内存 根据经验 对 SGA 使用大约物理内存的 40 当然 应根据具体情况定义该参数 对于第二种情况 应尝试减少查询中的大量缓冲区分配 对于第三种情况 应使用 ps 命令 在本系列的之前部分中介绍过 确定可能泄露内存的具体进程 ipcs 当某个进程运行时 它会夺取 共享内存 该进程可能拥有一个或很多个共享内存段 进程之间彼此 进 程间通信 或 IPC 发送消息并使用信号 要显示有关共享内存段 IPC 消息队列以及信号的信息 可以 使用一个命令 ipcs m 选项非常受欢迎 它显示共享内存段 ipcs m Shared Memory Segments key shmid owner perms bytes nattch status 0 xc4145514 2031618 oracle 660 4096 0 0 x00000000 3670019 oracle 660 8388608 108 0 x00000000 327684 oracle 600 196608 2 dest 0 x00000000 360453 oracle 600 196608 2 dest 0 x00000000 393222 oracle 600 196608 2 dest 0 x00000000 425991 oracle 600 196608 2 dest 0 x00000000 3702792 oracle 660 926941184 108 0 x00000000 491529 oracle 600 196608 2 dest 0 x49d1a288 3735562 oracle 660 140509184 108 0 x00000000 557067 oracle 600 196608 2 dest 0 x00000000 1081356 oracle 600 196608 2 dest 0 x00000000 983053 oracle 600 196608 2 dest 0 x00000000 1835023 oracle 600 196608 2 dest 该输出表明服务器正在运行 Oracle 软件 显示了各种共享内存段 每个共享内存段由显示在 shmid 列 下面的共享内存 ID 唯一标识 稍后 您将看到如何使用该列值 显然 owner 显示内存段的所有 者 perms 列显示权限 与 unix 权限相同 bytes 显示字节大小 u 选项显示一个非常快速的摘要 ipcs mu Shared Memory Status segments allocated 25 pages allocated 264305 pages resident 101682 pages swapped 100667 Swap performance 0 attempts 0 successes l 选项显示限定值 相对于当前值 ipcs ml Shared Memory Limits max number of segments 4096 max seg size kbytes 907290 max total shared memory kbytes 13115392 min seg size bytes 1 如果您看到当前值处于或接近限定值 则应该考虑提高限定值 可以使用 shmid 值获取具体共享内存段的详细图片 i 选项可以完成该操作 下面是查看 shmid 3702792 详细信息的方法 ipcs m i 3702792 Shared memory Segment shmid 3702792 uid 500 gid 502 cuid 500 cgid 502 mode 0660 access perms 0660 bytes 926941184 lpid 12225 cpid 27169 nattch 113 att time Fri Dec 19 23 34 10 2008 det time Fri Dec 19 23 34 10 2008 change time Sun Dec 7 05 03 10 2008 稍后 本文将采用一个示例向您介绍如何解释以上输出 s 显示系统中的信号 ipcs s Semaphore Arrays key semid owner perms nsems 0 x313f2eb8 1146880 oracle 660 104 0 x0b776504 2326529 oracle 660 154 and so on 它显示一些有价值的数据 它显示 ID 为 1146880 的信号数组具有 104 个信号 另一个数组具有 154 个信号 如果您增加信号 则总值必须低于内核参数 semmax 定义的上限 安装 Oracle 数据库软件 时 预安装的检查程序将检查 semmax 的设置 之后 当系统达到稳定状态时 您可以检查实际的利用 情况 然后相应地调整内核值 针对针对 Oracle 用户的用法用户的用法 如何查看 Oracle 数据库实例使用的共享内存段 为此 请使用 oradebug 命令 首先以 sysdba 身份 连接到数据库 sqlplus as sysdba 在 SQL 中 使用 oradebug 命令 如下所示 SQL oradebug setmypid Statement processed SQL oradebug ipc Information written to trace file 要查找跟踪文件的名称 执行以下命令 SQL oradebug TRACEFILE NAME opt oracle diag rdbms odba112 ODBA112 trace ODBA112 ora 22544 trc 现在 如果打开该跟踪文件 将会看到共享内存 ID 下面是该文件的节选 Area 0 Fixed Size containing Subareas 0 0 Total size 000000000014613c Minimum Subarea size 00000000 Area Subarea Shmid Stable Addr Actual Addr 0 0 1723597017235970 0 x00000020000000 0 x00000020000000 Subarea size Segment size 0000000000147000 000000002c600000 Area 1 Variable Size containing Subareas 4 4 Total size 000000002bc00000 Minimum Subarea size 00400000 Area Subarea Shmid Stable Addr Actual Addr 1 4 1723597017235970 0 x00000020800000 0 x00000020800000 Subarea size Segment size 000000002bc00000 000000002c600000 Area 2 Redo Buffers containing Subareas 1 1 Total size 0000000000522000 Minimum Subarea size 00000000 Area Subarea Shmid Stable Addr Actual Addr 2 1 1723597017235970 0 x00000020147000 0 x00000020147000 Subarea size Segment size 0000000000522000 000000002c600000 and so on 共享内存 id 以红色粗体显示 可以使用该共享内存 ID 来获取共享内存的详细信息 ipcs m i 1723597017235970 另一个有用的观察是 lpid 的值 最后一个接触共享内存段的进程的进程 ID 要展示该属性的值 使用 SQL Plus 从另一个会话连接到该实例 sqlplus as sysdba 在该会话中 查找服务器进程的 PID SQL select spid from v process 2 where addr select paddr from v session 3 where sid 4 select sid from v mystat where rownum 2 5 SPID 13224 现在 针对同一共享内存段再次执行 ipcs 命令 ipcs m i 17235970 Shared memory Segment shmid 17235970 uid 500 gid 502 cuid 500 cgid 502 mode 0660 access perms 0660 bytes 140509184 lpid 13224 cpid 27169 nattch 113 att time Fri Dec 19 23 38 09 2008 det time Fri Dec 19 23 38 09 2008 change time Sun Dec 7 05 03 10 2008 注意 lpid 的值已经从原来的值 12225 更改为 13224 lpid 显示最后一个接触共享内存段的进程的 PID 该命令自身的价值不大 下一个命令 ipcrm 允许您基于输出采取操作 正如您将在下一部分所见 ipcrm 既然您已经标识了共享内存和其他 IPC 指标 那么使用它们做什么呢 之前您看到过一些用法 如标识 Oracle 使用的共享内存 确保为共享内存设置了内核参数等等 另一个常见的应用是删除共享内存 IPC 消息队列或信号数组 要删除某个共享内存段 注意 ipcs 命令输出中它的 shmid 然后使用 m 选项删除该段 要删除 ID 为 3735562 的段 使用 ipcrm m 3735562 这将删除该共享内存 还可以使用该命令删除信号和 IPC 消息队列 使用 s 和 q 参数 针对针对 Oracle 用户的用法用户的用法 有时当您关闭数据库实例时 Linux 内核可能未完全清除共享内存段 留下的共享内存没有什么用处 但 它会占用系统资源 从而使可用于其他进程的内存更少 这种情况下 可以检查 oracle 用户所拥有的任 何延迟共享内存段 然后删除它们 如果有这样的段 使用 ipcrm 命令 vmstat vmstat 是最早用于显示所有与内存和进程相关信息的命令 调用时 该命令会持续运行并发布其信息 它有两个参数 vmstat 是两次运行之间的时间间隔 以秒为单位 是 vmstat 重复的次数 下面是当我们希 望 vmstat 每隔 5 秒运行一次并在第 10 次运行后停止时的示例 每 5 秒之后都会输出一行并显示此 时的统计信息 vmstat 5 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 1087032 132500 15260 622488 89 19 9 3 0 0 4 10 82 5 0 0 1087032 132500 15284 622464 0 0 230 151 1095 858 1 0 98 1 0 0 1087032 132484 15300 622448 0 0 317 79 1088 905 1 0 98 0 shows up to 10 times 该输出显示有关系统资源的大量信息 我们来详细介绍它们 procs显示进程数 r等待运行的进程 系统上的负载越多 等待运行 CPU 周期的进程数量越多 b不可中断睡眠的进程 也称为 被阻塞 的进程 这些进程最有可能等待 I O 但也可能等待其他事 情 有时 还存在另外一列 该列位于标题 w 下 显示可以运行但已经交换到交换区域中的进程数 b 下的数值应接近于 0 如果 w 下的数值很高 可能需要更多内存 下表显示了内存指标 swpd虚拟内存或交换内存的数量 以 KB 为单位 free可用物理内存的数量 以 KB 为单位 buff用作缓冲区的内存数量 以 KB 为单位 cache用作缓存的物理内存数量 以 KB 为单位 缓冲区内存用来存储文件元数据 如 i nodes 以及原始块设备中的数据 缓存内存用于文件数据本身 下表显示了交换活动 si将内存从磁盘交换回物理 RAM 的速率 以 KB 秒为单位 so将内存从物理 RAM 交换到磁盘的速率 以 KB 秒为单位 下表显示了 I O 活动 bi系统向块设备发送数据的速率 以块 秒为单位 bo系统从块设备中读取数据的速率 以块 秒为单位 下表显示了系统相关活动 in系统每秒接收到的中断数 cs在进程空间中切换上下文的速率 以数量 秒为单位 最后这张表可能用得最多 有关 CPU 负载的信息 us显示花费在用户进程中的 CPU 百分比 Oracle 进程属于这一类 sy系统进程 如所有根进程 使用的 CPU 百分比 id可用 CPU 百分比 wa花费在 等待 I O 上的百分比 让我们看一看如何解释这些值 输出的第一行是自从系统重新启动以来所有指标的平均值 因此 忽略该 行 因为它并不显示当前状态 其他行显示实时指标 理想情况下 等待或阻塞的进程数量 位于 procs 标题下 应该为 0 或接近于 0 如果数值较高 则 表示系统没有足够的资源 如 CPU 内存或 I O 诊断性能问题时该信息非常有用 swap 下的数据表明交换是否过多 如果交换过多 则表明物理内存可能不足 应该减少内存需求或增加 物理 RAM io 下的数据表示往返于磁盘的数据流 这表明正在进行的磁盘活动量 这并不一定表明存在问题 如果 您看到 proc 和 b 列 正在阻塞的进程 下有较大的数值和较高的 I O 则可能出现了严重的 I O 争用 问题 cpu 标题下是最有用的信息 id 列显示空闲 CPU 如果用 100 减去该数值 则会得到繁忙 CPU 的 百分比 还记得本系列的另一个部分中描述的 top 命令吗 该命令还显示 CPU 的空闲百分比数值 区 别是 top 显示每个 CPU 的空闲百分比 而 vmstat 显示所有 CPU 的空闲百分比 vmstat 命令还显示 CPU 使用情况的划分 Linux 系统使用多少 用户进程使用多少以及等待 I O 使用 多少 通过该划分 您可以确定 CPU 消耗的组成 如果系统 CPU 负载较高 能表明正在运行某个根 进程 如备份 吗 一段时间内的系统负载应该一致 如果系统显示较高的数值 请使用 top 命令确定占有 CPU 的系统进 程 针对针对 Oracle 用户的用法用户的用法 Oracle 进程 后台进程和服务器进程 和用户进程 sqlplus apache 等 位于 us 下 如果该数值较 高 则使用 top 来确定进程 如果 wa 列显示较高的数值 则表明 I O 系统无法跟上读取或写入的数量 有时这可能是因为在数据库中进行大量更新 从而导致日志切换以及后续的大量存档进程 但是 如果它 持续显示一个较大的数值 则表明可能存在 I O 瓶颈 Oracle 数据库中的 I O 瓶颈可能会造成严重的问题 与性能问题不同 慢速 I O 可能导致控制文件写入 速度缓慢 这会导致等待获取控制文件的进程加入队列 如果等待超过 900 秒且等待者是关键进程 如 LGWR 则会关闭数据库实例 如果您看到很多交换 可能是 SGA 的太大 以至于物理内存容纳不下 应该减小 SGA 大小或增加物 理内存 mpstat 另一个用于获取 CPU 相关统计信息的有用的命令是 mpstat 下面是一个示例输出 mpstat P ALL 5 2 Linux 2 6 9 67 ELsmp oraclerac1 12 20 2008 10 42 38 PM CPU user nice system iowait irq soft idle intr s 10 42 43 PM all 6 89 0 00 44 76 0 10 0 10 0 10 48 05 1121 60 10 42 43 PM 0 9 20 0 00 49 00 0 00 0 00 0 20 41 60 413 00 10 42 43 PM 1 4 60 0 00 40 60 0 00 0 20 0 20 54 60 708 40 10 42 43 PM CPU user nice system iowait irq soft idle intr s 10 42 48 PM all 7 60 0 00 45 30 0 30 0 00 0 10 46 70 1195 01 10 42 48 PM 0 4 19 0 00 2 20 0 40 0 00 0 00 93 21 1034 53 10 42 48 PM 1 10 78 0 00 88 22 0 40 0 00 0 00 0 20 160 48 Average CPU user nice system iowait irq soft idle intr s Average all 7 25 0 00 45 03 0 20 0 05 0 10 47 38 1158 34 Average 0 6 69 0 00 25 57 0 20 0 00 0 10 67 43 724 08 Average 1 7 69 0 00 64 44 0 20 0 10 0 10 27 37 434 17 它显示了系统中 CPU 的各种统计信息 P ALL 选项指示该命令显示所有 CPU 的统计信息 而不只是 特定 CPU 的统计信息 参数 5 2 指示该命令每隔 5 秒运行一次 共运行 2 次 以上输出首先显示了 所有 CPU 的合计指标 然后显示了每个 CPU 各自的指标 最后 在结尾处显示所有 CPU 的平均值 让我们看一看这些列值的含义 user表示处理用户进程所使用 CPU 的百分比 用户进程是用于应用程序 如 Oracle 数据库 的 非内核进程 在本示例输出中 用户 CPU 百分比非常低 nice表示使用 nice 命令对进程进行降级时 CPU 的百分比 在之前的部分中已经对 nice 命令进 行了介绍 简单来说 nice 命令更改进程的优先级 system表示内核进程使用的 CPU 百分比 iowait 表示等待进行 I O 所使用的 CPU 时间百分比 irq表示用于处理系统中断的 CPU 百分比 soft表示用于软件中断的 CPU 百分比 idle显示 CPU 的空闲时间 intr s显示每秒 CPU 接收的中断总数 当您拥有前面所述的 vmstat 时 您可能想知道 mpstat 命令的作用 差别很大 mpstat 可以显示每个 处理器的统计 而 vmstat 显示所有处理器的统计 因此 编写糟糕的应用程序 不使用多线程体系结构 可能会运行在一个多处理器机器上 而不使用所有处理器 从而导致一个 CPU 过载 而其他 CPU 却 很空闲 通过 mpstat 可以轻松诊断这些类型的问题 针对针对 Oracle 用户的用法用户的用法 与 vmstat 相似 mpstat 命令还产生与 CPU 有关的统计信息 因此所有与 CPU 问题有关的讨论也都 适用于 mpstat 当您看到较低的 idle 数字时 您知道出现了 CPU 不足的问题 当您看到较高的 iowait 数字时 您知道在当前负载下 I O 子系统出现了某些问题 该信息对于解决 Oracle 数据库性 能问题非常方便 iostat 性能评估的一个主要部分就是磁盘性能 iostat 命令提供了存储接口的性能指标 iostat Linux 2 6 9 55 0 9 ELlargesmp prolin3 12 27 2008 avg cpu user nice sys iowait idle 15 71 0 00 1 07 3 30 79 91 Device tps Blk read s Blk wrtn s Blk read Blk wrtn cciss c0d0 4 85 34 82 130 69 307949274 1155708619 cciss c0d0p1 0 08 0 21 0 00 1897036 3659 cciss c0d0p2 18 11 34 61 130 69 306051650 1155700792 cciss c0d1 0 96 13 32 19 75 117780303 174676304 cciss c0d1p1 2 67 13 32 19 75 117780007 174676288 sda 0 00 0 00 0 00 184 0 sdb 1 03 5 94 18 84 52490104 166623534 sdc 0 00 0 00 0 00 184 0 sdd 1 74 38 19 11 49 337697496 101649200 sde 0 00 0 00 0 00 184 0 sdf 1 51 34 90 6 80 308638992 60159368 sdg 0 00 0 00 0 00 184 0 and so on 输出的开始部分显示了可用 CPU 和 I O 等待时间等指标 与您在 mpstat 命令中看到的相同 输出的下一部分显示对系统上每个磁盘设备非常重要的指标 让我们看一看这些列的含义 Device设备名称 tps 每秒的传输数量 例如 每秒的 I O 操作数 注 这只是 I O 操作的数量 每个操作可能 非常大 也可能非常小 Blk read s 每秒从该设备读取的块数 通常 块的大小为 512 字节 这是一个磁盘利用率较好的值 Blk wrtn s 每秒写入该设备的块数 Blk read 到目前为止从该设备读取的块数 注意 这并不是正在发生的情况 很多块已经从该设备读 取 可能现在什么也没有读取 观察一段时间 看是否有变化 Blk wrtn写入该设备的块数 在一个拥有很多设备的系统中 输出可能需要通过屏幕多次滚动 这使得某些内容较难检查 尤其当您 查找特定设备时更是如此 可以通过将该设备作为参数传递只获得特定设备的指标 iostat sdaj Linux 2 6 9 55 0 9 ELlargesmp prolin3 12 27 2008 avg cpu user nice sys iowait idle 15 71 0 00 1 07 3 30 79 91 Device tps Blk read s Blk wrtn s Blk read Blk wrtn sdaj 1 58 31 93 10 65 282355456 94172401 开始部分显示的 CPU 指标可能没什么用处 要取消在输出开始部分显示的与 CPU 有关的统计信息 使用 d 选项 可以将可选参数放在结尾处 让 iostat 以固定的时间间隔显示设备统计信息 要每隔 5 秒获取一次该设 备的统计信息 共 10 次 执行以下命令 iostat d sdaj 5 10 You can display the stats in kilobytes instead of just bytes using the k option iostat k d sdaj Linux 2 6 9 55 0 9 ELlargesmp prolin3 12 27 2008 Device tps kB read s kB wrtn s kB read kB wrtn sdaj 1 58 15 96 5 32 141176880 47085232 尽管以上输出可能非常有帮助 但很多信息并不容易显示 例如 磁盘问题的一个主要原因是磁盘服务时 间 即 磁盘将数据送达请求该数据的进程的时间 要获得该级别的指标 我们需要使用 x 选项获得磁 盘的 扩展 统计信息 iostat x sdaj Linux 2 6 9 55 0 9 ELlargesmp prolin3 12 27 2008 avg cpu user nice sys iowait idle 15 71 0 00 1 07 3 30 79 91 Device rrqm s wrqm s r s w s rsec s wsec s rkB s wkB s avgrq sz avgqu sz await svctm util sdaj 0 00 0 00 1 07 0 51 31 93 10 65 15 96 5 32 27 01 0 01 6 26 6 00 0 95 让我们看一看这些列的含义 Device设备名称 rrqm s每秒合并的读请求数 磁盘请求排成队列 只要可能 内核就会尝试将多个请求合并成一个 请求 该指标测量读取传输的合并请求数 wrqm s 与读取类似 这是合并的写请求数 r s 每秒向该设备发出的读请求数 w s 同样 它是每秒向该设备发出的写请求数 rsec s 每秒从该设备读取的扇区数 wsec s 每秒写入该设备的扇区数 rkB s 每秒从该设备读取的数据 以 KB 秒为单位 wkB s写入该设备的数据 以 kb s 为单位 avgrq sz读请求的平均大小 扇区数 avgqu sz 该设备的请求队列的平均长度 await 设备发出 I O 请求经过的平均时间 以毫秒为单位 这是服务时间与队列中的等待时间的总 和 svctm 设备的平均服务时间 以毫秒为单位 util设备的带宽利用率 如果该值接近于 100 则表明该设备已饱和 它包含大量信息 如何有效地使用这些信息是一个挑战 下一部分介绍如何使用输出 用法用法 可以使用这些命令的组合从输出中获取一些有意义的信息 记住 在从进程获取请求时磁盘速度可能很慢 磁盘中的数据到达队列所花费的时间称为服务时间 如果您想找出服务时间最长的磁盘 执行以下命令 iostat x sort nrk13 sdat 0 00 0 00 0 00 0 00 0 00 0 00 0 00 0 00 18 80 0 00 64 06 64 05 0 00 sdv 0 00 0 00 0 00 0 00 0 00 0 00 0 00 0 00 17 16 0 00 18 03 17 64 0 00 sdak 0 00 0 00 0 00 0 14 0 00 1 11 0 00 0 55 8 02 0 00 17 00 17 00 0 24 sdm 0 00 0 00 0 00 0 19 0 01 1 52 0 01 0 76 8 06 0 00 16 78 16 78 0 32 and so on 这表明磁盘 sdat 的服务时间最长 64 05 毫秒 为什么时间这么长呢 可能性很多 但最可能的原因 有三个 1 该磁盘获取了大量请求 以至于平均服务时间长 2 该磁盘利用已移到可能的最大带宽 3 该磁盘原本速度就很慢 查看输出 我们看到读取数 秒和写入数 秒为 0 00 几乎没有发生任何事件 因此我们可以排除第一种 可能性 利用率也为 0 00 最后一列 因此我们可以排除第二种可能性 这就剩下了第三种可能性 但得出该磁盘原本速度慢的结论之前 我们需要更加仔细地观察该磁盘 我们可以只检查该磁盘 每隔 5 秒 检查一次 共 10 次 iostat x sdat 5 10 如果输出显示相同的平均服务时间 读取速率和利用率 则可以断定最有可能是第三种情况 如果这些数 值发生了变化 我们可以获取更详细的线索来了解该设备服务时间较长的原因 同样 可以对读取速率列进行排序 以显示处于恒定读取速率下的磁盘 iostat x sort nrk6 sdj 0 00 0 00 1 86 0 61 56 78 12 80 28 39 6 40 28 22 0 03 10 69 9 99 2 46 sdah 0 00 0 00 1 66 0 52 50 54 10 94 25 27 5 47 28 17 0 02 10 69 10 00 2 18 sdd 0 00 0 00 1 26 0 48 38 18 11 49 19 09 5 75 28 48 0 01 3 57 3 52 0 61 and so on 该信息可以帮助您查找 热 磁盘 即进行很多读取或写入的磁盘 如果该磁盘的确 热 则应确定 热 的原 因 可能是该磁盘上定义的某个文件系统正在进行大量读取操作 如果是这种情况 则应考虑将该文件系 统在多个磁盘之间进行条带化 以分发负载 从而最大程度地减小某个特定磁盘 热 的可能性 sar 通过前面的讨论 我们发现 获取实时指标并不是唯一重要的事情 历史趋势也同等重要 此外 考虑这样一种情况 有人多次报告某个性能问题 但当您进行调查时发现一切都回归正常 如果没 有当时的任何具体数据 则很难诊断过去出现的性能问题 最后 您将希望检查过去几天的性能数据 以 决定某些设置或进行调整 sar 实用程序实现了这个目标 sar 代表 System Activity Recorder 它在一个特殊的位置 var log sa 目录 记录 Linux 系统的主要组件 CPU 内存 磁盘 网络等 的指标 每天的数据记录在一个名为 sa 的文件中 其中 是每月中的第 nn 天 两位数字 例如 文件 sa27 包含该月第 27 日的数据 可以通过 sar 命令查询该数据 使用 sar 的最简单方法是不带任何参数或选项 示例如下 sar Linux 2 6 9 55 0 9 ELlargesmp prolin3 12 27 2008 12 00 01 AM CPU user nice system iowait idle 12 10 01 AM all 14 99 0 00 1 27 2 85 80 89 12 20 01 AM all 14 97 0 00 1 20 2 70 81 13 12 30 01 AM all 15 80 0 00 1 39 3 00 79 81 12 40 01 AM all 10 26 0 00 1 25 3 55 84 93 and so on 输出显示在 10 分钟的间隔内收集的与 CPU 有关的指标 这些列的含义如下 CPUCPU 标识符 all 表示所有 CPU user用户进程使用的 CPU 百分比 Oracle 进程属于这一类 nice在 nice 优先级下执行的 CPU 利用率百分比 system执行系统进程的 CPU 百分比 iowait等待进行 I O 操作的 CPU 百分比 idle等待工作的 CPU 空闲百分比 从以上输出 您可能以为系统已经得到了很好的平衡 但实际上是严重利用不足 从较高的空闲百分比可 以看出 进一步查看输出 我们看到以下内容 continued from above 03 00 01 AM CPU user nice system iowait idle 03 10 01 AM all 44 99 0 00 1 27 2 85 40 89 03 20 01 AM all 44 97 0 00 1 20 2 70 41 13 03 30 01 AM all 45 80 0 00 1 39 3 00 39 81 03 40 01 AM all 40 26 0 00 1 25 3 55 44 93 and so on 这告诉我们另外一回事 在 3 00 和 3 40 之间某些用户进程加载了该系统 可能是在执行开销比较大的 查询 也可能是正在运行某个 RMAN 作业 从而消耗了这么多 CPU 这就是 sar 命令非常有用之处 该命令重放记录的数据 显示从某个特定时间起而不是现在的数据 这样您就完全实现了在该部分开头所 述的三个目标 获取历史数据 查找使用模式以及了解趋势 如果您想查看特定日期的 sar 数据 只需使用下面所示的 f 选项打开具有该文件名的 sar 打开第 26 日的数据 sar f var log sa sa26 与 vmstat 或 mpstat 一样 该命令还可以显示实时数据 要每隔 5 秒获取一次数据 共 10 次 请使 用 sar 5 10 Linux 2 6 9 55 0 9 ELlargesmp prolin3 12 27 2008 01 39 16 PM CPU user nice system iowait idle 01 39 21 PM all 20 32 0 00 0 18 1 00 78 50 01 39 26 PM all 23 28 0 00 0 20 0 45 76 08 01 39 31 PM all 29 45 0 00 0 27 1 45 68 83 01 39 36 PM all 16 32 0 00 0 20 1 55 81 93 and so on 10 times 您注意到 CPU 下的 all 值了吗 它意味着是所有 CPU 的总计统计信息 这比较适合单处理器系统 但 在多处理器系统中 您可能希望获取各个 CPU 的统计信息以及总计统计信息 P ALL 选项可以实现该 目标 sar P ALL 2 2 Linux 2 6 9 55 0 9 ELlargesmp prolin3 12 27 2008 01 45 12 PM CPU user nice system iowait idle 01 45 14 PM all 22 31 0 00 10 19 0 69 66 81 01 45 14 PM 0 8 00 0 00 24 00 0 00 68 00 01 45 14 PM 1 99 00 0 00 1 00 0 00 0 00 01 45 14 PM 2 6 03 0 00 18 59 0 50 74 87 01 45 14 PM 3 3 50 0 00 8 50 0 00 88 00 01 45 14 PM 4 4 50 0 00 14 00 0 00 81 50 01 45 14 PM 5 54 50 0 00 6 00 0 00 39 50 01 45 14 PM 6 2 96 0 00 7 39 2 96 86 70 01 45 14 PM 7 0 50 0 00 2 00 2 00 95 50 01 45 14 PM CPU user nice system iowait idle 01 45 16 PM all 18 98 0 00 7 05 0 19 73 78 01 45 16 PM 0 1 00 0 00 31 00 0 00 68 00 01 45 16 PM 1 37 00 0 00 5 50 0 00 57 50 01 45 16 PM 2 13 50 0 00 19 00 0 00 67 50 01 45 16 PM 3 0 00 0 00 0 00 0 00 100 00 01 45 16 PM 4 0 00 0 00 0 50 0 00 99 50 01 45 16 PM 5 99 00 0 00 1 00 0 00 0 00 01 45 16 PM 6 0 50 0 00 0 00 0 00 99 50 01 45 16 PM 7 0 00 0 00 0 00 1 49 98 51 Average CPU user nice system iowait idle Average all 20 64 0 00 8 62 0 44 70 30 Average 0 4 50 0 00 27 50 0 00 68 00 Average 1 68 00 0 00 3 25 0 00 28 75 Average 2 9 77 0 00 18 80 0 25 71 18 Average 3 1 75 0 00 4 25 0 00 94 00 Average 4 2 25 0 00 7 25 0 00 90 50 Average 5 76 81 0 00 3 49 0 00 19 70 Average 6 1 74 0 00 3 73 1 49 93 03 Average 7 0 25 0 00 1 00 1 75 97 01 这表示 CPU 标识符 以 0 开头 以及每个 CPU 的统计信息 在输出的结尾处 您将看到每个 CPU 的平均运行情况 命令 sar 不仅用于获取与 CPU 有关的统计信息 对于获取与内存有关的统计信息也非常有用 r 选项 显示大量利用内存的情况 sar r Linux 2 6 9 55 0 9 ELlargesmp prolin3 12 27 2008 12 00 01 AM kbmemfree kbmemused memused kbbuffers kbcached kbswpfree kbswpused swpused kbswpcad 12 10 01 AM 712264 32178920 97 83 2923884 25430452 16681300 95908 0 57 380 12 20 01 AM 659088 32232096 98 00 2923884 25430968 16681300 95908 0 57 380 12 30 01 AM 651416 32239768 98 02 2923920 25431448 16681300 95908 0 57 380 12 40 01 AM 651840 32239344 98 02 2923920 25430416 16681300 95908 0 57 380 12 50 01 AM 700696 32190488 97 87 2923920 25430416 16681300 95908 0 57 380 让我们看一看每个列的含义 kbmemfree此时可用内存的数量 以 KB 为单位 kbmemused 此时已使用的内存数量 以 KB 为单位 memused已使用内存的百分比 kbbuffers 用作缓冲区的内存百分比 kbcached用作缓存的内存百分比 kbswpfree此时可用交换区空间的大小 以 KB 为单位 kbswpused 此时已使用的交换空间大小 以 KB 为单位 swpused 此时已使用交换区的百分比 kbswpcad此时缓存的交换区大小 以 KB 为单位 在输出的结尾处 您将看到该时间段内的平均数字 还可以获取与特定内存有关的统计信息 B 选项显示与分页有关的活动 sar B Linux 2 6 9 55 0 9 ELlargesmp prolin3 12 27 2008 12 00 01 AM pgpgin s pgpgout s fault

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论