免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 2892 | 回复: 4
打印 上一主题 下一主题

求救,vmstat.iostat.prstat的工作原理 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2006-05-18 17:08 |只看该作者 |倒序浏览
每次执行这些命令时,是否读取内存中的一个文件取得系统数据
还是执行时去临时收集
如果是读取文件的话,文件名叫什么,请高手指教

论坛徽章:
7
荣誉会员
日期:2011-11-23 16:44:17水瓶座
日期:2013-08-28 21:20:16丑牛
日期:2013-10-02 21:01:462015年迎新春徽章
日期:2015-03-04 09:54:45操作系统版块每日发帖之星
日期:2016-06-05 06:20:0015-16赛季CBA联赛之吉林
日期:2016-06-20 08:24:0515-16赛季CBA联赛之四川
日期:2016-08-18 15:02:02
2 [报告]
发表于 2006-05-18 17:11 |只看该作者
没有关心过这个问题,有一定难度。你运行truss iostat 1 1你看看能不能看出从哪里调用的文件。

论坛徽章:
0
3 [报告]
发表于 2006-05-19 00:54 |只看该作者
怎么没人回阿
我自己顶

论坛徽章:
0
4 [报告]
发表于 2006-05-19 09:20 |只看该作者
  1. bash-2.03$ truss vmstat 2
  2. execve("/usr/bin/vmstat", 0xFFBEFCCC, 0xFFBEFCD8)  argc = 2
  3. mmap(0x00000000, 8192, PROT_READ|PROT_WRITE|PROT_EXEC, MAP_PRIVATE|MAP_ANON, -1,
  4. 0) = 0xFF3A0000
  5. resolvepath("/usr/lib/ld.so.1", "/usr/lib/ld.so.1", 1023) = 16
  6. open("/var/ld/ld.config", O_RDONLY)             = 3
  7. fstat(3, 0xFFBEF558)                            = 0
  8. mmap(0x00000000, 104, PROT_READ, MAP_SHARED, 3, 0) = 0xFF390000
  9. close(3)                                        = 0
  10. stat("/usr/lib/libkstat.so.1", 0xFFBEF3F4)      = 0
  11. open("/usr/lib/libkstat.so.1", O_RDONLY)        = 3
  12. fstat(3, 0xFFBEF3F4)                            = 0
  13. mmap(0x00000000, 8192, PROT_READ|PROT_EXEC, MAP_PRIVATE, 3, 0) = 0xFF380000
  14. mmap(0x00000000, 81920, PROT_READ|PROT_EXEC, MAP_PRIVATE, 3, 0) = 0xFF360000
  15. mmap(0xFF372000, 460, PROT_READ|PROT_WRITE|PROT_EXEC, MAP_PRIVATE|MAP_FIXED, 3,
  16. 8192) = 0xFF372000
  17. munmap(0xFF362000, 65536)                       = 0
  18. memcntl(0xFF360000, 2244, MC_ADVISE, MADV_WILLNEED, 0, 0) = 0
  19. close(3)                                        = 0
  20. stat("/usr/lib/libc.so.1", 0xFFBEF3F4)          = 0
  21. open("/usr/lib/libc.so.1", O_RDONLY)            = 3
  22. fstat(3, 0xFFBEF3F4)                            = 0
  23. mmap(0xFF380000, 8192, PROT_READ|PROT_EXEC, MAP_PRIVATE|MAP_FIXED, 3, 0) = 0xFF3
  24. 80000
  25. mmap(0x00000000, 802816, PROT_READ|PROT_EXEC, MAP_PRIVATE, 3, 0) = 0xFF280000
  26. mmap(0xFF33C000, 24764, PROT_READ|PROT_WRITE|PROT_EXEC, MAP_PRIVATE|MAP_FIXED, 3
  27. , 704512) = 0xFF33C000
  28. munmap(0xFF32C000, 65536)                       = 0
  29. memcntl(0xFF280000, 113516, MC_ADVISE, MADV_WILLNEED, 0, 0) = 0
  30. close(3)                                        = 0
  31. stat("/usr/lib/libdl.so.1", 0xFFBEF3F4)         = 0
  32. open("/usr/lib/libdl.so.1", O_RDONLY)           = 3
  33. fstat(3, 0xFFBEF3F4)                            = 0
  34. mmap(0xFF380000, 8192, PROT_READ|PROT_EXEC, MAP_PRIVATE|MAP_FIXED, 3, 0) = 0xFF3
  35. 80000
  36. close(3)                                        = 0
  37. stat("/usr/platform/SUNW,UltraAX-i2/lib/libc_psr.so.1", 0xFFBEF204) = 0
  38. open("/usr/platform/SUNW,UltraAX-i2/lib/libc_psr.so.1", O_RDONLY) = 3
  39. fstat(3, 0xFFBEF204)                            = 0
  40. mmap(0x00000000, 8192, PROT_READ|PROT_EXEC, MAP_PRIVATE, 3, 0) = 0xFF350000
  41. mmap(0x00000000, 16384, PROT_READ|PROT_EXEC, MAP_PRIVATE, 3, 0) = 0xFF270000
  42. close(3)                                        = 0
  43. munmap(0xFF350000, 8192)                        = 0
  44. sysconfig(_CONFIG_PAGESIZE)                     = 8192
  45. sysconfig(_CONFIG_CLK_TCK)                      = 100
  46. open("/dev/kstat", O_RDONLY)                    = 3
  47. brk(0x00024888)                                 = 0
  48. brk(0x00026888)                                 = 0
  49. ioctl(3, KSTAT_IOC_CHAIN_ID, 0x00000000)        = 376
  50. ioctl(3, KSTAT_IOC_READ, "kstat_headers")       Err#12 ENOMEM
  51. brk(0x00026888)                                 = 0
  52. brk(0x00030888)                                 = 0
  53. ioctl(3, KSTAT_IOC_READ, "kstat_headers")       = 376
  54. brk(0x00030888)                                 = 0
  55. brk(0x00032888)                                 = 0
  56. brk(0x00032888)                                 = 0
  57. brk(0x00034888)                                 = 0
  58. brk(0x00034888)                                 = 0
  59. brk(0x00036888)                                 = 0
  60. brk(0x00036888)                                 = 0
  61. brk(0x00038888)                                 = 0
  62. brk(0x00038888)                                 = 0
  63. brk(0x0003A888)                                 = 0
  64. ioctl(3, KSTAT_IOC_READ, "system_misc")         = 376
  65. ioctl(3, KSTAT_IOC_READ, "cpu_stat0")           = 376
  66. sigaction(SIGCONT, 0xFFBEFB48, 0xFFBEFBC8)      = 0
  67. ioctl(3, KSTAT_IOC_READ, "sysinfo")             = 376
  68. ioctl(3, KSTAT_IOC_READ, "vminfo")              = 376
  69. ioctl(3, KSTAT_IOC_READ, "system_misc")         = 376
  70. ioctl(3, KSTAT_IOC_READ, "cpu_stat0")           = 376
  71. ioctl(3, KSTAT_IOC_READ, "dad0")                = 376
  72. ioctl(3, KSTAT_IOC_READ, "dad1")                = 376
  73. ioctl(3, KSTAT_IOC_READ, "sd0")                 = 376
  74. ioctl(1, TCGETA, 0xFFBEED8C)                    = 0
  75. procs     memory            page            disk          faults      cpu
  76. write(1, "   p r o c s           m".., 75)      = 75
  77. r b w   swap  free  re  mf pi po fr de sr dd dd s0 --   in   sy   cs us sy id
  78. write(1, "   r   b   w       s w a".., 79)      = 79
  79. 0 0 0 2481624 501464 2   6  2  0  0  0  0  4  0  0  0  320  398  226  1  1 98
  80. write(1, "   0   0   0   2 4 8 1 6".., 79)      = 79
