Linux 常 用 监 控 命 令 介 绍 基 础 应 用 组 梁 若 羽 2011-07-12 1
内 容 1 2 3 4 培 训 目 标 基 础 知 识 常 用 监 控 命 令 在 实 战 中 综 合 运 用 2
培 训 目 标 掌 握 常 用 监 控 命 令 的 用 途 和 启 用 方 法 熟 悉 各 个 关 键 输 出 参 数 的 真 实 含 义 了 解 Linux 操 作 系 统 的 一 些 基 本 原 理 抛 砖 引 玉, 交 流 经 验 3
内 容 1 2 3 4 培 训 目 标 基 础 知 识 常 用 监 控 命 令 在 实 战 中 综 合 运 用 4
基 础 知 识 核 心 态 与 用 户 态 核 心 态 :ring 0, 操 作 系 统 内 核 代 码 运 行 的 模 式, 可 以 无 限 制 访 问 系 统 存 储 外 部 设 备 用 户 态 :ring 3, 应 用 程 序 自 身 代 码 运 行 的 模 式, 非 特 权 状 态, 能 够 访 问 的 地 址 空 间 是 有 限 的 5
基 础 知 识 系 统 调 用 (1) 系 统 调 用 : 核 心 态 开 放 给 用 户 态 的 接 口, 以 软 中 断 实 现 函 数 调 用 : 用 户 态 层 面 的 概 念, 与 核 心 态 无 关 6
基 础 知 识 系 统 调 用 (2) int main(void) { printf("hello world!"); return 0; } $ strace./helloworld... write(1, "hello world!", 12hello world!) = 12 exit_group(0) =? 系 统 调 用 无 处 不 在, 哪 怕 是 最 简 单 的 hello world! strace 命 令 能 够 显 示 所 有 在 程 序 中 使 用 的 系 统 调 用 7
基 础 知 识 进 程 组 与 会 话 (1) 8
基 础 知 识 进 程 组 与 会 话 (2) 进 程 组 是 一 个 或 多 个 进 程 的 集 合, 进 程 组 ID 是 该 组 的 领 头 进 程 的 pid 会 话 是 一 个 或 多 个 进 程 组 的 集 合, 当 前 与 终 端 交 互 的 进 程 组 为 前 台 进 程 组, 只 能 有 一 个, 其 余 为 后 台 进 程 组 9
基 础 知 识 进 程 的 几 种 状 态 10
基 础 知 识 僵 尸 进 程 进 程 已 死 亡, 但 父 进 程 没 有 收 尸, 该 进 程 就 成 僵 尸 进 程 僵 尸 进 程 不 打 开 任 何 文 件, 几 乎 不 占 内 存, 但 是 占 据 进 程 表 的 资 源, 进 程 表 记 录 pid 进 程 状 态 CPU 时 间 等 僵 尸 状 态 是 每 个 子 进 程 结 束 时 必 经 的 状 态 系 统 监 控 中 出 现 大 量 僵 尸 进 程, 应 检 查 其 父 进 程 代 码 11
基 础 知 识 上 下 文 切 换 上 下 文 是 指 进 程 在 CPU 的 执 行 环 境, 例 如 寄 存 器 状 态 进 程 挂 起 时, 保 存 其 上 下 文, 再 次 运 行 时 恢 复 12
基 础 知 识 虚 拟 内 存 与 页 面 每 个 进 程 都 有 其 地 址 空 间, 地 址 空 间 在 逻 辑 上 是 连 续 的 物 理 上 可 以 被 分 为 多 个 RAM 碎 片, 也 可 以 有 部 分 暂 存 在 磁 盘, 使 得 进 程 可 用 的 内 存 比 实 际 内 存 要 多 操 作 系 统 把 虚 拟 内 存 分 成 一 个 个 页 面 来 管 理,Linux 的 页 面 大 小 通 常 为 4K 当 要 访 问 的 逻 辑 页 面 不 在 物 理 内 存 时, 产 生 缺 页 中 断 内 存 不 足 时, 淘 汰 旧 页 面, 换 入 新 页 面, 页 面 交 换 有 paging 和 swapping 之 分 13
基 础 知 识 常 规 页 面 一 些 大 型 应 用, 例 如 关 系 数 据 库 等, 如 仍 然 使 用 4K 大 小 的 页 面, 页 表 必 然 很 大, 影 响 效 率 14
基 础 知 识 巨 页 使 用 巨 页 能 够 以 较 小 的 页 表 映 射 较 多 的 内 存 15
基 础 知 识 虚 拟 化 技 术 Hypervisor: 运 行 在 物 理 服 务 器 和 操 作 系 统 之 间 的 中 间 软 件 层, 可 允 许 多 个 操 作 系 统 共 享 硬 件 991 原 则 :90% 的 服 务 器 在 90% 的 时 间,CPU 使 用 率 低 于 10% 16
基 础 知 识 tcp 连 接 状 态 连 接 建 立 时 的 tcp 状 态 变 迁 客 户 端 :SYN_SENT ESTABLISHED 服 务 端 :LISTEN SYN_RECV ESTABLISHED 连 接 关 闭 时 的 tcp 状 态 变 迁 主 动 方 :ESTABLISHED FIN_WAIT1 FIN_WAIT2 TIME_WAIT CLOSED 被 动 方 :ESTABLISHED CLOSE_WAIT LAST_ACK CLOSED 一 个 特 殊 的 tcp 状 态 连 接 双 方 同 时 关 闭 :CLOSING 17
基 础 知 识 三 次 握 手 与 四 次 握 手 18
基 础 知 识 同 时 连 接 与 同 时 关 闭 连 接 19
基 础 知 识 小 结 核 心 态 与 用 户 态 系 统 调 用 进 程 组 与 会 话 进 程 的 几 种 状 态 僵 尸 进 程 上 下 文 切 换 虚 拟 内 存 缺 页 中 断 页 面 交 换 巨 页 tcp 连 接 状 态 虚 拟 化 技 术 Q. 为 什 么 从 这 些 概 念 开 始? A. 因 为 这 些 对 于 理 解 命 令 的 输 出 大 有 裨 益 20
内 容 1 2 3 4 培 训 目 标 基 础 知 识 常 用 监 控 命 令 在 实 战 中 综 合 运 用 21
Linux top 命 令 汇 总 区 域 汇 总 区 域 显 示 五 个 方 面 系 统 性 能 信 息 负 载 : 时 间 登 录 用 户 数 系 统 平 均 负 载 进 程 : 运 行 睡 眠 停 止 僵 尸 CPU: 用 户 态 核 心 态 NICE 空 闲 等 待 IO 中 断 等 内 存 : 总 量 已 用 空 闲 ( 系 统 角 度 的 ) 缓 冲 缓 存 交 换 分 区 : 总 量 已 用 空 闲 22
Linux top 命 令 任 务 区 域 任 务 区 域 默 认 显 示 : 进 程 ID 有 效 用 户 进 程 优 先 级 NICE 值 进 程 使 用 的 虚 拟 内 存 物 理 内 存 和 共 享 内 存 进 程 状 态 CPU 占 用 率 内 存 占 用 率 累 计 CPU 时 间 进 程 命 令 行 信 息 使 用 交 互 命 令 f 可 选 择 更 多 列 名 描 述 列 名 描 述 PPID 父 进 程 ID CODE 代 码 段 大 小 RUSER 实 际 用 户 DATA 数 据 段 + 栈 大 小 TTY 终 端 名 nflt 缺 页 中 断 次 数 P 或 者 #C 进 程 调 度 的 CPU ndrt 脏 页 数 SWAP 进 程 使 用 的 交 换 分 区 大 小 23
Linux top 命 令 交 互 命 令 (1) 类 型 命 令 描 述 备 注 数 字 1 CPU 模 式 切 换 汇 总 区 显 示 字 母 l m 负 载 信 息 开 关 内 存 信 息 开 关 t 进 程 信 息 开 关 Z 色 彩 选 择 色 彩 x y 排 序 字 段 高 亮 运 行 状 态 高 亮 前 置 命 令 Z 前 置 命 令 Z z 色 彩 显 示 开 关 前 置 命 令 Z F 或 者 O 排 序 字 段 选 择 任 务 区 字 段 排 列 与 排 序 o R 字 段 顺 序 选 择 倒 序 顺 序 切 换 < 和 > 排 序 字 段 选 择 前 置 命 令 Z x 24
Linux top 命 令 交 互 命 令 (2) 类 型 命 令 描 述 备 注 c 命 令 行 信 息 切 换 f 显 示 字 段 选 择 任 务 区 显 示 H n 或 者 # 线 程 进 程 显 示 切 换 设 置 显 示 的 任 务 数 u U 设 置 显 示 某 个 有 效 用 户 的 任 务 设 置 显 示 某 个 实 际 用 户 的 任 务 两 者 究 竟 有 何 区 别? 其 它 W 空 格 或 回 车 保 存 设 置 手 动 刷 新 对 于 设 置 了 粘 着 位 的 程 序, 有 效 用 户 与 实 际 用 户 的 区 别 25
Linux iostat 命 令 主 要 命 令 行 参 数 iostat -c: 见 top 命 令 的 CPU 信 息 iostat -d: 吞 吐 率 每 秒 读 写 总 的 读 写 iostat -x: 每 秒 读 写 次 数 平 均 IO 队 列 长 度 平 均 每 次 IO 操 作 总 耗 时 平 均 每 次 IO 操 作 的 实 际 执 行 时 间 IO 使 用 率 一 个 隐 藏 的 等 式 :%util = (r/s + w/s) * svctm / 10 26
Linux iostat 命 令 案 例 分 析 (1) 遭 遇 IO 瓶 颈 r/s w/s avgqu-sz await svctm %util 71.60 125.00 68.68 356.60 4.75 93.42 88.40 74.20 38.25 236.09 5.45 88.54 44.60 124.00 84.49 510.51 5.75 96.98 (71.60+125.00)*4.75 = 933.85(ms) (88.40+74.20)*5.45 = 886.17(ms) (44.60+124.00)*5.75 = 969.45(ms) 那 么,IO 瓶 颈 有 什 么 症 状? %util 很 高 await 远 远 大 于 svctm avgqu-sz 比 较 大 27
Linux iostat 命 令 案 例 分 析 (2) 只 是 IO 忙 碌 r/s w/s avgqu-sz await svctm %util 194.40 1.20 1.04 5.32 5.05 98.70 174.00 1.80 1.04 5.90 5.63 99.00 217.20 1.20 1.01 4.62 4.50 98.28 (194.40+1.20)*5.05 = 987.78(ms) (174.00+1.80)*5.63 = 989.75(ms) (217.20+1.20)*4.50 = 982.80(ms) 为 什 么 不 算 IO 瓶 颈? %util 还 是 很 高, 比 较 容 易 迷 惑 人 await 接 近 svctm, 略 大 一 点 点 avgqu-sz 不 大 28
Linux dmesg 命 令 打 印 内 核 环 缓 冲 区 的 信 息 内 核 环 缓 冲 区 保 存 Linux 开 机 信 息 也 记 录 某 些 程 序 的 内 存 错 误 (segfault) 29
Linux lsof 命 令 (1) 查 看 文 件 系 统 阻 塞, 解 决 umount busy 问 题 查 看 监 听 端 口 被 哪 个 进 程 占 用 查 看 用 户 打 开 哪 些 文 件 30
Linux lsof 命 令 (2) 查 看 进 程 打 开 哪 些 文 件 查 看 远 程 已 打 开 的 网 络 连 接
Linux netstat 命 令 常 规 用 法 小 技 巧 netstat 参 数 描 述 执 行 格 式 -r 显 示 路 由 表 netstat -r -i 显 示 网 络 接 口 netstat -i -a 显 示 所 有 socket netstat -a 或 netstat -an -n 显 示 IP 与 -a 等 参 数 联 合 使 用 汇 总 统 计 tcp 连 接 状 态 查 看 端 口 被 哪 个 进 程 占 用 32
Linux ps 命 令 基 本 用 法 显 示 PGID 和 SID 显 示 进 程 派 生 树 BSD ps aux ps auxj ps auxf Linux ps -ef ps -efj ps -efh 进 程 状 态 :D R(unning) S(leep) T Z(ombie) BSD 风 格 附 加 状 态 :<( 高 优 先 级 ) N(ice) s( 领 头 进 程 ) l( 多 线 程 ) +( 前 台 进 程 ) 33
Linux vmstat 命 令 内 存 不 足 以 致 页 面 交 换 频 繁, 系 统 性 能 下 降 从 下 面 的 截 图 可 以 看 出 哪 些 性 能 指 标? free memory 急 剧 减 少, 回 收 buffer 和 cache 也 无 济 于 事, 于 是 大 量 使 用 交 换 分 区 (swpd), 页 面 交 换 (swap) 频 繁, 读 写 磁 盘 数 量 (io) 增 多, 缺 页 中 断 (in) 增 多, 上 下 文 切 换 (cs) 次 数 增 多, 等 待 IO 的 进 程 数 (b) 增 多, 大 量 CPU 时 间 用 于 等 待 IO(wa) 34
Linux sar 命 令 实 例 (1) 监 控 磁 盘 IO, 与 iostat 类 似 监 控 页 面 交 换,paging 与 swapping 如 果 页 面 回 收 率 (%vmeff) 接 近 100, 表 示 几 乎 所 有 被 列 入 回 收 列 表 的 页 面 都 能 够 被 正 常 回 收 如 果 %vmeff 太 低, 又 不 是 0.00, 表 示 内 存 有 瓶 颈 35
Linux sar 命 令 实 例 (2) 监 控 内 存 交 换 分 区 巨 页 页 面 sar -R: 空 闲 内 存 页 面 缓 冲 页 面 和 缓 存 页 面 的 变 化 趋 势 sar -r: 当 前 内 存 的 使 用 信 息, 与 free 命 令 类 似 sar -S: 当 前 交 换 分 区 的 使 用 信 息, 与 free 命 令 类 似 sar -H: 当 前 巨 页 页 面 的 信 息 36
Linux sar 命 令 实 例 (3) 监 控 CPU 进 程 创 建 与 上 下 文 切 换 运 行 队 列 与 负 载 proc/s: 平 均 每 秒 创 建 的 进 程 数 cswch/s: 平 均 每 秒 的 上 下 文 切 换 次 数 runq-sz: 等 待 运 行 时 间 片 的 进 程 数 plist-sz: 进 程 列 表 的 总 数 ldavg-x: 过 去 一 段 时 间 内 的 系 统 平 均 负 载, 即 进 程 状 态 为 R 或 D 的 加 权 平 均 数 blocked: 当 前 被 IO 阻 塞 的 进 程 数 37
内 容 1 2 3 4 培 训 目 标 基 础 知 识 常 用 监 控 命 令 在 实 战 中 综 合 运 用 38
在 实 战 中 综 合 运 用 (1) 首 先, 使 用 w 查 看 系 统 负 载 $ w 10:46:36 up 85 days, 14:17, 4 users, load average: 6.52, 5.57, 5.55 分 析 : 负 载 比 较 高, 系 统 资 源 出 现 瓶 颈 第 二, 使 用 vmstat 查 看 系 统 大 致 状 况 $ vmstat 2 procs -----------memory---------- ---swap-- -----io---- --system-- -----cpu------ r b swpd free buff cache si so bi bo in cs us sy id wa st 0 4 36212 524784 126016 4780220 0 0 33 21 0 0 6 7 80 7 0 2 0 36212 468396 126664 4800532 0 0 602 15382 13900 18410 9 14 69 8 0 2 3 36212 441572 127064 4792600 0 0 2024 56110 13754 14710 8 11 68 14 0 0 0 36212 477532 127572 4777576 0 0 1208 20356 13661 8726 5 9 70 17 0 0 1 36212 509236 128116 4744336 0 0 1880 11172 13646 11622 7 9 80 4 0 6 1 36212 508344 128688 4722108 0 0 2290 23354 13815 10977 7 10 73 10 0 4 0 36212 459968 129264 4766660 0 0 1404 64 13357 16221 9 12 77 3 0 1 2 36212 462180 129712 4752460 0 0 486 40270 13674 14392 8 11 70 10 0 分 析 : 交 换 分 区 无 变 化 也 无 页 面 交 换, 排 除 内 存 不 足 ;CPU 的 idle 值 维 持 在 70% 以 上, 基 本 可 排 除 CPU 的 问 题 ; 但 是, 每 秒 写 的 块 数 (bo) 很 大,CPU 的 IO wait(wa) 也 不 低,IO 方 面 可 能 存 在 瓶 颈 39
在 实 战 中 综 合 运 用 (2) 第 三, 使 用 iostat 分 析 IO 瓶 颈 $ iostat -d -x 1 Device: rrqm/s wrqm/s r/s w/s rsec/s wsec/s avgrq-sz avgqu-sz await svctm %util sda 0.00 8320.00 0.00 470.00 0.00 97552.00 207.56 135.86 304.25 2.13 100.10 sda1 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 sda2 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00... sda8 0.00 8320.00 0.00 470.00 0.00 97552.00 207.56 135.86 304.25 2.13 100.10 sdb 41.00 10.00 24.00 120.00 6328.00 1040.00 51.17 5.75 39.92 2.00 28.80 sdb1 41.00 10.00 24.00 120.00 6328.00 1040.00 51.17 5.75 39.92 2.00 28.80 分 析 :IO 集 中 在 sda8,%util 很 高,await 远 远 大 于 svctm,avgqu-sz 也 很 大, 满 足 IO 瓶 颈 的 全 部 条 件 第 四, 使 用 df 查 看 磁 盘 空 闲 块 和 inode $ df -h /dev/sda8 Filesystem /dev/sda8 $ df -i /dev/sda8 Filesystem Size Used Avail Use% Mounted on 114G 1.5G 106G 2% /home Inodes IUsed IFree IUse% Mounted on /dev/sda8 30M 19K 30M 1% /home 分 析 : 均 有 空 闲, 排 除 资 源 接 近 耗 尽, 此 外, 业 务 日 志 写 在 sdb1 分 区, 也 可 排 除 写 入 大 量 业 务 日 志 带 来 的 压 力 40
在 实 战 中 综 合 运 用 (3) 第 五, 使 用 lsof 查 看 什 么 进 程 操 作 /home 目 录 下 的 文 件 $ lsof -n grep home nginx 6010 cws 286u REG 8,8 16760832 11206661 /home/cws/cwsserver/fastcgi_temp/0000002200 (deleted) nginx 6010 cws 687u REG 8,8 7332864 11206673 /home/cws/cwsserver/fastcgi_temp/0000002397 (deleted) nginx 6011 cws 473u REG 8,8 16760832 11206671 /home/cws/cwsserver/fastcgi_temp/0000001976 (deleted)... 分 析 : 没 有 发 现 其 它 异 常, 但 有 大 量 的 nginx fastcgi 信 息, 看 上 去 与 此 有 关 第 六, 排 查 修 改 nginx 的 fastcgi 设 置 解 决 :nginx.conf 中 没 有 fastcgi 的 设 置, 即 使 用 默 认 参 数,fastcgi 缓 冲 区 大 小 为 36k, 对 于 部 分 response 来 说 太 小, 把 它 适 当 改 大, 问 题 解 决 使 用 vmstat iostat 等 命 令 再 查 看 皆 恢 复 正 常 41
Thank You! uc.cn 42