Solaris Unix 系统交换和阻塞进程

Solaris Unix 系统交换和阻塞进程

一些用户抱怨新服务器的性能不佳。这台机器上唯一运行的是 Oracle 10.2。

乍一看一切正常:负载很小,日志中没有任何内容。我唯一能找到的是 vmstat 抱怨大量交换和阻塞进程。我应该从哪里开始排除此故障?

# vmstat -S 5 5
 kthr      memory            page            disk          faults      cpu
 r b w   swap  free  si  so pi po fr de sr rm s0 s1 s2   in   sy   cs us sy id
 0 0 0 12420128 16679384 0 0 672 809 809 0 0 -0 2 2 -0  875  572  652  0  0 100
 0 7 0 1926560 5871472 0  0 4396 11463 11463 0 0 0 0 0 0 1796 662 1731 0  0 100
 0 2 0 1925984 5934624 0  0 19058 13657 13657 0 0 0 0 0 0 4877 1336 6145 0 1 99
 0 3 0 1925984 6126144 0  0 12691 13821 13821 0 0 0 0 0 0 3708 1055 4537 0 1 99
 0 5 0 1925984 6093776 0  0 6033 15628 15628 0 0 0 0 0 0 2215 745 2386 0  0 100

答案1

抱歉,但您的 vmstat 输出实际上并未显示任何交换。首先,Solaris 对“交换”的定义是,由于极端的内存压力,整个进程被换入或换出。这些是您的 0 si 和 so 列。除了最病态的负载系统之外,您实际上不应该在所有系统中看到这种情况。pi 和 po 列可以显示“分页”活动。在其他系统上通常称为“交换”的活动在 Solaris 术语中称为“分页”。但您需要运行“vmstat -p”来查看 api/apo(匿名页面输入和匿名页面输出)数字 - 这就是人们通常所说的“交换”。pi/po 列包括本质上正常的文件系统活动。(例如内存映射 IO)。

要识别有问题的设备,iostat 会帮到你。比如“iostat -dxzn 1”。你可能会看到一些 100% 繁忙的设备,因为有些进程在磁盘 IO 上被阻塞(vmstat b 列)。

答案2

我太新手了,无法添加评论,所以我会“回答”......

尝试运行“iostat -xcn 1”来查看你的热的块设备是。您使用的是原始卷还是格式化的?ZFS 还是 UFS(我假设这是 Solaris 10...)?您的磁盘布局是什么?

你正在交换一点……你调整过你的信号量等吗?使用项目或 /etc/system(再次假设是 Solaris 10……)?

答案3

我通常会先从用户那里获取更多细节。到底是什么导致工作不顺利?即使你得到了“所有”反馈,也要尝试找出至少一个具体案例、交易、工作……需要关注和追踪的内容。

然后通过 Oracle 进行跟踪(例如,如果不是太复杂的话,可以跟踪 10046),检查使用了哪些服务器资源(哪些表、在哪些磁盘上...),找出时间都花在了哪里,...

根据我的经验,当我看到 100% 繁忙的磁盘时iostat -znx 3,要么是 Oracle 配置不当,要么是执行计划不理想,进行了全表扫描等。

另一种方法是查看繁忙磁盘上的数据(表空间或重做或什么?),然后查找 IO 昂贵的事务或长操作等。

顺便问一下 - 当您移至新服务器时,您是否重新计算了统计数据等?Oracle 的动态优化器在这两个方面都很差劲。

答案4

仔细查看您发布的数字,您会发现有 0 页被交换进和交换出。即使-S您的机器正在交换,您也不应该在这些列中看到 0。

我敢打赌你的机器正在执行内存映射 IO,它有类似的分页特性,但并不表示会出现抖动。

我目前无法使用 Solaris 计算机,因此我基于vmstat(1) 的手册页

相关内容