复制代码




我做了一下,得到上面的结果。
分析一下:
stat("/usr/lib/libkstat.so.1", 0xFFBEF3F4)      = 0
open("/usr/lib/libkstat.so.1", O_RDONLY)        = 3
上面的两句话应该是调用共享的库libkstat.so.1,听名字就应该跟kernel的state或status有关,应该就是通过这个程序来得到结果吧


ioctl(3, KSTAT_IOC_READ, "system_misc"         = 376
ioctl(3, KSTAT_IOC_READ, "cpu_stat0"           = 376
sigaction(SIGCONT, 0xFFBEFB48, 0xFFBEFBC      = 0
ioctl(3, KSTAT_IOC_READ, "sysinfo"             = 376
ioctl(3, KSTAT_IOC_READ, "vminfo"              = 376
ioctl(3, KSTAT_IOC_READ, "system_misc"         = 376
ioctl(3, KSTAT_IOC_READ, "cpu_stat0"           = 376
ioctl(3, KSTAT_IOC_READ, "dad0"                = 376
ioctl(3, KSTAT_IOC_READ, "dad1"                = 376
ioctl(3, KSTAT_IOC_READ, "sd0"                 = 376
ioctl(1, TCGETA, 0xFFBEED8C)                    = 0

上面的这些咚咚应该就是具体的kernel的那些变量吧。



应该差不多了吧,这些信息?

论坛徽章:
0
5 [报告]
发表于 2006-05-19 10:13 |只看该作者
linux下有没类似truss这个工具呀?
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP