Linux kernel linux内核缓冲区内存为零

Linux kernel linux内核缓冲区内存为零,linux-kernel,buffer,Linux Kernel,Buffer,有一个问题我在谷歌上找不到 我有很多linux机器,大多数都有SLES或openSUSE,有不同的版本和内核。 在其中一些方面,我面临着oracle事务处理速度慢的问题。这是一个时不时的问题,当我在那个时候登录到这个框时,我看到oracle在内核函数sync_页面中被阻塞了 # while :; do ps axo stat,pid,cmd,wchan | egrep '^D|^R'; echo --; sleep 5; done D 3483 hald-addon-storage: p

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

我有很多linux机器,大多数都有SLES或openSUSE,有不同的版本和内核。 在其中一些方面,我面临着oracle事务处理速度慢的问题。这是一个时不时的问题,当我在那个时候登录到这个框时,我看到oracle在内核函数sync_页面中被阻塞了

# 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
我认为这就是问题所在,缓冲区为零,我们必须直接写入磁盘,但为什么缓冲区为零——我尝试搜索它,但什么也找不到——有人能帮忙吗

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

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


您的结果表明您的可用磁盘带宽已饱和。

在serverfault上询问此问题,而不是在此处。
sync\u页面
不是系统调用。在你的情况下,磁盘限制了你的操作速度。好的,我知道磁盘限制了我的速度。但是为什么内核不缓冲它呢?有时候,磁盘请求不能被缓冲。您的
uname-a
是什么,安装了多少内存,以及您从
iostat
中得到了什么?可以免费说,我们有4Gb的RAM和非常旧的内核。现在没问题,所以对iostat没有兴趣。但这不是低ram交换的问题,交换从来没有被硬使用过。好的,但是其他守护进程呢?logrotate包含大量日志,zabbix_代理及其数据库-它们不使用O_DIRECT,但它们编写了大量日志,仍然没有使用缓冲区。