当免费RAM可用时,solaris上的Oracle DB利用交换内存

时间:2011-02-03 12:23:21

标签: oracle memory solaris swap

我们有一个奇怪的实例,我们注意到我们的oracle数据库服务器交换利用率是100%,并且惊讶地看到系统在此期间有可用内存。据我所知,一旦系统耗尽了空闲RAM,就会开始交换内存利用率(如果我错了,请纠正我)。不确定是什么导致这种不寻常的活动。有没有其他人经历过这样的行为?

个REG,

3 个答案:

答案 0 :(得分:1)

您应该提供有关如何获取指标的详细信息,但交换和RAM利用率之间没有直接关系。你当然可以通过仍然可用的免费RAM来摆脱交换空间。

必须有足够的交换才能适应所有(虚拟)内存预留。内存预留(即malloc)不使用RAM。仅在虚拟内存访问期间需要RAM。

答案 1 :(得分:1)

如果您使用的是solaris 10或更高版本,则系统参数不再位于/ etc / system中。而是通过区域,任务或用户级别的“项目”配置动态托管资源。

以下是我们其中一个区域中的其中一个项目配置文件。

system:0::::
user.root:1::::
noproject:2::::
default:3::::
group.staff:10::::
user.oracle:100:Oracle:::process.max-sem-nsems=(privileged,256,deny);project.ma-shm-ids=(privileged,256,deny);project.max-shm-memory=(privileged,42949672960,dny)

此处的设置意味着用户名oracle的用户将受益于特定的资源设置。

要设置将这样的行添加到项目文件中,请使用projadd命令。要修改projmod命令,如果要列出oracle当前可用的所有资源,那么

  1. su to oracle
  2. 输入:

    prctl -i project user.oracle

  3. 这将列出该“项目”可用的所有资源。

答案 2 :(得分:0)

在Solaris上运行的Oracle数据库有一个“错误”。 它在操作系统上“保留”交换,其中“swap”和“ram”组合成一个虚拟内存池。 保留交换只是无缘无故地耗尽基于磁盘的交换区域,并且根本不应该这样做。 ram和swap之间的所有转换都由Solaris OS本身处理。 我花了将近5年的时间让Sun / Oracle了解Java的完全相同的问题。

最新的Java 7和8不再“重叠”到内存池中。

我发现,如果操作系统遇到“交换”限制,则相应地调整内存大小,并完全删除交换。

在零交换可用的情况下,所有内存交互都在物理内存中,你不会看到双重问题,只要你有足够的ram来运行所有东西,你就不会看到有关交换耗尽的错误。