| 個人檔案上善若水相片部落格清單 | 說明 |
|
28/6/2007 Linux内存管理——vmstat 此文谈到的很多东西都值得我在性能测试改进方面参考,特此摘录,看来在读源码时需要对page和cpu调度的策略予以特别关注。现在最希望的就是能看到一些国外的性能监控解决方案。 ps:刚刚发现设置了<FONT>标签后会覆盖掉<DIV>的样式,bug,好大的bug。 处理单元是系统中最快的组件之一。在某一时间对单个程序来说保持 100% 的 CPU 占用率(也就是说,空闲 0%,等待 0%)超过几秒钟是相对少见的。甚至在重负载的多用户系统中,偶尔会出现一些 10 毫秒(ms)的时间段,在其结束时所有线程处于等待状态。如果监视器长时间地显示 CPU 占用率为 100%,则很有可能是某个程序陷入了死循环。即使程序“仅仅”是占用较多资源而不是崩溃了,也需要将它识别出来并进行处理。 r-->在运行队列中等待的进程数 vmstat 命令(CPU)第一个要使用的工具是 vmstat 命令,该命令可迅速提供关于各种系统资源和与之相关的性能问题的简要信息。vmstat 命令报告关于内核线程的统计信息,包括处于运行和等待队列中的、内存中的、页面调度中的、磁盘中的、中断、系统调用、上下文切换和 CPU 活动的内核线程。所报告的 CPU 活动是用户方式、系统方式、空闲时间和等待磁盘 I/O 的百分比细目分类。 注:
如果使用 vmstat 命令时不带任何选项,或者只带有间隔时间和任意的计数参数,例如 vmstat 2 10;那么第一行数字为自系统重新引导以来的平均值。
作为一个 CPU 监视器,vmstat 命令优于 iostat 命令,因为 vmstat 命令是滚动的,使得它的每报告一行的输出更容易扫描,并且如果有很多磁盘连接到系统中,由此所涉及的开销更少。下面的示例可以帮助您识别一个程序失控时或 CPU 过度密集以至于不能在一个多用户环境中运行时的情况。 # vmstat 2 kthr memory page faults cpu ----- ----------- ------------------------ ------------ ----------- r b avm fre re pi po fr sr cy in sy cs us sy id wa 1 0 22478 1677 0 0 0 0 0 0 188 1380 157 57 32 0 10 1 0 22506 1609 0 0 0 0 0 0 214 1476 186 48 37 0 16 0 0 22498 1582 0 0 0 0 0 0 248 1470 226 55 36 0 9 2 0 22534 1465 0 0 0 0 0 0 238 903 239 77 23 0 0 2 0 22534 1445 0 0 0 0 0 0 209 1142 205 72 28 0 0 2 0 22534 1426 0 0 0 0 0 0 189 1220 212 74 26 0 0 3 0 22534 1410 0 0 0 0 0 0 255 1704 268 70 30 0 0 2 1 22557 1365 0 0 0 0 0 0 383 977 216 72 28 0 0 2 0 22541 1356 0 0 0 0 0 0 237 1418 209 63 33 0 4 1 0 22524 1350 0 0 0 0 0 0 241 1348 179 52 32 0 16 1 0 22546 1293 0 0 0 0 0 0 217 1473 180 51 35 0 14 此输出显示了在一个死循环中将程序引入到一个繁忙的多用户系统中所带来的效果。头三个报告(已删除摘要)表明系统平衡在 50-55% 的用户、30-35% 的系统和 10-15% 的 I/O 等待处。当循环程序开始运行,所有可用的 CPU 周期都被耗用。因为循环程序不进行 I/O,所以它可以占有前面因为 I/O 等待而未用过的所有周期。更糟的是,这代表当一个有用进程放弃 CPU 时,始终有一个进程准备接管 CPU。因为循环程序的优先级与所有其它前台进程一样,所以当另一个进程变得可分派时它也没必要一定得放弃 CPU。该程序运行大约 10 秒钟(五个报告),然后由 vmstat 命令报告的活动恢复到较正常的模式。 最佳利用是让 CPU 在 100% 的时间中工作。这适用于单用户系统的情况,不需要共享 CPU。总的来说,如果 us + sy 时间低于 90%,则不认为单用户系统是 CPU 受限制的。但是,如果在一个多用户系统中 us + sy 时间超过 80%,则进程可能要花时间在运行队列中等待。响应时间和吞吐量会受损害。 要检查 CPU 是否是瓶颈,考虑 vmstat 报告中的四个 cpu 列和两个 kthr(内核线程)列。查看故障列也是值得的:
每秒钟在采样间隔时间上对各种队列中的内核线程数求得的平均值。kthr 列如下:
关于进程控制的信息,如陷阱和中断率。故障列如下:
回應 (3)
引用通告此內容的引用通告是: http://finlandrbt.spaces.live.com/blog/cns!70C541D1517F6BAE!987.trak 引述這則內容的部落格
|
|
|