Linux 内核缓冲内存为零

Linux 内核缓冲内存为零

有一个问题我在谷歌上找不到。

我有许多 Linux 机器,大多装有 SLES 或 openSUSE,版本和内核各不相同。在其中一些机器上,我遇到了 Oracle 事务缓慢的问题。这个问题时有发生,当我当时登录机器时,我看到 Oracle 被内核函数 sync_page 阻塞

# while :; do ps axo stat,pid,cmd,wchan | egrep '^D|^R'; echo --; sleep 5; done
D     3483 hald-addon-storage: polling ide_do_drive_cmd
Ds    4635 ora_dbw0_orcl               sync_page
Ds    4637 ora_lgwr_orcl               sync_page
Ds    4639 ora_ckpt_orcl               sync_page
D    11210 oracleorcl (LOCAL=NO)       sync_page
D    12457 [smtpd]                     sync_page
R+   12458 ps axo stat,pid,cmd,wchan   -
--
Ds    4635 ora_dbw0_orcl               sync_page
Ds    4637 ora_lgwr_orcl               sync_page
Ds    4639 ora_ckpt_orcl               sync_page
D    11210 oracleorcl (LOCAL=NO)       sync_page
R+   12501 ps axo stat,pid,cmd,wchan   -
--
Ds    4635 ora_dbw0_orcl               sync_page
Ds    4637 ora_lgwr_orcl               sync_page
Ds    4639 ora_ckpt_orcl               sync_page
D    11210 oracleorcl (LOCAL=NO)       sync_page
R+   12535 ps axo stat,pid,cmd,wchan   -
--
Ds    4635 ora_dbw0_orcl               sync_page
Ds    4637 ora_lgwr_orcl               sync_page
Ds    4639 ora_ckpt_orcl               sync_page
D    11210 oracleorcl (LOCAL=NO)       sync_page
R+   12570 ps axo stat,pid,cmd,wchan   -
--

所以我认为那个盒子的磁盘缓冲区内存不足,但内存没问题

             total       used       free     shared    buffers     cached
Mem:       4149084    3994552     154532          0          0    2424328
-/+ buffers/cache:    1570224    2578860
Swap:      3148700     750696    2398004

我认为这就是问题所在,缓冲区为零,我们必须直接写入磁盘,但是 为什么缓冲区为零?- 我尝试用谷歌搜索但一无所获 - 有谁可以帮忙吗?

答案1

Oracle DBMS 绕过操作系统的缓冲区并直接写入块设备。我不认为您的事务缓慢是由于没有使用缓冲区造成的。

答案2

free告诉你内核使用了多少缓冲区,不是有多少可用。内核缓冲区从总内存中取出——因此在这种情况下,您的内核使用 0/4149084 可用内存作为缓冲区。我不认为这是您的问题,并会创建一个新问题,试图找出您遇到 Oracle 相关问题的原因。

相关内容