linux内核缓冲区内存为零

时间:2010-12-27 08:39:28

标签: linux-kernel buffer

我无法在谷歌找到一个问题。

我有很多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

我认为这是问题,缓冲区是零,我们必须直接写入磁盘,但为什么缓冲区为零 - 我尝试google它并找不到任何东西 - 有人可以帮忙吗?

UPD

billing@Billing-server:~> uname -a
Linux Billing-server 2.6.18.2-34-bigsmp #1 SMP Mon Nov 27 11:46:27 UTC 2006 i686 i686 i386 GNU/Linux

1 个答案:

答案 0 :(得分:2)

Oracle数据库使用O_DIRECT标志专门请求内核缓冲其磁盘访问权限 - Oracle执行自己的缓冲。

您的结果表明您正在使可用磁盘带宽饱和。