正如标题所述,当我echo ::memstat | mdb -k
在某些机器上运行它时,它非常慢。当我定期运行它时,我的 munin 图表显示 CPU 负载大幅增加。我打算将其用作::memstat
munin 图表的输入,因此需要频繁运行它。
当进程运行时,我在prstat
输出中看到以下内容:
PID USERNAME SIZE RSS STATE PRI NICE TIME CPU PROCESS/NLWP
6865 root 14M 12M cpu2 0 0 0:00:26 23% mdb/1
6868 root 14M 12M cpu1 0 0 0:00:26 23% mdb/1
可以看到,它已经运行了 26 秒。监控prstat
显示,在进程运行时,CPU 使用率不断增加。它需要大约 30 秒才能完成。
在另一台机器上(当然,就硬件而言,它更强大),它运行很多更快。重点是,它运行速度比我通过比较硬件规格(8GB 内存 vs 12GB 内存、8 核 vs 4 核SunOS 5.10 Generic_147441-01 i86pc i386 i86pc
vs SunOS 5.10 Generic_127128-11 i86pc i386 i86pc
)所预期的要快得多。但这不是真正的重点。我的主要问题是它echo ::memstat | mdb -k
需要 30 秒才能完成。
有人能解释一下这是怎么回事吗?什么可以解释“缓慢”?
答案1
旧版本的 Solaris 运行速度较慢::memstat
,主要是因为需要执行大量 TLB 击落。(而且事实上还没有人费心对其进行分析和优化。)较新版本(Solaris 10 Update 8)有一个优化版本。请参阅评论。