【问题标题】:Oracle DB on solaris utilizing swap memory when free RAM available当可用 RAM 可用时,Solaris 上的 Oracle DB 利用交换内存
【发布时间】:2011-02-03 12:23:21
【问题描述】:

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

注册,

【问题讨论】:

  • "据我所知,一旦系统的可用 RAM 用完,交换内存就会开始使用(如果我错了,请纠正我)。" -> 恐怕你错了,并且有点失望,你接受了一个没有关注问题的最可能根本原因的答案。

标签: oracle memory solaris swap


【解决方案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 到 oracle
  2. 类型:

    prctl -i 项目用户.oracle

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

【讨论】:

  • 感谢您提供此信息,我们正在根据您的意见进一步调查。
【解决方案2】:

您应该提供有关如何获取指标的详细信息,但交换和 RAM 利用率之间没有直接关系。您当然可以在空闲 RAM 仍然可用的情况下摆脱交换空间。

必须有足够的交换空间来容纳所有(虚拟)内存预留。内存预留(即 malloc)不使用 RAM。只有在访问虚拟内存时才需要 RAM。

【讨论】:

    【解决方案3】:

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

    最新的 Java 7 和 8 不再“双重浸入”内存池。

    我发现,在操作系统遇到“交换”限制的情况下,相应地调整内存大小,并完全删除交换。

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

    【讨论】:

      猜你喜欢
      • 2012-03-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-09-26
      • 1970-01-01
      相关资源
      最近更新 更多