LinuxCPU达到瓶颈,怎样优化?
:查看某个进程中线程的上下文切换情况,下图查看的是 hicore 进程中所有的线程上下文切换情况。 关注两列内容: 1. 自愿上下文切换:进程无法获取所需资源,导致的上下文切换。比如, I/O、内存等系统资源不足时。 2. 非自愿上下文切换:进程由于时间片已到等原因,被系统强制调度,进而发生的上下文切换。比如,大量进程都在争抢 CPU 时。 1.3.9. Procps 工具 procps 是一组命令行和全屏工具,是由内核动态生成的一个 "伪" 文件系统,可以提供进程表中条目状态的信息。该文件系统为内核数据结构提供了一个简易接口,procps 程序通常就集中在这个描述了系统进程运行状态的数据结构上。 procps 包括以下程序: free - 报告系统中可用内存和已用内存的数量 kill - 基于 PID,向进程发送信号 pgrep - 根据名称或其他属性列出进程 pkill - 根据名称或其他属性向进程发送信号 pmap - 报告进程的内存映射 ps - 报告进程信息 pwdx - 报告进程的当前目录 skill - pgrep/pkill 的过时版本 slabtop - 实时显示内核 slab 缓存信息 snice - Renice 一个进程 sysctl -运行时内核参数的读或写 tload - 系统负载均值的可视化 top - 正运行进程的实时动态视图 uptime - 显示系统的已运行时间和负载情况 vmstat - 报告虚拟内存统计信息 w - 报告登录用户,以及他们正在做什么 watch - 定期执行程序,显示全屏输出官网地址: 1.3.10. sysstat 工具 在嵌入式 Linux 设备中同样也不存在该工具,busybox 中也没有相关命令。需要安装 Linux 性能监控工具 sysstat,他是一个工具集,包括 sar、sadf、mpstat、iostat、pidstat 等,这些工具可以监控系统性能和使用情况。各工具的作用如下: 1. iostat - 提供 CPU 统计,存储 I/O 统计(磁盘设备,分区及网络文件系统) 2. mpstat - 提供单个或组合 CPU 相关统计 3. pidstat - 提供 Linux 进程级别统计:I/O、CPU、内存等 4. sar - 收集、报告、保存系统活动信息:CPU、内存、磁盘、中断、网络接口、TTY、内核表等 5. sadc - 系统活动数据收集器,作为 sar 后端使用 6. sa1 - 收集系统活动日常数据,并二进制格式存储,它作为 sadc 的工具的前端,可以通过 cron 来调用 7. sa2 - 生成系统每日活动报告,同样可作为 sadc 的工具的前端,可以通过 cron 来调用 8. sadf - 可以以 CSV、XML 格式等显示 sar 收集的性能数据,这样非常方便的将系统数据导入到数据库中,或导入到 Excel 中来生成图表 9. nfsiostat-sysstat: 提供 NFS I/O 统计 10. cifsiostat: 提供 CIFS 统计 sysstat 功能强大,功能也在不断的增强,每个版本提供了不同的功能,可以到 sysstat 官网了 解 工 具 最 先 发 展 情 况 和 获 得 相 应 的 帮 助 手 册 。 官 网 地 址 : 1.3.11. 中断 中断是一种异步的事件处理机制,可以提高系统的并发处理能力。中断处理程序会打断其他进程的运行,为了减少对正常进程运行调度的影响,中断处理程序就需要尽可能快地运行。 Linux 将中断处理过程分成了两个阶段,也就是上半部和下半部。 · 上半部用来快速处理中断,它在中断禁止模式下运行,主要处理跟硬件紧密相关的或时间敏感的工作。 · 下半部用来延时处理上半部未完成的工作,通常以内核线程的方式运行。 /proc/interrupts:查看硬中断发生的类型 硬件中断发生频繁,是件很消耗 CPU 资源的事情,Linux 默认情况下是将所有的硬件中断都绑定在 CPU0 上,在多核 CPU 条件下如果有办法把大量硬件中断分配给不同的 CPU (core) 处理显然能很好的平衡性能。 1.3.13. 根据上下文切换的类型做具体分析 · 自愿上下文切换变多,说明进程都在等待资源,有可能发生 I/O 等其他问题 · 非自愿上下文切换变多,说明进程都在被强制调度,也就是都在争抢 CPU,说明 CPU 的确成了瓶颈 · 中断次数变多,说明 CPU 被中断处理程序占用,还需要通过查看 /proc/interrupts 文件来分析具体的中断类型。 1.4. CPU 使用率 /proc/stat,提供的是系统的 CPU 和任务统计信息。这个信息非常的原始 CPU 使用率相关的重要指标 第一列:user(us),代表用户态 CPU 时间。 第二列:nice(ni),代表低优先级用户态 CPU 时间,也就是进程的 nice 值被调整为 1- 19 之间时的 CPU 时间。nice 可取值范围是 -20 到 19, 数值越大,优先级反而越低 第三列:system (sys),代表内核态 CPU 时间。 第四列:idle(us),代表空闲时间。注意,这里它不包括等待 I/O 的时间(iowait)。 第五列:iowait(wa),代表等待 I/O 的 CPU 时间。 第六列:irq(hi),代表处理硬中断的 CPU 时间 第七列:softirq(si),代表处理软中断的 CPU 时间。 真正查看 CPU 使用率的命令是通过 top 命令 1.5. 软中断 提供了软中断的运行情况。 注意软中断的类型,也就是第一列内容。 注意同一种软中断在不同 CPU 上的分布情况,也就是同一行内容。 (编辑:晋中站长网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |